WPF复合控件中的TabIndex

4
我有一个简单的窗口,其中嵌入了一个简单的组合控件。
(主窗口)
<Window x:Class="TabOrder.Window1"
xmlns:local="clr-namespace:TabOrder"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
    <Label HorizontalAlignment="Left" VerticalAlignment="Top">First</Label>
    <TextBox TabIndex="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,0,0,0"/>

    <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,30,0,0">Second</Label>
    <TextBox TabIndex="1" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,30,0,0"/>

    <local:MyControl Margin="0,60,0,0" VerticalAlignment="Top" HorizontalAlignment="Stretch" TabIndex="2"/>
</Grid>

(组合控件)

<UserControl x:Class="TabOrder.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
    <Label HorizontalAlignment="Left" VerticalAlignment="Top">Third</Label>
    <TextBox HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,0,0,0"/>

    <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,30,0,0">Fourth</Label>
    <TextBox HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,30,0,0"/>
</Grid>

按照我的表单预期,我得到了4个文本框...
- 第一个 - 第二个 - 第三个 - 第四个
但是当“第一个”获得焦点并且我按下tab键时,焦点会切换到“第三个”。WPF似乎将选项卡列表视为单个平面列表,而不是树形结构,其中MyControl是TabIndex 3,文本框“Third”是其中的第一个选项卡控件。
这是WPF中的错误还是有其他方法可以做到这一点?复合控件在许多窗口中使用,甚至可以在单个窗口上使用多次。
1个回答

13

我知道这个回答有点晚了...但你尝试过了吗:

<UserControl ... KeyboardNavigation.TabNavigation="Local">

这样做将确保一旦您的UserControl获得焦点,您将仅在UserControl内部通过TabStop导航(而不必担心整个应用程序中冲突的TabIndex值)。循环遍历UserControl的TabStops后,TabNavigation会恢复到它之外的TabStop。

http://msdn.microsoft.com/en-us/library/system.windows.input.keyboardnavigationmode.aspx


1
对我来说还不晚。谢谢。 - apocalypse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接