在DataGrid中右键选择

3
我在C#项目中使用XAML创建了一个DataGrid。我已经为行添加了上下文菜单。当用户直接点击单元格时,应该打开当前窗口中的相关项,这是通过SelectionChanged事件来实现的。
但是,如果用户右键单击一行,它应该显示上下文菜单而不选择行,以便用户可以选择上下文菜单中的项目,在新窗口中打开相关项。这样他们就可以同时查看已选择的项目和新项目。但由于右键单击会选择行,因此用户会在当前窗口和新窗口中看到新选择的项目。
如何停止右键单击操作显示上下文菜单时选择单元格?
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;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接