.net WPF将选项卡项的控件包含到选项卡顺序中

.net WPF将选项卡项的控件包含到选项卡顺序中,.net,wpf,tab-ordering,.net,Wpf,Tab Ordering,希望你能告诉我我做错了什么。我原以为实现我正在尝试的目标会很容易,但我无法解决我的问题 我想做什么 我有一个表单,其中包含两个控件,例如左侧的文本框。在右边,我有一个带有TabItems的TabControl,这些项目上还有一些文本框。如果我打开表单,左侧的第一个文本框将具有焦点。我输入TabIndex的方式是,第一个TabItem上的第一个文本框(可见)应该在之后获得焦点。但无论我输入什么,在第一个TabItem获得焦点之前,左侧的所有文本框都会收到焦点。请在下面找到一个示例代码。我做错了什么

希望你能告诉我我做错了什么。我原以为实现我正在尝试的目标会很容易,但我无法解决我的问题

我想做什么

我有一个表单,其中包含两个控件,例如左侧的文本框。在右边,我有一个带有TabItems的TabControl,这些项目上还有一些文本框。如果我打开表单,左侧的第一个文本框将具有焦点。我输入TabIndex的方式是,第一个TabItem上的第一个文本框(可见)应该在之后获得焦点。但无论我输入什么,在第一个TabItem获得焦点之前,左侧的所有文本框都会收到焦点。请在下面找到一个示例代码。我做错了什么

<Grid Name="grid" >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="200"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Column="0">
        <TextBox Name="tb1" TabIndex="0" Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=TabIndex}"/>
        <TextBox TabIndex="5" Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=TabIndex}"/>
        <TextBox TabIndex="1" Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=TabIndex}"/>
    </StackPanel>
    <TabControl Grid.Column="1" Height="Auto" Width="Auto" KeyboardNavigation.DirectionalNavigation="Contained">
        <TabItem Header="1">
            <StackPanel>
                <TextBox TabIndex="4" Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=TabIndex}"/>
                <TextBox TabIndex="3" Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=TabIndex}"/>
                <TextBox TabIndex="6" Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=TabIndex}"/>
            <TextBox/>
            </StackPanel>
        </TabItem>
        <TabItem Header="2">
            <StackPanel>
                <TextBox Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=TabIndex}"/>
                <TextBox Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=TabIndex}"/>
                <TextBox Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=TabIndex}"/>
                <TextBox Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=TabIndex}"/>
            </StackPanel>
        </TabItem>
    </TabControl>
</Grid>

非常感谢,,
Torsten

选项卡索引将在每个选项卡项内循环,然后再尝试进一步(也就是说,如果定义了TabIndex从一个选项卡跳转到另一个选项卡,则在您的情况下,它不是)。所以你所做的是行不通的。尽管这可能很糟糕,但在您的情况下,如果您想打破当前
TabItem
上的内部制表符循环并按照您描述的顺序跳出,您必须使用代码隐藏将焦点设置到当前
TabItem
之外的元素 . 这里我写了一个简单的例子:

private void TextBox\u KeyDown(对象发送者,KeyEventArgs e)
{
如果(e.Key!=Key.Tab)返回;
var textBox=(textBox)发送方;
开关(textBox.Name)
{
案例“tb1”:
tab1.Focus();
tb3.Focus();
e、 已处理=正确;
打破
案例“tb4”:
tb5.焦点();
e、 已处理=正确;
打破
案例“tb5”:
tab1.Focus();
tb6.焦点();
e、 已处理=正确;
打破
}
}

您已经解决了这个问题吗?真的没有其他办法吗?可能通过
键盘导航
类?