WPF FocusNavigationDirection,MoveFocus和箭头键

| 我有一个简单的应用程序(一个带有6个按钮的网格-2行3行-用于测试),并且正在按以下方式处理左右箭头键
    private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        FocusNavigationDirection focusDirection = new System.Windows.Input.FocusNavigationDirection();

        switch (e.Key)
        {
            case Key.Left:
                focusDirection = System.Windows.Input.FocusNavigationDirection.Left;
                break;
            case Key.Right:
                focusDirection = System.Windows.Input.FocusNavigationDirection.Right;
                break;
            default:
                break;
        }
        TraversalRequest request = new TraversalRequest(focusDirection);

        // Gets the element with keyboard focus.
        UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;

        // Change keyboard focus.
        if (elementWithFocus != null)
        {
            elementWithFocus.MoveFocus(request);
        }

    }
不幸的是,这并不符合我的预期,因为焦点似乎总是朝着与FocusNavigationDirection指定的方向相反的方向移动。 对为什么会这样有什么想法? MSDN文档对于如何定义“ \”的左侧有点含糊。 如果需要,我还将每个按钮的制表位定义为1到6。     
已邀请:
为什么可以在使用\“ this \”(窗口自己的范围)的同时获取elementWithFocus? 我修改了一下代码,对我有用:
    private void Window_OnPreviewKeyDown(object sender, KeyEventArgs e)
    {
        switch (e.Key)
        {
            case Key.Left:
                this.MoveFocus(FocusNavigationDirection.Previous);
                break;
            case Key.Right:
                this.MoveFocus(FocusNavigationDirection.Next);
                break;
            default:
                break;
        }
    }

    private void MoveFocus(FocusNavigationDirection direction)
    {
        var request = new TraversalRequest(direction);
        this.MoveFocus(request);
    }
    
您是否尝试过
FocusNavigationDirection.Previous
(左)和
FocusNavigationDirection.Next
(右)? 与其他值相比,这可能会提供更可预测的行为。     

要回复问题请先登录注册