【问题标题】: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 以满足您的要求,当然还可以使用资源来避免代码重复。

    【讨论】:

    • 感谢您的精彩回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2011-10-16
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多