0

データグリッドに異なるコンテキスト メニューが必要です。1 つはヘッダー用、もう 1 つはグリッドの行用です。そのため、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 に答える