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

时间:2014-06-27 08:45:54

标签: c# wpf wpf-controls focus arrow-keys

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

视口显示3D场景,我希望箭头键移动其相机。问题:箭头键总是将焦点更改为另一个UIElement

如何通过箭头键禁用焦点更改并让它们改变相机位置?

3 个答案:

答案 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之外。