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

本文关键字:焦点 何通过 | 更新日期: 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之外。