如何在WPF数据网格中为每列添加ContextMenu

edt*_*guy 5 c# windows wpf datagrid

此问题类似于如何在WPF DataGrid中添加列ContextMenu,但我要做的是ContextMenu在WPF Datagrid中添加不同的PER COLUMN.

DataGridTextColumn不是从FrameworkElement哪个ContextMenu属性派生出来的,所以不可能ContextMenu直接在a上设置DataGridTextColumn. DataGridCell也有一个ContextMenu,但我不知道如何使用它来设置列专用菜单.

这里的问题是如何ContextMenu为每列添加唯一(列是动态生成的).

谢谢!

Ric*_*d E 5

以下是在显式设置列时如何实现这一点的示例:

 <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>
Run Code Online (Sandbox Code Playgroud)

此示例包括一Text列和一CheckBox列。您可以修改CellTemplate以满足您的要求,当然还可以使用资源来避免代码重复。