C# 当使用右水平对齐最小化StackPanel时,将显示结束

C# 当使用右水平对齐最小化StackPanel时,将显示结束,c#,wpf,alignment,stackpanel,minimize,C#,Wpf,Alignment,Stackpanel,Minimize,我在Wpf中有一个窗口,它显示了一个包含3个StackPanel的网格 <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <Co

我在
Wpf
中有一个窗口,它显示了一个包含3个StackPanel的网格

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="auto"/>
    </Grid.ColumnDefinitions>
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="Text1"/>
        <Button Width="100" Margin="15,0" Content="Button1"/>
    </StackPanel>
    <StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
        <TextBlock Text="Text2"/>
        <Button Width="100" Margin="15,0" Content="Button2"/>
    </StackPanel>
    <StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right">
        <TextBlock Text="Text3"/>
        <Button Width="100" Margin="15,0" Content="Button3"/>
    </StackPanel>
</Grid>

当我最小化窗口时,中间的StackPanel应该部分消失(因为它所在的ColumnDefinition定义为
Width=“*”

但是,由于水平对齐是正确的,当我最小化窗口时,StackPanel的开始消失,它显示了结束(看图片)

当我最小化端点时,我希望它消失(就像HorizontalAlignment=left中的行为),但我不想更改HorizontalAlignment

有人知道怎么做吗

编辑-1:

顺便说一下,我遇到了一个奇怪的解决办法! 当我把中间的StackPanel转到DockPanel时,它工作了!如果有人能解释为什么会这样,我会很高兴的


此外,我对不改变布局的解决方案很感兴趣。

这是因为您采用了硬编码的按钮大小100,因此每当从最大化位置恢复窗口时,网格第二列的可用大小也会小于按钮大小,因此会被剪裁

设置网格或父窗口的最小宽度以解决此问题