使用箭头键在 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">
我有一个包含多个文本框的网格。我想使用 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">