私の問題は、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>
グリッドはいくつかのコントロールなどで満たされています。次に、C#コードから動的に1つの列を非表示にします。列の定義幅をゼロに設定して、これを達成しようとしました。 Column1.Width = 0
。これは機能しますが、私はこのソリューションが本当に好きではありません-本当に良い方法はありませんか?
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
をこのように再配置する必要はありません...関連する列の各行に1つずつ、2つのGrid
コントロールを同様に簡単に追加して could を設定し、その後Visibility
それらを一緒に:
InnerGrid1.Visibility = InnerGrid2.Visibility = Visibility.Collapsed;
メインの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に変更することです(見えない、気にしない)。
これを行うべきではない理由はたくさんありますが、状況によってはそれで十分かもしれません!