在WPF中设置选项卡顺序


92

如何在WPF中设置选项卡顺序?我有一个ItemsControl,其中有些项目已展开,有些已折叠,并且我在跳动时想跳过那些折叠的项目。

有任何想法吗?


杰西(Jesse)提出的答案是要走的路...
罗曼(Román)

这似乎是默认行为?
JonnyRaa

@Román杰西是谁?
Stealth Rabbi

1
@Stealth Rabbi:选定的答案。这个名字可能已经改变(从11年前😆)
罗曼

Answers:


63

您可以通过在XAML中的元素上设置KeyboardNavigation.IsTabStop来跳过选项卡序列中的元素。

KeyboardNavigation.IsTabStop="False"

您可以设置触发器,该触发器将基于展开状态切换此属性。


1
您也可以使用Focusable =“ False”,将其从键盘焦点以及制表符顺序中删除。
Geoff Cox

2
@Geoff我用一堆按钮来做到这一点,但是没用,只是fyi。
ToastyMallows 2013年

这允许跳过您不想成为选项卡顺序一部分的控件,但是WPF中还有很多其他问题。制表符的排序不是分层的,因此,如果屏幕上还有其他控件的排序为零(默认情况下它们是这样做的),那么制表符的排序将不起作用。
克里斯蒂安·芬德利

90

如果要显式设置表单中元素的选项卡顺序,则应使用以下附加属性:

<Control KeyboardNavigation.TabIndex="0" ... />

我说“应该帮助”,因为我可能觉得还不太可靠,尽管我可能需要阅读更多有关它打算如何使用的信息。我只发布这个半熟的答案,因为没有人提到此属性。


请注意,在Win RT中,该属性只是 TabIndex="0"


11
诀窍是将TabIndex与父元素中的KeyboardNavigation.TabNavigation的各种值一起使用。我发现自己最经常使用“本地” TabNavigation。:)
Greg D

我不得不将其添加到每个控件中,而不仅仅是将它们添加到承载所述控件的不同StackPanel中。
DJ van Wyk

我发现设置<DockPanel Panel.ZIndex="2">有助于订购顶层面板的入口点。
avenmore

25

<Control KeyboardNavigation.TabIndex="0" ... /> 效果很好...例如-

<ComboBox Height="23" 
          Margin="148,24,78,0" 
          Name="comboBoxDataSet"
          VerticalAlignment="Top"
          SelectionChanged="comboBoxDestMarketDataSet_SelectionChanged"
          DropDownOpened="comboBoxDestMarketDataSet_DropDownOpened"
          KeyboardNavigation.TabIndex="0" />
<ComboBox Height="23" 
          Margin="148,56,78,0" 
          Name="comboBoxCategory" 
          VerticalAlignment="Top" 
          SelectionChanged="comboBoxDestCategory_SelectionChanged"
          DropDownOpened="comboBoxDestCategory_DropDownOpened"
          KeyboardNavigation.TabIndex="1" />

将允许您使用TAB键浏览这两个组合框。


13

我认为这里有一个更简单的解决方案,可以在控件或窗口的顶部或任何其他位置添加:

KeyboardNavigation.TabNavigation="Cycle"

这也会自动忽略折叠的选项卡。


6

过去对我有用的另一种方法是简单地删除所有显式 TabIndex有用的语句,并让控件使用XAML中声明的顺序发挥作用。

当然,这可能需要您重新排序控件。但这是一个简单的复制粘贴操作。


4
问题是您不能简单地在DockPanels之类的控件中对控件进行重新排序,而您添加控件的顺序与制表符顺序不匹配。例如,考虑右侧的停靠按钮。您先停靠最后一个,第二个停靠在倒数第二个,依此类推,但是您希望跳位顺序相反。那就是让我最兴奋的地方。像这样的时代,我想念过去的VB6时代(不是语言,而只是此功能),您可以在其中选择“设置制表符顺序”,然后单击所有控件。简单而甜美。令人沮丧的是我们在2018
Mark A. Donohoe

0

您可以使用KeyboardNavigation.TabNavigation =“ None”完全跳过用于特定控件的Tabbing。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.