【问题标题】:How to disable focus changes by arrow keys如何通过箭头键禁用焦点更改
【发布时间】:2014-06-27 08:45:53
【问题描述】:

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

视口显示一个 3D 场景,我希望箭头键移动它的相机。问题:方向键总是将焦点切换到另一个UIElement

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

【问题讨论】:

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


    【解决方案1】:

    如果没有一些代码进行实际测试,总是很难回答,因为没有它,我们只是在猜测。无论哪种方式,我都无法评论您的特定情况,但总的来说,如果我们想阻止某个事件中发生某些预定义的操作,那么我们通常会处理该事件并将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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果我们希望能够在控件之间切换而不是箭头键,一旦它们处于键盘导航模式,我们应该可以为容器设置KeyboardNavigation.DirectionalNavigation="None"(在本例中为窗口) .

      但似乎有一些错误阻止了该解决方案的工作。

      设置KeyboardNavigation.DirectionalNavigation="Once" 的解决方法虽然有效。

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

      【讨论】:

        【解决方案3】:

        你可以试试

        KeyboardNavigation.TabNavigation = "Local"
        

        因为没有将注意力转移到Viewport3D之外。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多