我有一个WPF窗口,其中包含一些控件(按钮,组框等)和Viewport3D
中的一个大Border
。
视口显示3D场景,我希望箭头键移动其相机。问题:箭头键总是将焦点更改为另一个UIElement
。
如何通过箭头键禁用焦点更改并让它们改变相机位置?
答案 0 :(得分:6)
如果没有实际测试的代码,总是很难回答,因为没有它,我们只是猜测。无论哪种方式,我都无法对您的特定情况发表评论,但总的来说,如果我们想要停止在事件中发生某些预定义的操作,那么我们通常会处理该事件并设置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;
}
}
答案 1 :(得分:5)
如果我们希望能够在键盘导航模式下通过同一组控件在控件之间切换而不是箭头键,那么我们可以为容器设置KeyboardNavigation.DirectionalNavigation="None"
(在这种情况下,窗口)。
然而,似乎有一些错误阻止了该解决方案的工作。
设置KeyboardNavigation.DirectionalNavigation="Once"
的解决方法虽然有效。
FocusVisualStyle
会重新加载当前所选元素。答案 2 :(得分:1)
你可以尝试
KeyboardNavigation.TabNavigation = "Local"
不要将焦点移到Viewport3D
之外。