z-index如何影响Tab键顺序?

时间:2017-02-15 04:01:55

标签: c# wpf xaml

这是我的第一个问题,如果我没有正确完成某事,那就很抱歉。

我在互联网上找不到关于这个话题的任何内容:

当我使用以下网格创建新的wpf应用程序时,Tab键顺序符合预期(第一个文本框,向下):

<Grid>
    <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="95,95,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" />
    <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="23" Margin="95,160,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
    <TextBox x:Name="textBox2" HorizontalAlignment="Left" Height="23" Margin="95,217,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
</Grid>

如果我在其中一个上设置Panel.ZIndex,它会以不同的方式影响制表符索引(取决于哪一个)。这个是最值得注意的,因为它似乎颠倒了Tab键顺序:

<Grid>
    <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="95,95,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" />
    <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="23" Margin="95,160,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" Panel.ZIndex="2"/>
    <TextBox x:Name="textBox2" HorizontalAlignment="Left" Height="23" Margin="95,217,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
</Grid>

那么这是如何工作的? zindex是否真的会影响Tab键顺序,还是以某种方式创建一个新的选项卡组来保存具有相同zindex的控件?有没有办法阻止这一点,所以zindex根本没有影响?

我更喜欢不使用TabIndex属性对标签顺序进行硬编码的解决方案。理想情况下,有一些方法可以防止zindex干扰

1 个答案:

答案 0 :(得分:2)

如果您未设置_TabIndex_es, ZIndex 很重要。这是因为KeyboardNavigation使用VisualTreeHelper.GetChild()来查找下一个子节点(请参阅KeyboardNavigation source code中的GetNextSibling(...)),此方法首先返回较低_ZIndex_es的视觉效果。如果您对TabIndex进行硬编码,则一切都符合预期。