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

时间:2015-06-07 14:35:48

标签: wpf grid keyboard-navigation

我有一个包含许多文本框的网格。我想使用上/下/左/右键从一个文本框移动到另一个文本框。 我已经尝试在网格上设置KeyBoardNavigation.DirectionNavigation属性,但它不起作用。但是Tab导航工作正常。 有任何建议请。

1 个答案:

答案 0 :(得分:3)

正如我在评论中所说的那样:想要这是一件奇怪的事情 - 但是,我认为最简单的方法是让自己成为一个特殊的跳跃文本框,它会覆盖预览keydown事件到行动重点改变。

DECLARE @TempProcResult TABLE (ID INT, OtherField VARCHAR(50));

INSERT INTO @TempProcResult (ID, OtherField)
  EXEC SECOND_SP @ID;

INSERT INTO dbo.abc (Id, TypeString)
  SELECT tmp.ID, @TypeString
  FROM   @TempProcResult tmp;

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

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));
    }
}

然后,您可以在网格中包含标签导航,其中包含'特殊'文本框:

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