如何通过箭头键禁用焦点更改

我有一个WPF窗口,其中包含一些控件(按钮,组框等)和一个Border内的一个大Viewport3D

视口显示3D场景,我希望箭头键移动其相机。 问题:箭头键总是将焦点更改为另一个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之外。