DataGridの列ヘッダーのコンテキストメニューが残りのセルと異なるようにします。したがって、通常のContextMenuプロパティを使用することはできません。 DataGrid.RowHeaderTemplateがありますが、DataGrid.ColumnHeaderTemplateが見つかりません。右クリックコンテキストメニューをWPF 4 DataGridの列見出しに追加するにはどうすればよいですか?
編集/注:列は動的に生成されます。
DataGridの列ヘッダーのコンテキストメニューが残りのセルと異なるようにします。したがって、通常のContextMenuプロパティを使用することはできません。 DataGrid.RowHeaderTemplateがありますが、DataGrid.ColumnHeaderTemplateが見つかりません。右クリックコンテキストメニューをWPF 4 DataGridの列見出しに追加するにはどうすればよいですか?
編集/注:列は動的に生成されます。
ターゲットすべてDataGridColumnHeadersに共通のスタイル:
<DataGrid.Resources>
<ContextMenu x:Key="DataGridColumnHeaderContextMenu" ...>
</ContextMenu>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContextMenu"
Value="{StaticResource DataGridColumnHeaderContextMenu}" />
</Style>
</DataGrid.Resources>
場合さまざまな列ヘッダーに対して異なるコンテキストメニューが必要な場合は、トリガーを使用します。
<DataGrid.Resources>
<ContextMenu x:Key="ColumnHeaderContextMenu1" ...>
</ContextMenu>
<ContextMenu x:Key="ColumnHeaderContextMenu2" ...>
</ContextMenu>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Style.Triggers>
<Trigger Property="Content" Value="Column1">
<Setter Property="ContextMenu"
Value="{StaticResource ColumnHeaderContextMenu1}" />
</Trigger>
<Trigger Property="Content" Value="Column2">
<Setter Property="ContextMenu"
Value="{StaticResource ColumnHeaderContextMenu2}" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
希望帽子が助けます。
XAMLでそれらを定義している場合、それは、あなたがこれを行うことができ、あなたが列を生成しているかによって異なります。
<DataGrid DataContext="{Binding MyDataContext}" ItemsSource="{Binding MyItems}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Age}" Header="Age" >
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{TemplateBinding Content}" >
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Task _1" />
<MenuItem Header="Task _2" />
<MenuItem Header="Task _3" />
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
列を動的に生成する場合はどうなりますか? – MoonKnight
動的列の場合は、前の列名を知っていることを前提として、2番目の解決方法が有効です。 –