.net WPF将选项卡项的控件包含到选项卡顺序中
希望你能告诉我我做错了什么。我原以为实现我正在尝试的目标会很容易,但我无法解决我的问题 我想做什么 我有一个表单,其中包含两个控件,例如左侧的文本框。在右边,我有一个带有TabItems的TabControl,这些项目上还有一些文本框。如果我打开表单,左侧的第一个文本框将具有焦点。我输入TabIndex的方式是,第一个TabItem上的第一个文本框(可见)应该在之后获得焦点。但无论我输入什么,在第一个TabItem获得焦点之前,左侧的所有文本框都会收到焦点。请在下面找到一个示例代码。我做错了什么.net WPF将选项卡项的控件包含到选项卡顺序中,.net,wpf,tab-ordering,.net,Wpf,Tab Ordering,希望你能告诉我我做错了什么。我原以为实现我正在尝试的目标会很容易,但我无法解决我的问题 我想做什么 我有一个表单,其中包含两个控件,例如左侧的文本框。在右边,我有一个带有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、 已处理=正确;
打破
}
}
您已经解决了这个问题吗?真的没有其他办法吗?可能通过键盘导航
类?