这个问题类似于如何在WPF数据网格中添加Column ContextMenu,但我要做的是在WPF DataGrid中添加不同的ContextMenu
PER Column。
DataGridTextColumn
不是从具有ContextMenu
属性的FrameworkElement
派生的,因此不可能直接在DataGridTextColumn
上设置ContextMenu
。DataGridCell
也有一个ContextMenu
,但我不知道如何使用它来设置列特定菜单。
这里的问题是如何为每列添加一个唯一的ContextMenu
(列是动态生成的)。
谢谢!
以下是在显式设置列时如何实现这一点的示例:
<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>
此示例包括Text
列和CheckBox
列。您可以修改CellTemplate
以满足您的需求,当然也可以使用资源来避免代码重复。