使用箭头键在 WPF 网格中进行键盘导航

Keyboard navigation in WPF grid using arrow keys

我有一个包含多个文本框的网格。我想使用 up/down/left/right 键从一个文本框移动到另一个文本框。 我试过在网格上设置 KeyBoardNavigation.DirectionNavigation 属性 但它不起作用。但是,选项卡导航工作正常。 有什么建议吗

正如我在评论中所说:想要做这件事很奇怪 - 但是,我认为最简单的方法是让自己成为一个特殊的跳跃文本框,它会覆盖预览 keydown 事件以操作焦点更改。

public class JumpyTextBox : TextBox
{
    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        base.OnPreviewKeyDown(e);

        if (e.Key == Key.Up || e.Key == Key.Down)
            MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous));

        if (e.Key == Key.Down || e.Key == Key.Right)
            MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
    }
}

XAML 就像普通的文本框一样工作:

<local:JumpyTextBox Grid.Column="0" Text="field 1" />
<local:JumpyTextBox Grid.Column="1" Text="field 2" />

然后您可以使用 'special' 文本框在网格中包含选项卡导航:

<Grid KeyboardNavigation.TabNavigation="Cycle">