Я определил DataGrid, как это ::
Отключить контекстное меню на некоторые клетки DatGrid WPF
<cc:PEDataGrid AutoGenerateColumns="False"
ItemsSource="{Binding Rows}"
Width="Auto"
PreviewMouseRightButtonDown="PEGrid_PreviewMouseRightButtonDown"
Loaded="CommonPEGrid_Loaded">
<wpfkit:DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Cut" />
<MenuItem Header="Copy"/>
<MenuItem Header="Paste"/>
</ContextMenu>
</wpfkit:DataGrid.ContextMenu>
</cc:PEDataGrid>
Это показывает Контекстный на каждую клетку, когда правая кнопка мыши делается.
Я хочу отключить контекстное меню для всех ячеек, кроме заголовков, а также заголовка для некоторого состояния. (я не хочу использовать DataGridHeaderStyle из-за некоторых других проблем, которые я не хочу, чтобы объяснить здесь.)
Я определил обработчик PreviewMouseRightButtonDown на сетке и в обработчике я пытаюсь сделать что-то вроде это:
private void PEGrid_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
DependencyObject depObj = (DependencyObject)e.OriginalSource;
while ((depObj != null) && !(depObj is DataGridColumnHeader))
{
depObj = VisualTreeHelper.GetParent(depObj);
}
if (depObj == null)
{
return;
}
if (depObj is DataGridColumnHeader)
{
//some condition here which says whether contextmenu is required on this header
(depObj as DataGridColumnHeader).ContextMenu = null;
//the above line is not working!!!!
}
else
{
(depObj as DataGridCell).ContextMenu = null;
//the above line not working!!!!
}
}
Я хочу знать, где я иду не так! Пожалуйста, помогите мне в этом. Кроме того, руководство меня сделать в лучшую сторону, если я достичь моего требования в неправильном направлении :)
Я использовал этот ответ в качестве основы для остановки контекстного меню, отображаемого в заголовках. Спасибо, что опубликовали окончательное решение. – coffeecoder
Что такое dg здесь..и как это можно назвать? .. – Silver