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

How to make changing number of columns fill entire width and center horizontally in WPF?

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

我基本上想让列填满整个水平方向 space,同时让它们的内容居中(每列的内容相同)。因此,例如,如果仅使用第一列,则其内容应在整个网格宽度上居中。如果还使用了 2. 列,则整个网格 space 应该对两列进行均分,并且它们的内容应该在内部居中。如果还使用了第三列,space 当然会除以 3。

我现在的想法如下,但我无法让堆栈面板 centered/fill 超出水平方向 space。

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

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>