在DataGrid中右键单击选择

时间:2013-02-26 20:18:25

标签: c# wpf

我在C#项目中的XAML中创建了一个DataGrid。我已经为行添加了一个上下文菜单。基本上,当用户直接点击单元格时,它应该打开当前窗口中的相关项目,该项目在SelectionChanged事件中实现。

但是,如果用户右键单击一行,则应显示上下文菜单而不选择行,以便用户可以在上下文菜单中选择一个项目以在新窗口中打开相关项目。因此,他们可以同时查看已选择的项目和新项目,但是当右键单击选择该行时,用户将在当前窗口和新窗口中看到新选择的项目。

如何停止右键单击操作以显示选择单元格的上下文菜单?

2 个答案:

答案 0 :(得分:0)

有关可能的答案,请参阅wpf listview right-click problem;没什么可说的......预览活动应该有所帮助。

答案 1 :(得分:0)

对于我的解决方案,我必须覆盖以下两个事件处理程序(即 PreviewMouseRightButtonDown 和 PreviewMouseRightButtonUp)。另外,不确定为什么 ItemsSource 的数据绑定不起作用,所以我必须手动绑定它。

    private void ResultDataGrid_PreviewMouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        if (sender is DataGrid dg)
        {
            if (this.DataContext is PipelineStepResultViewModel dataContext
                && dataContext.DatagridMenuItems != null)
            {
                dg.ContextMenu.ItemsSource = dataContext.DatagridMenuItems;
            }
        }

        e.Handled = true;
    }

    private void ResultDataGrid_PreviewMouseRightButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        if (sender is DataGrid dg && dg.ContextMenu.ItemsSource != null)
        {
            ResultDataGrid.ContextMenu.IsOpen = true;
        }
        e.Handled = true;
    }