我需要在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