WPF - 右键单击​​ ListView 重置选择,但我仍然想要项目上下文菜单

WPF - Right clicking in ListView resets selection, but I still want item context menus

我有一个项目的 ListView,我想右键单击(提供删除、重命名等选项)问题是当右键单击一个项目时,它 select 是那个项目。我想在保持上下文菜单可用的同时避免使用该功能。如果多个项目被 selected,它们应该保持 selected 以便用户可以通过上下文菜单删除它们。

这里提出的一个解决方案是只禁用单个项目上的鼠标右键按下事件,但我需要那个上下文菜单,因为它与 ListView 本身上的菜单不同。因此,我似乎没有想法。

编辑:我宁愿不必每次都清除项目然后重置 selection,因为此 ListView 可以包含 100 多个项目。它是虚拟化的,但仍然是我想到的第一件事,也是我最后的选择。在我必须不断同步 ListView 的一侧保留一个列表会很烦人,并导致代码懒惰。

我需要能够多个 select ListView 项目,然后右键单击并执行一个命令,该命令将考虑整个 selection。

我 运行 也用列表框解决过这个问题几次。我最终制作了一个自定义控件,通过将其标记为 e.Handled=true 并在 mouseup 上执行 mouse-down 行为来完全跳过 mouse-down 行为。

    protected override void OnMouseUp(MouseButtonEventArgs e)
    {
        if (e.ChangedButton == MouseButton.Left)
        {
            var obj = ContainerFromElement((Visual) e.OriginalSource);
            if (obj == null)
                return;`

            var fe = obj as FrameworkElement;
            var item = fe as ListBoxItem;

            if (item != null)
            {
                SelectedItem = item.DataContext;
            }
        }
    }

    protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
    {
        if(e.LeftButton != MouseButtonState.Pressed)
            e.Handled = true;
    }