如何禁用箭头键的焦点更改功能

9

我有一个WPF窗口,里面有几个控件(按钮、分组框等),以及一个大的Viewport3D在一个Border中。

视口显示一个3D场景,我想用箭头键来移动它的相机。问题是:箭头键总是会将焦点转移到另一个UIElement

如何禁用箭头键的焦点更改,并使它们改变相机位置呢?

3个回答

8
没有代码进行实际测试,回答这个问题总是很困难的,因为没有代码我们只能猜测。无论如何,我不能评论你的特定情况,但是一般来说,如果我们想要阻止某些预定义的操作在事件中发生,那么我们通常会处理该事件并将 "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;
    }
}

6
如果我们希望能够在控件之间进行选项卡切换,但一旦它们处于键盘导航模式,就不能通过相同的一组控件进行箭头键导航,则应该对容器(在此示例中为窗口)设置KeyboardNavigation.DirectionalNavigation="None"
然而,似乎存在某些错误阻止了该解决方案的工作。
不过,设置KeyboardNavigation.DirectionalNavigation="Once"的解决方法确实可行。
我发现目前唯一的注意事项是,在按下箭头键后,当前选择的元素会重新加载FocusVisualStyle

1
你可以尝试

KeyboardNavigation.TabNavigation = "Local"

为了不将您的注意力转移到Viewport3D之外。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接