从C#代码动态切换WPF网格列的可见性

我的问题是:我无法找到如何切换WPF网格列的可见性。 假设遵循XAML标记:

          

Aferwards网格中充满了一些控件等。现在我想从C#代码中动态隐藏一个列。 我已经尝试通过将列的定义宽度设置为零来实现此目的,例如Column1.Width = 0 。 这有效,但我真的不喜欢这个解决方案 – 真的没有更好的方法吗?

我正在寻找类似myGrid.Columns[0].Visibility = COLLAPSED东西myGrid.Columns[0].Visibility = COLLAPSEDColumn1.Visibility = HIDDEN 。 我找不到那样的东西 – 任何想法?

最简单的方法是在要隐藏的相关列中添加一个命名Grid作为顶级控件。 然后你可以像任何其他控件一样隐藏它及其所有内容:

在XAML中:

           ...   

然后在代码后面:

 GridColumn1.Visibility = Visibility.Collapsed; 

由于Grid有多行,您可能需要重新排列它们,如下所示:

                   

更新>>>

没有必要像这样重新排列主Grid ……您可以轻松添加两个Grid控件,相关列的每一行中一个,然后将它们的Visibility设置在一起:

 InnerGrid1.Visibility = InnerGrid2.Visibility = Visibility.Collapsed; 

您甚至可以将Grid添加到主Grid每个单元Grid并且可以完全控制一次可见的单元格。

在WPF网格列和行隐藏代码项目中,它们显示了使用依赖项属性的方法。 它们设置Visible = false ,但在内部,它设置Width = 0

另一个想法是删除代码背后的列定义…但我想这是一个更糟糕的黑客! 🙁

一个丑陋的黑客只是将宽度改为0(看不见,不在乎)。

你不应该这样做有很多原因,但根据你的情况,这可能就足够了!

      

请在ViewModel中实现INotifyPropertyChanged

使用以下隐藏网格。 同样,您可以使用Name属性隐藏行定义和列定义。

myGrid.Visibility = System.Windows.Visibility.Hidden;