How to add ContextMenu per column in WPF data grid

This question is similar to How to add a ContextMenu column in a WPF DataGrid , but what I'm trying to do is add another ContextMenu PER COLUMN to a WPF Datagrid.

DataGridTextColumn not inferred from a FrameworkElement that has a ContextMenu property, so it is not possible to set a ContextMenu directly to a DataGridTextColumn . DataGridCell also has ContextMenu , but I don’t see how to use this to set a column-specific menu.

The question is how to add a unique ContextMenu for each column (columns are dynamically generated).

Thanks!

+4
source share
1 answer

Here is an example of how this can be achieved by explicitly setting columns:

  <DataGrid ItemsSource="{Binding MyItems}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Column1Data}" HorizontalAlignment="Stretch"> <TextBlock.ContextMenu> <ContextMenu> <MenuItem Header="Col 1 Item 1"/> <MenuItem Header="Col 1 Item 2"/> </ContextMenu> </TextBlock.ContextMenu> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding Column2Data}" HorizontalAlignment="Stretch" > <CheckBox.ContextMenu> <ContextMenu> <MenuItem Header="Col 2 Item 1"/> <MenuItem Header="Col 2 Item 2"/> </ContextMenu> </CheckBox.ContextMenu> </CheckBox> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> 

This example includes a Text column and a CheckBox column. You can modify the CellTemplate to suit your requirements and, of course, use resources to avoid code duplication.

+4
source

Source: https://habr.com/ru/post/1492967/


All Articles