WPFtoolkit и его DatagridColumnHeader - PullRequest
0 голосов
/ 07 апреля 2009

Мне нужно иметь разные контекстные меню в моей сетке данных - одно для его заголовка и одно для строк сетки. Поэтому я обрабатываю событие MouseClick, и затем мне нужно оценить, является ли базовый объект для курсора мыши заголовком Datagrid. Можете ли вы объяснить мне, как я могу это сделать? Я не могу понять, что ни иерархия объектов DataGrid и DataGridColumn не содержит объект DataGridColumnHeader или какую-либо ссылку на него. Но в виртуальном дереве, если я получу текстовый блок, который находится в заголовке и содержит текст заголовка столбца, а затем получу его родительский контейнер, я получу объект DatagridColumnHeader.

Любая помощь приветствуется. Заранее спасибо!

1 Ответ

0 голосов
/ 19 июня 2009
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
...