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

时间:2016-06-17 19:59:35

标签: c# wpf listview contextmenu

我有一个ListView项目,我想右键单击(提供删除,重命名等选项)。问题是右键单击选择该项目的项目。我希望在保持上下文菜单可用的同时避免使用该功能。如果选择了多个项目,则应保持选中状态,以便用户可以通过上下文菜单将其删除。

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

编辑:我宁愿不必清除项目,然后每次重置选择,因为此ListView可以包含超过100个项目。它是虚拟化的,但仍然是我想到的第一件事,这是我的最后一招。保持我必须不断同步ListView的一侧的列表将是烦人的并导致惰性代码。

我需要能够多选ListView项,然后右键单击并执行一个将考虑整个选择的命令。

1 个答案:

答案 0 :(得分:0)

我也在列表框中遇到过这个问题。我最终创建了一个自定义控件,通过将其标记为e.Handled=true来完全跳过鼠标按下行为,并在mouseup上执行鼠标按下行为。

    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;
    }