WPF: Disable DataGrid context menu on DataGridColumnHeader

In the following example you see a WPF DataGrid with a context menu to disable the selected item. With this definition you can also click on the DataGridColumnHeader and the context menu will appear. That is a bit confusing as I want to disable the selected item. So I expect the context menu action just on the selected item.
Here's the XAML:

<DataGrid ItemsSource="{Binding Items}"
          SelectedItem="{Binding SelectedItem}"             
          MouseRightButtonUp="DataGrid_OnMouseRightButtonUp">
     <DataGrid.ContextMenu>
            <ContextMenu>
                <MenuItem cal:Message.Attach="[Event Click] = [Action DisableItem()]"
                       Header="DisableItem"
                       Visibility="{Binding SelectedItem.IsEnabled,
                                            Converter={StaticResource VisibilityConverter}}">
                </MenuItem>
    </DataGrid.ContextMenu>
</DataGrid>

Some notes to the noise you see: As I'm using Caliburn Micro you see a strange Message.Attach. This is just the click event for the context menu action. As I just want to see that context menu entry when it is not already disabled I use a converter to convert the bool value of IsEnable to Visible or Collapsed.

But the importent part to solve the problem is the MouseRightButtonUpevent. With that you can do the following in the code behind:

private void DataGrid_OnMouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
    DependencyObject depObj = e.OriginalSource as DependencyObject;

    while (depObj != null && !(depObj is DataGridColumnHeader))
    {
        depObj = VisualTreeHelper.GetParent(depObj);
    }
    if (depObj is DataGridColumnHeader)
        e.Handled = true;
}

First get the DependecyObject from the OriginalSource. This will not be the DataGridColumnHeader even if you clicked it. We have to move up the VisualTree by using the VisualTreeHelper.GetParent function to find the parent that is the DataGridColumnHeader. If we find a DataGridColumnHeader we "handle" the MouseRightButtonUpevent by setting e.Handled = true;. That means that any action that handles the MouseRightButtonUp event after this methot will not get called. Same for our context menu that will not appear now as required.