我需要在我的数据网格中有不同的上下文菜单 - 一个用于标题,一个用于网格行。所以我正在处理MouseClick事件,而不是我需要评估鼠标光标的基础对象是否是Datagrid的标题。你能解释一下我怎么能做到这一点? 我无法理解的是,DataGrid和DataGridColumn的对象层次结构都不包含DataGridColumnHeader对象或对它的任何引用。但是在虚拟树中,如果我得到位于标题中的文本块并包含列标题的文本然后获取它的父容器,我将获得DatagridColumnHeader对象。
感谢任何帮助。提前谢谢!
答案 0 :(得分: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