0

我需要在我的数据网格中有不同的上下文菜单 - 一个用于其标题,一个用于网格行。所以我正在处理 MouseClick 事件,然后我需要评估鼠标光标的基础对象是否是 Datagrid 的标题。你能解释一下我怎么做这个吗?我无法理解的是,DataGrid 和 DataGridColumn 的对象层次结构都不包含 DataGridColumnHeader 对象或对它的任何引用。但是在虚拟树中,如果我得到位于标题中并包含列标题文本的文本块,然后得到它的父容器,我将得到 DatagridColumnHeader 对象。

任何帮助表示赞赏。提前致谢!

4

1 回答 1

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
于 2009-06-19T10:04:38.273 回答