[英]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.