2009-10-17 13 views

Répondre

5

Vous pouvez gérer l'événement ContextMenuOpening du DataGrid et en fonction de la source d'origine de l'événement routé vous ajustez votre menu contextuel. Ci-dessous est un exemple où je montre un menu contextuel si le contexte de données de la source originale est de type Inventaire sinon je ne montre pas le menu contextuel en gérant l'événement.

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 

Je suis sûr qu'il est trop tard pour vous aider maintenant, mais dans le cas où il n'est pas trop tard et pour quelqu'un d'autre qui vient à travers cela.

+0

Je suis totalement d'accord avec ce que Cstick a fait ... nous faisons presque la même chose ici. – SuperOli

0

Vous pouvez essayer le OriginalSource de l'argument ContextMenuEventArgs en cas ContextMenuOpening:

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

Notez cependant que l'utilisation de TemplatedParent dépend de la façon dont les éléments DataGrid étaient liés