在 WPF 中折叠网格
Posted
技术标签:
【中文标题】在 WPF 中折叠网格【英文标题】:Collapse a Grid in WPF 【发布时间】:2014-09-11 18:50:29 【问题描述】:我正在使用下面的代码创建一个带有网格的 3 列布局。
<Window x:Class="WpfApplication21.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid Column="0" Background="Aqua"></Grid>
<Grid Column="1" Background="Red"></Grid>
<Grid Column="2" Background="Yellow"></Grid>
</Grid>
</Window>
我不明白的部分是,当我将第三个网格的Visibility
设置为Collapsed
时,它所占用的空间仍然存在。我希望将剩余空间添加到其他两个网格中。
<Grid Column="2" Background="Yellow" Visibility="Collapsed"></Grid>
【问题讨论】:
Dynamically toggle visibility of WPF grid column from C# code的可能重复 【参考方案1】:您告诉Grid
将自己平均分为 3 部分,您需要将最后一列设置为 Auto
宽度以实现您想要的(使最后一列与其内容的宽度匹配):
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
【讨论】:
【参考方案2】:因为您只隐藏了 Grid 的 ColumnDefinition,但实际上并没有隐藏 Grid。
你可以这样做,要隐藏第三列,你需要将列的宽度设置为“0”
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition x:Name="TestColumn" Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid Column="0" Background="Aqua"></Grid>
<Grid Column="1" Background="Red"></Grid>
<Button Grid.Column="2" Click="hideColumn">hideColumn</Button>
</Grid>
private void hideColumn(object sender, RoutedEventArgs e)
this.TestColumn.Width = new GridLength(0, GridUnitType.Pixel);
【讨论】:
感谢 Sajeetharan,您的答案也有效,但 Bolu 建议的答案在不使用代码的情况下也是如此。以上是关于在 WPF 中折叠网格的主要内容,如果未能解决你的问题,请参考以下文章