5

这个问题类似于How to add a Column ContextMenu in the WPF DataGrid,但我想做的是ContextMenu在 WPF Datagrid 中添加不同的 PER COLUMN。

DataGridTextColumn不是从FrameworkElementwhich 派生的ContextMenu,因此不能ContextMenu直接在 a 上设置 a DataGridTextColumnDataGridCell也有一个ContextMenu,但我不知道如何使用它来设置特定于列的菜单。

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

谢谢!

4

1 回答 1

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>

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

于 2013-07-23T19:15:19.157 回答