C# WPF如何通过设置索引来操作选项卡序列?

C# WPF如何通过设置索引来操作选项卡序列?,c#,wpf,tabs,navigation,C#,Wpf,Tabs,Navigation,现在想象一下,我有十个控件都绑定在一个堆栈面板中 默认情况下,当按下TAB时,焦点将从控件1移动到控件10。 现在我想要的是,在焦点从control1移动到control2之后,当用户再次按下TAB时,焦点将返回到control1。到目前为止,我只能通过使用KeyboardNavigation.TabIndex=“N”where N=“0,1,2,3,…”来搞乱序列,但我最终想要的是跳过剩下的8个控件 请不要建议TabNavigation=“NONE”或IsTabStop=“False”跳过控件

现在想象一下,我有十个控件都绑定在一个
堆栈面板中

默认情况下,当按下
TAB
时,焦点将从控件1移动到控件10。 现在我想要的是,在焦点从
control1
移动到
control2
之后,当用户再次按下
TAB
时,焦点将返回到
control1
。到目前为止,我只能通过使用
KeyboardNavigation.TabIndex=“N”where N=“0,1,2,3,…”
来搞乱序列,但我最终想要的是跳过剩下的8个控件


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

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

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

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


@我添加了一个例子,主要是我不知道如何将焦点移回控件1。这十个控件实际上都是按钮。@IsaacLem我添加了一个例子。“如果有帮助,请告诉我。”我很乐意帮忙。
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;
    }

}