WPF Grid Row Определение размера строки - PullRequest
1 голос
/ 19 сентября 2019

В проекте WPF у меня есть Grid с 3 строками.В каждой строке у меня есть StackPanel, содержащая TextBlock.

Когда все StackPanel являются видимыми, я бы хотел, чтобы каждая StackPanel занимала 1/3 высоты сетки каждый.Но когда одна StackPanel свернута, то оставшиеся 2 StackPanel занимают по 1/2 от высоты сетки каждый.И если 2 свернуты, то оставшаяся заполняет всю сетку.

Ниже приведен пример кода, иллюстрирующий пользовательский интерфейс.

Если я изменю 3-й RowDefinition Height на "Auto" и установите panel3.Visibility = "Collapsed", тогда произойдет правильное.Но потом, если я изменю его обратно на «Видимый», он не будет работать.

Я не могу найти способ достичь того, чего хочу.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <StackPanel x:Name="panel1" Grid.Row="0" Visibility="Visible">
        <TextBlock x:Name="txt1" Text="FIRST ROW" />
    </StackPanel>
    <StackPanel x:Name="panel2" Grid.Row="1" Visibility="Visible">
        <TextBlock x:Name="txt2" Text="SECOND ROW" />
    </StackPanel>
    <StackPanel x:Name="panel3" Grid.Row="2" Visibility="Visible">
        <TextBlock x:Name="txt3" Text="THIRD ROW" />
    </StackPanel>
</Grid>

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

попробуйте UniformGrid с одним столбцом вместо Grid:

<UniformGrid Columns="1">
    <StackPanel x:Name="panel1" Visibility="Visible">
        <TextBlock x:Name="txt1" Text="FIRST ROW" />
    </StackPanel>
    <StackPanel x:Name="panel2" Visibility="Visible">
        <TextBlock x:Name="txt2" Text="SECOND ROW" />
    </StackPanel>
    <StackPanel x:Name="panel3" Visibility="Visible">
        <TextBlock x:Name="txt3" Text="THIRD ROW" />
    </StackPanel>
</UniformGrid>
0 голосов
/ 19 сентября 2019

Когда Visibility от Grid до Collapsed, вы можете установить высоту от Grid.RowDefinition до Auto следующим образом:

row1.Height = GridLength.Auto;

Когда Visibility из *От 1010 * до Visible вы можете установить высоту от Grid.RowDefinition до 1* следующим образом:

row1.Height = new GridLength(1, GridUnitType.Star);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...