Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过箭头键禁用焦点更改_C#_Wpf_Wpf Controls_Focus_Arrow Keys - Fatal编程技术网

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

C# 如何通过箭头键禁用焦点更改,c#,wpf,wpf-controls,focus,arrow-keys,C#,Wpf,Wpf Controls,Focus,Arrow Keys,我有一个WPF窗口,有几个控件(按钮、组框等)和一个大的Viewport3D,位于边框内 视口显示一个3D场景,我希望箭头键可以移动其相机。问题是:箭头键总是将焦点切换到另一个ui元素 我如何才能通过箭头键禁用焦点更改,并让它们更改相机位置?如果没有一些代码进行实际测试,通常很难回答,因为没有它,我们只是在猜测而已。无论如何,我都无法对您的特定情况进行评论,但一般来说,如果我们希望阻止某个事件中发生某些预定义操作,那么我们通常会处理该事件,并将e.Handled属性设置为true 鉴于您已经希望

我有一个WPF窗口,有几个控件(按钮、组框等)和一个大的
Viewport3D
,位于
边框内

视口显示一个3D场景,我希望箭头键可以移动其相机。问题是:箭头键总是将焦点切换到另一个
ui元素


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

如果没有一些代码进行实际测试,通常很难回答,因为没有它,我们只是在猜测而已。无论如何,我都无法对您的特定情况进行评论,但一般来说,如果我们希望阻止某个事件中发生某些预定义操作,那么我们通常会处理该事件,并将
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.TabNavigation = "Local"

为了不将焦点转移到
Viewport3D

之外,如果我们想在控件之间进行制表,但不想在控件处于键盘导航模式时通过同一组控件按箭头键,那么我们应该可以为容器(在本例中为窗口)设置
键盘导航。DirectionalNavigation=“None”

然而,似乎有一些bug阻止了该解决方案的工作

设置
KeyboardNavigation.DirectionalNavigation=“Once”
的解决方法仍然有效

  • 到目前为止,我注意到的唯一一个警告是,按下箭头键后,将为当前选定的元素重新加载
    FocusVisualStyle