Ray*_*rns 20
如果你根本不想选择我肯定会使用ItemsControl而不是ListBox.虚拟化和滚动两者都可以与普通的ItemsControl一起使用,只要它们在模板中即可.
另一方面,如果您需要选择但只是不想选择右键,最简单的方法可能是处理PreviewRightMouseButtonDown事件:
void ListBox_PreviewRightMouseButtonDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)
这样做的原因是ListBoxItem选择在鼠标按下时发生,但上下文菜单打开在鼠标向上发生.因此,在预览阶段消除鼠标按下事件可以解决您的问题.
但是,如果您希望在ListBox中的其他位置处理鼠标(例如在项目中的控件中),则此操作无效.在这种情况下,最简单的方法可能是将ListBoxItem子类化为忽略它:
public class ListBoxItemNoRightClickSelect : ListBoxItem
{
protected override void OnMouseRightButtonDown(MouseButtonEventArgs e)
{
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在ItemsSource中显式构造这些ListBoxItems,也可以将ListBox子类化为自动使用自定义项:
public class ListBoxNoRightClickSelect : ListBox
{
protected override DependencyObject GetContainerForItemOverride()
{
return new ListBoxItemNoRightClickSelect();
}
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,这里有一些解决方案无法解释为什么它们不起作用:
| 归档时间: |
|
| 查看次数: |
6410 次 |
| 最近记录: |