完整列标题的DataGrid上下文菜单

时间:2019-03-04 10:10:43

标签: wpf datagrid contextmenu

如何为 complete 列标题添加上下文菜单?这包括这张照片中的蓝色区域:

DataGrid

将上下文菜单添加到单列already has been answered的标题中。

1 个答案:

答案 0 :(得分:1)

您应该向整个 DataGrid 声明 ContextMenu:

<DataGrid ContextMenu="{StaticResource ColumnChooserMenuDataGrid}"
          PreviewMouseRightButtonUp="DataGrid_PreviewMouseRightButtonUp">
   ...
</DataGrid>

编写事件处理程序:

private void Grid_PreviewMouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
    if (VisualHelper.FindVisualParent<DataGridColumnHeader>((DependencyObject)e.OriginalSource) != null)
        return;
    if (VisualTreeHelper.HitTest((Visual)e.OriginalSource, e.GetPosition((UIElement)sender))?.VisualHit is DataGridHeaderBorder)
        return;
    e.Handled = true;
}

VisualHelper 在哪里:

public static class VisualHelper
{
    public static T FindVisualParent<T>(DependencyObject d) where T : class
    {
        while (d != null && !(d is T))
            d = VisualTreeHelper.GetParent(d);
        return d as T;
    }
}