2009-04-06 4 views
0

J'ai besoin de différents menus contextuels dans mon DataGrid - un pour son en-tête et un pour les lignes d'une grille. Je gère donc l'événement MouseClick et j'ai besoin d'évaluer si l'objet sous-jacent du curseur de la souris est l'en-tête de Datagrid. Pouvez-vous m'expliquer comment puis-je faire cela? La chose que je ne peux pas comprendre est que ni la hiérarchie d'objets DataGrid et DataGridColumn ne contient l'objet DataGridColumnHeader ou aucune référence à celui-ci. Mais dans l'arbre virtuel si je reçois textblock qui se trouve dans l'en-tête et contient le texte de l'en-tête de la colonne, puis obtenir le conteneur parent, j'obtiendra l'objet DatagridColumnHeader.WPFtoolkit et son DatagridColumnHeader

Toute aide est appréciée. Merci d'avance!

Répondre

0
Private Sub DGrid_MouseLeftButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) 
    Dim dep As DependencyObject = DirectCast(e.OriginalSource, DependencyObject) 

    ' iteratively traverse the visual tree 
    While (dep IsNot Nothing) AndAlso Not (TypeOf dep Is DataGridRow OrElse TypeOf dep Is Primitives.DataGridColumnHeader OrElse TypeOf dep Is DataGrid) 
     dep = VisualTreeHelper.GetParent(dep) 
    End While 

    If dep Is Nothing Then 
     Exit Sub 
    End If 

    If TypeOf dep Is Primitives.DataGridColumnHeader Then 
     Dim CurrentHeader As Primitives.DataGridColumnHeader = TryCast(dep, Primitives.DataGridColumnHeader) 
     If Not CurrentHeader Is Nothing Then 
      CurrentHeader.ContextMenu.Items.Add("Option") 
     End If 
    ElseIf TypeOf dep Is DataGridRow Then 
     'Something else 
    End If 
End Sub 
Questions connexes