完整列的 DataGrid 上下文菜单 header

DataGrid context menu for complete column header

如何向 complete 列 header 添加上下文菜单?这包括这张图片中的蓝色区域:

正在向单列 header 添加上下文菜单 already has been answered

您应该为整个 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;
    }
}