[英]Dynamically toggle visibility of WPF grid column from C# code
我的问题是:我无法找到如何切换WPF网格列的可见性。 假设遵循XAML标记:
<Grid x:Name="myGrid">
<Grid.RowDefinitions>
<RowDefinition x:Name="Row1" />
<RowDefinition x:Name="Row2" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Column1" />
<ColumnDefinition x:Name="Column2" />
</Grid.ColumnDefinitions>
</Grid>
Aferwards网格中充满了一些控件等。现在我想从C#代码中动态隐藏一列。 我已经尝试通过将列的定义宽度设置为零来实现此目的,例如Column1.Width = 0
。 这有效,但我真的不喜欢这个解决方案 - 真的没有更好的方法吗?
我正在寻找类似myGrid.Columns[0].Visibility = COLLAPSED
东西myGrid.Columns[0].Visibility = COLLAPSED
或Column1.Visibility = HIDDEN
。 我只是找不到那样的东西 - 任何想法?
最简单的方法是在要隐藏的相关列中添加一个命名Grid
作为顶级控件。 然后你可以像任何其他控件一样隐藏它及其所有内容:
在XAML中:
<Grid x:Name="myGrid">
<Grid.RowDefinitions>
<RowDefinition x:Name="Row1" />
<RowDefinition x:Name="Row2" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Column1" />
<ColumnDefinition x:Name="Column2" />
</Grid.ColumnDefinitions>
<Grid x:Name="GridColumn1" Grid.Column="1">
...
</Grid>
</Grid>
然后在代码后面:
GridColumn1.Visibility = Visibility.Collapsed;
由于Grid
有多行,您可能需要重新排列它们,如下所示:
<Grid x:Name="myGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Column1" />
<ColumnDefinition x:Name="Column2" />
</Grid.ColumnDefinitions>
<Grid x:Name="GridColumn0" Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
</Grid>
<Grid x:Name="GridColumn1" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
</Grid>
</Grid>
更新>>>
没有必要像这样重新排列主Grid
......您可以轻松地添加两个Grid
控件,相关列的每一行中一个,然后将它们的Visibility
设置在一起:
InnerGrid1.Visibility = InnerGrid2.Visibility = Visibility.Collapsed;
您甚至可以在主Grid
每个单元格中添加Grid
Grid
并可以完全控制任何时候可见的单元格。
<ColumnDefinition>
<ColumnDefinition.Style>
<Style TargetType="ColumnDefinition">
<Setter Property="Width" Value="*" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsColumnVisible}" Value="False">
<Setter Property="Width" Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
请在ViewModel中实现INotifyPropertyChanged
在WPF网格列和行隐藏代码项目中,它们显示了使用依赖项属性的方法。 它们设置Visible = false
,但在内部,它设置Width = 0
。
另一个想法是删除代码背后的列定义...但我想这是一个更糟糕的黑客! :(
一个丑陋的黑客就是将宽度改为0(看不见,不在乎)。
你不应该这样做有很多原因,但根据你的情况,这可能就足够了!
使用以下隐藏网格。 同样,您可以使用Name属性隐藏行定义和列定义。
myGrid.Visibility = System.Windows.Visibility.Hidden;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.