子元素切换为折叠或隐藏后网格没有变化
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)
.
您还必须将相应 RowDefinition
的 Height
从 *
更改为 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>
我有一个带有 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)
.
您还必须将相应 RowDefinition
的 Height
从 *
更改为 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>