我动态生成ListBox
。
在此ListBox
中,用户可以通过左键单击选择一个或多个项目。
右键单击ListBox
区域的项目,他可以显示上下文菜单。
我的问题是,如果用户右键单击ListBox区域,则所有内容都正确,但如果他右键单击一个项目,则切换选择。
我想通过右键单击来避免项目切换。
这就是我在ListBox
中配置MyWindow.cs
的方式:
MyBeautifulList.SelectionMode = SelectionMode.Extended;
这是相对XAML文件的一部分:
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Send file" Click="SendFileToUser" />
<MenuItem Header="Send folder" Click="SendFolderToUser" />
<MenuItem Header="Copy user ID to the clipboard" Click="copyUserIDtoClipboard" />
</ContextMenu>
</ListBox.ContextMenu>
答案 0 :(得分:0)
除了点击之外,wpf还提供了许多其他选项。 由于您可能想要阅读的冒泡和隧道路由事件。 您可以处理事件的预览版本,将其标记为已处理,然后停止触发。
class MarriedEditingSupport extends EditingSupport
{
private final CheckboxCellEditor _editor;
MarriedEditingSupport(TableViewer viewer)
{
super(viewer);
_editor = new CheckboxCellEditor(viewer.getTable());
}
@Override
protected CellEditor getCellEditor(Object element)
{
return _editor;
}
@Override
protected boolean canEdit(Object element)
{
return true;
}
@Override
protected Object getValue(Object element)
{
return Boolean.valueOf(((Person)element).isMarried());
}
@Override
protected void setValue(Object element, Object value)
{
((Person)element).setMarried(((Boolean)value).booleanValue());
getViewer().update(element, null);
}
}
您将不会出现上下文菜单,因此您需要使用代码显示上下文菜单。 命名您的上下文菜单
void MenuItem_PreviewRightMouseButtonDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
然后,您可以在新处理程序的代码中设置IsOpen,例如:
<ContextMenu Name="SomeMeaningfulName">