【问题标题】:How to add a ContextMenu depending on which WPF DataGrid row is right-clicked?如何根据右键单击 WPF DataGrid 行来添加 ContextMenu?
【发布时间】:2009-10-17 01:28:33
【问题描述】:

我需要在 ContextMenu 中显示不同的选项,具体取决于右键单击 WPF DataGrid 的哪一行。我最初的想法是通过绑定或处理鼠标单击事件来实现这一点,但到目前为止,这两种策略都没有成功。任何帮助将不胜感激!

谢谢!

丹尼斯

【问题讨论】:

    标签: wpf datagrid contextmenu row right-click


    【解决方案1】:

    您可以处理 DataGrid 的 ContextMenuOpening 事件,并根据路由事件的原始源调整上下文菜单。

    下面是一个示例,如果原始源的数据上下文是 Inventory 类型,我将显示上下文菜单,否则我不会通过处理事件来显示上下文菜单。

    Private Sub InventoriesDataGrid_ContextMenuOpening( _
        ByVal sender As Object, _
        ByVal e As System.Windows.Controls.ContextMenuEventArgs) Handles _
        InventoriesDataGrid.ContextMenuOpening
    
        Dim context = DirectCast(e.OriginalSource, System.Windows.FrameworkElement).DataContext
    
        If TypeOf context Is Inventory Then
            InventoriesDataGrid.ContextMenu = InventoriesDataGrid.Resources("DefaultContextMenu")
        Else
            e.Handled = True 'Do not show context menu.
        End If
    End Sub
    

    我确定现在帮助您为时已晚,但万一现在还为时不晚,对于遇到此问题的其他人来说。

    【讨论】:

    • 我完全同意 CStick 所做的......我们在这里几乎做同样的事情。
    【解决方案2】:

    您可以从 ContextMenuOpening 事件中的 ContextMenuEventArgs 参数中尝试 OriginalSource:

    DataGridResults.ContextMenuOpening += (sender, args) =>
    {
        var frameworkElement = args.OriginalSource as FrameworkElement;
        var gridRow = frameworkElement != null ? frameworkElement.TemplatedParent as DataGridRow : null;
    }
    

    但请注意,TemplatedParent 的使用取决于数据网格项的绑定方式

    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多