子元素切换为折叠或隐藏后网格没有变化

Grid is not changing after child elements are switched to collapsed or hidden

我有一个带有 4 个按钮的网格。启动我的应用程序时,所有 4 个按钮都可见。用户操作后,按钮 1 到 3 切换为 collapsed/hidden。我的目标是 3 个按钮不再可见,第四个按钮 "spreads" 覆盖整个网格(参见此 post 中的最后一张图片)。不幸的是,我的代码没有按照我想要的方式工作。 :/

这是我现在的代码:

                <Grid Grid.Column="0">
                   <Grid.RowDefinitions>
                      <RowDefinition Height="*"/>
                      <RowDefinition Height="*"/>
                      <RowDefinition Height="*"/>
                      <RowDefinition Height="*"/>
                   </Grid.RowDefinitions>
                   <Button Name="btn_1" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 1"/>
                   <Button Name="btn_2" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 2"/>
                   <Button Name="btn_3" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 3"/>
                   <Button Name="btn_4" Grid.Row="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 4"/>
                </Grid>

这是代码的结果:

如果我将按钮 1 到 3 的可见性从可见设置为隐藏或折叠,视图如下:

我实际预期的结果如下:

我也尝试过使用停靠面板。可惜也没有成功。我必须使用事件或触发器吗?

我很感激任何建议。提前致谢。

编辑 - 解决方案:

将按钮 1 到 3 的高度从 "*" 更改为 "auto" 是解决方案。

                <Grid Grid.Column="0">
                   <Grid.RowDefinitions>
                      <RowDefinition Height="{Binding ControlRowDefinitionHeight}"/>
                      <RowDefinition Height="{Binding ControlRowDefinitionHeight}"/>
                      <RowDefinition Height="{Binding ControlRowDefinitionHeight}"/>
                      <RowDefinition Height="*"/>
                   </Grid.RowDefinitions>
                   <Button Name="btn_1" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 1"/>
                   <Button Name="btn_2" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 2"/>
                   <Button Name="btn_3" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 3"/>
                   <Button Name="btn_4" Grid.Row="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 4"/>
                </Grid>

我将绑定 ControlRowDefinitionHeight (public GridLength ControlRowDefinitionHeight) 设置为 new GridLength(1, GridUnitType.Star) 在我的代码后面,如果所有 4 个按钮都可见。如果只有第四个按钮可见,则 ControlRowDefinitionHeight 设置为 new GridLength(1, GridUnitType.Auto).

您还必须将相应 RowDefinitionHeight* 更改为 Auto,否则网格将继续均匀分布其行,因为我们'观察过。

        **Try it by adding MinHeight="anything you like"**    
            <Grid Grid.Column="0">
               <Grid.RowDefinitions>
                  <RowDefinition Height="auto"/>
                  <RowDefinition Height="auto"/>
                  <RowDefinition Height="auto"/>
                  <RowDefinition Height="auto"/>
               </Grid.RowDefinitions>
               <Button Name="btn_1" Grid.Row="0" MinHeight="20"  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 1"/>
               <Button Name="btn_2" Grid.Row="1" MinHeight="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 2"/>
               <Button Name="btn_3" Grid.Row="2" MinHeight="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 3"/>
               <Button Name="btn_4" Grid.Row="3" MinHeight="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Button 4"/>
            </Grid>