如何通过箭头键禁用焦点更改
本文关键字:焦点 何通过 | 更新日期: 2023-09-27 18:10:25
我有一个WPF窗口,其中包含一些控件(按钮、组框等(和一个Border
中的一个大Viewport3D
。
视口显示了一个三维场景,我希望箭头键可以移动它的相机。问题是:箭头键总是将焦点更改为另一个UIElement
。
如何通过箭头键禁用焦点更改,并让它们更改相机位置?
如果没有实际测试的代码,总是很难回答,因为没有它,我们只是在猜测。无论哪种方式,我都不能对您的特定情况发表评论,但一般来说,如果我们想阻止某个事件中发生某些预定义的操作,那么我们通常会处理该事件,并将e.Handled
属性设置为true
。
鉴于您已经想要处理KeyDown
事件来检测箭头键的使用,那么您可以同时将e.Handled
属性设置为true
。但是,您应该改为处理PreviewKeyDown
事件,因为它发生在KeyDown
事件之前,因此更有可能产生您想要的效果。试试这样的东西:
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Left || e.Key == Key.Right)
{
// Move your camera here
e.Handled = true;
}
}
如果我们希望在控件之间进行制表,而不是在同一组控件处于键盘导航模式时通过箭头键,那么我们应该可以为容器(在本例中为窗口(设置KeyboardNavigation.DirectionalNavigation="None"
。
然而,似乎有一些错误阻止了该解决方案的工作。
不过,设置KeyboardNavigation.DirectionalNavigation="Once"
的变通方法仍然有效。
- 到目前为止,我注意到的唯一一点是,在按下箭头键时,会为当前选定的元素重新加载
FocusVisualStyle
您可以尝试
KeyboardNavigation.TabNavigation = "Local"
因为你没有把注意力转移到Viewport3D
之外。