WPF如何通过设置索引来操作Tab键序列?

时间:2014-01-17 14:14:44

标签: c# wpf tabs navigation

现在假设我有一个控件全部绑定在stackpanel内。

默认情况下,按下TAB时,焦点将从控件1移动到控件10。 现在我想要的是,在焦点从control 1移动到control 2后,当用户再次按TAB时,焦点将返回到control 1。到目前为止,我只能使用KeyboardNavigation.TabIndex="N" where N = "0,1,2,3,.."来处理序列,但我最终想要的是跳过其余的8个控件。

请不要建议TabNavigation =“NONE”或IsTabStop =“False”跳过控件,我不想搞乱其他控件而且是的,我很好用硬编码序列

1 个答案:

答案 0 :(得分:1)

覆盖您想要控制的控件上的预览键向下事件,如果其选项卡然后执行您想要的操作。

这是一个例子,如果它像文本框那样你可以使用这样的东西。在c#或xaml中使用事件处理程序。

btn1.PreviewKeyDown += new KeyEventHandler(btn1_KeyDown);
btn2.PreviewKeyDown += new KeyEventHandler(btn2_KeyDown);

然后

private void btn1_KeyDown(object sender, KeyEventArgs e)
{

    if (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)))
    {
        //do what you want when shift+tab is pressed.
        e.Handled = true;
    }
    else
    {
        btn2.Focus();
        e.Handled = true;
    }

}

private void btn2_KeyDown(object sender, KeyEventArgs e)
{

    if (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)))
    {
        //do what you want when shift+tab is pressed.
        e.Handled = true;
    }
    else
    {
        btn1.Focus();
        e.Handled = true;
    }

}