我正在使用wpf开发一个应用程序,其中文本框始终聚焦,而所有其他控件从不聚焦,为实现此目的,我为所有控件设置了属性IsFocusable = false
。
其中一个控件是ListBox,如果我设置IsFocusable = false
属性,ListBox项目将变为不可选,但我需要能够选择此项目。
我发现的解决方案不是很优雅和干净。 一种解决方案是使用带有样式RadioButton的ItemControl作为项目,然后使用我的视图模型中的某些方法绑定RadioButton click事件 另一个解决方案是使用附加行为捕获ListBox上的鼠标按下事件,然后找到哪个项目位于鼠标坐标,然后尝试将此项目设置为所选项目,但如果我只是设置SelectedItem属性附带的行为没有发生。
是否有更优雅高效的方法可以选择不可聚焦的ListBox项目?
编辑: 另一种可能的解决方案是使用EventManager注册鼠标左键donw事件的类处理程序:
EventManager.RegisterClassHandler(typeof(ListBoxItem),
ListBoxItem.MouseLeftButtonDownEvent,
new RoutedEventHandler((s, o) =>
{ (s as ListBoxItem).IsSelected = true; }));
在整个应用程序中,在任何其他事件处理程序和指定类型的所有控件(本例中为ListBoxItem)之前调用类处理程序
这是我从现在开始找到的最佳解决方案