【发布时间】:2014-06-27 08:45:53
【问题描述】:
我有一个 WPF 窗口,其中包含一些控件(按钮、组框等)和一个大的 Viewport3D Border。
视口显示一个 3D 场景,我希望箭头键移动它的相机。问题:方向键总是将焦点切换到另一个UIElement。
如何通过箭头键禁用焦点更改并让它们更改相机位置?
【问题讨论】:
标签: c# wpf wpf-controls focus arrow-keys
我有一个 WPF 窗口,其中包含一些控件(按钮、组框等)和一个大的 Viewport3D Border。
视口显示一个 3D 场景,我希望箭头键移动它的相机。问题:方向键总是将焦点切换到另一个UIElement。
如何通过箭头键禁用焦点更改并让它们更改相机位置?
【问题讨论】:
标签: c# wpf wpf-controls focus arrow-keys
如果没有一些代码进行实际测试,总是很难回答,因为没有它,我们只是在猜测。无论哪种方式,我都无法评论您的特定情况,但总的来说,如果我们想阻止某个事件中发生某些预定义的操作,那么我们通常会处理该事件并将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之外。
【讨论】: