如何在WPF中使变化的列数填充整个宽度并水平居中?

问题描述

我在WPF中有一个包含3列的网格。每列都填充有一个垂直堆栈面板。第一列(及其内容)始终可见。 2.和3.列链接到复选框。

我基本上想让各列填充整个水平空间,同时还要使其内容居中(每列的内容相同)。因此,例如,如果仅使用第一列,则其内容应在整个网格宽度上居中。如果还使用2.列,则应将两个列的整个网格空间均分,并且其内容应居中居中。当然,在使用第三列的情况下,空格也将除以3。

我现在的想法是,但我无法使堆栈面板居中/填充水平空间。

<CheckBox Style="{StaticResource MaterialDesignCheckBox}" Content="2. Durchgang" IsChecked="{Binding RVPDGsecondround}" Margin ="0,0"/>
<CheckBox Style="{StaticResource MaterialDesignCheckBox}" Content="3. Durchgang" IsChecked="{Binding RVPDGthirdround}" Margin ="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>

解决方法

UniformGrid可能比Grid更适合:

<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>