在DataGrid中的选择上单击鼠标右键

本文关键字:单击 鼠标 右键 选择 DataGrid | 更新日期: 2023-09-27 18:01:11

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

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

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

在DataGrid中的选择上单击鼠标右键

对于我的解决方案,我必须覆盖以下两个事件处理程序(即PreviewMouseRightButtonDown和PreviewMouserRightButton Up(。另外,我不确定为什么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;
    }