我有一个ListView项目,我想右键单击(提供删除,重命名等选项)。问题是右键单击选择该项目的项目。我希望在保持上下文菜单可用的同时避免使用该功能。如果选择了多个项目,则应保持选中状态,以便用户可以通过上下文菜单将其删除。
这里提出的一个解决方案是在单个项目上禁用鼠标右键按下事件,但我需要上下文菜单,因为它与ListView本身上的菜单不同。因此,我似乎没有想法。
编辑:我宁愿不必清除项目,然后每次重置选择,因为此ListView可以包含超过100个项目。它是虚拟化的,但仍然是我想到的第一件事,这是我的最后一招。保持我必须不断同步ListView的一侧的列表将是烦人的并导致惰性代码。
我需要能够多选ListView项,然后右键单击并执行一个将考虑整个选择的命令。
答案 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;
}