#wpf #grid-layout
#wpf #сетка-макет
Вопрос:
У меня есть сетка с 3 столбцами в WPF. Каждый столбец заполняется вертикальной стековой панелью. Первый столбец (и его содержимое) всегда виден. 2. и 3. столбцы связаны с флажками.
И я в основном хочу, чтобы столбцы заполняли все горизонтальное пространство, а также центрировали их содержимое (содержимое каждого столбца одинаково). Так, например, если используется только первый столбец, его содержимое должно быть центрировано по всей ширине сетки. Если также используется 2. column, все пространство сетки должно быть равномерно разделено для обоих столбцов, а их содержимое должно быть центрировано внутри. При использовании третьего столбца пространство, конечно, было бы разделено на 3.
Моя идея на данный момент заключалась в следующем, но я не могу заставить stackpanels центрироваться / заполнять горизонтальное пространство.
<CheckBox Style="{StaticResource MaterialDesignCheckBox}" Content="2. Durchgang" IsChecked="{Binding RVPDGsecondround}" Margin ="0,0,0,0"/>
<CheckBox Style="{StaticResource MaterialDesignCheckBox}" Content="3. Durchgang" IsChecked="{Binding RVPDGthirdround}" Margin ="0,0,0,0"/>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" Grid.Column="0">
<TextBlock Text="Durchgang 1" Style="{StaticResource MaterialDesignBody2TextBlock}"/>
</StackPanel>
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" Grid.Column="1" Visibility="{Binding RVPDGsecondround, Converter={StaticResource b2v}}">
<TextBlock Text="Durchgang 2" Style="{StaticResource MaterialDesignBody2TextBlock}"/>
</StackPanel>
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" Grid.Column="2" Visibility="{Binding RVPDGthirdround, Converter={StaticResource b2v}}">
<TextBlock Text="Durchgang 3" Style="{StaticResource MaterialDesignBody2TextBlock}" />
</StackPanel>
</Grid>
Ответ №1:
Равномерная сетка может быть более подходящей, чем сетка:
<UniformGrid Rows="1" HorizontalAlignment="Stretch">
<StackPanel HorizontalAlignment="Center">
<TextBlock Text="Column 1"/>
</StackPanel>
<StackPanel HorizontalAlignment="Center" Visibility=...>
<TextBlock Text="Column 2"/>
</StackPanel>
<StackPanel HorizontalAlignment="Center" Visibility=...>
<TextBlock Text="Column 3"/>
</StackPanel>
</UniformGrid>