【问题标题】:How to add a ContextMenu per column in the WPF data grid如何在 WPF 数据网格中为每列添加一个 ContextMenu
【发布时间】:2013-07-24 03:15:19
【问题描述】:
这个问题类似于How to add a Column ContextMenu in the WPF DataGrid,但我想做的是在 WPF 数据网格中添加一个不同的ContextMenu PER COLUMN。
DataGridTextColumn 不是从具有ContextMenu 属性的FrameworkElement 派生的,因此无法直接在DataGridTextColumn 上设置ContextMenu。 DataGridCell 也有 ContextMenu,但我不知道如何使用它来设置特定于列的菜单。
这里的问题是如何为每一列添加一个唯一的ContextMenu(列是动态生成的)。
谢谢!
【问题讨论】:
标签:
c#
wpf
windows
datagrid
【解决方案1】:
下面是一个示例,说明如何在明确设置列时实现这一点:
<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 以满足您的要求,当然还可以使用资源来避免代码重复。