2009-10-17 45 views

回答

5

您可以處理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 

我敢肯定,這是爲時已晚,以幫助你了,但如果它是不是爲時已晚,爲別人誰碰到這個來。

+0

我完全同意什麼CStick做...我們在這裏幾乎也是這樣。 – SuperOli 2010-06-23 14:35:54

0

你可以嘗試從ContextMenuEventArgs參數的的ContextMenuOpening事件OriginalSource:

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

不過請注意,使用TemplatedParent取決於數據網格項目是如何綁定

相關問題