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