2009-04-06 8 views
0

Ich brauche verschiedene Kontextmenüs in meinem Datagrid - eine für die Kopfzeile und eine für Zeilen eines Gitters. Also handle ich MouseClick-Ereignis und als ich auswerten muss, ob das zugrundeliegende Objekt für Mauscursor der Datagrid-Header ist. Kannst du mir erklären, wie ich das machen kann? Die Sache, die ich nicht verstehen kann, ist, dass weder die DataGrid- noch die DataGridColumn-Objekthierarchie das DataGridColumnHeader-Objekt oder irgendeinen Verweis darauf enthält. Aber im virtuellen Baum, wenn ich Textblock, der im Header befindet und den Text der Spaltenüberschrift enthält und dann erhalten es übergeordneten Container, bekomme ich DatagridColumnHeader Objekt.WPFtoolkit und sein DatagridColumnHeader

Jede Hilfe wird geschätzt. Danke im Voraus!

Antwort

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 
Verwandte Themen