我需要在ContextMenu中显示不同的选项,具体取决于右键单击WPF DataGrid的哪一行。我最初的想法是通过绑定或处理鼠标点击事件来实现这一点,但迄今为止我还没有取得任何成功。非常感激任何的帮助!如何添加一个ContextMenu取决于哪个WPF DataGrid行被右键单击?
谢谢!
丹尼斯
我需要在ContextMenu中显示不同的选项,具体取决于右键单击WPF DataGrid的哪一行。我最初的想法是通过绑定或处理鼠标点击事件来实现这一点,但迄今为止我还没有取得任何成功。非常感激任何的帮助!如何添加一个ContextMenu取决于哪个WPF DataGrid行被右键单击?
谢谢!
丹尼斯
您可以处理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
我敢肯定,这是为时已晚,以帮助你了,但如果它是不是为时已晚,为别人谁碰到这个来。
你可以尝试从ContextMenuEventArgs参数的的ContextMenuOpening事件OriginalSource:
DataGridResults.ContextMenuOpening += (sender, args) =>
{
var frameworkElement = args.OriginalSource as FrameworkElement;
var gridRow = frameworkElement != null ? frameworkElement.TemplatedParent as DataGridRow : null;
}
不过请注意,使用TemplatedParent取决于数据网格项目是如何绑定
我完全同意什么CStick做...我们在这里几乎也是这样。 – SuperOli 2010-06-23 14:35:54