Reputation: 2086
How can I add a context menu to the complete column header? That’s including the blueish area in this picture:
Adding a context menu to the headers of single columns already has been answered.
Upvotes: 1
Views: 403
Reputation: 116
You should declare ContextMenu to the entire DataGrid:
<DataGrid ContextMenu="{StaticResource ColumnChooserMenuDataGrid}"
PreviewMouseRightButtonUp="DataGrid_PreviewMouseRightButtonUp">
...
</DataGrid>
Write event handler:
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;
}
Where VisualHelper is:
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;
}
}
Upvotes: 1