在WPF中设置Tab键顺序

Rom*_*mán 90 .net wpf tab-ordering keyboard-navigation

如何在WPF中设置标签排序?我有一个ItemsControl,其中一些项目已展开,一些项目已折叠,并且当我选中时,我想跳过折叠的项目.

有任何想法吗?

Dre*_*kes 88

如果要显式设置表单中元素的Tab键顺序,则以下附加属性应该有助于:

<Control KeyboardNavigation.TabIndex="0" ... />
Run Code Online (Sandbox Code Playgroud)

我说"应该帮助",因为我还没有发现它非常可靠,但我可能需要阅读更多关于如何使用它的信息.我只发布这半半的答案,因为没有人提到这个属性.


请注意,在Win RT中,属性是正确的TabIndex="0".

  • 诀窍是在父元素中使用带有各种KeyboardNavigation.TabNavigation值的TabIndex.我发现自己经常使用"Local"TabNavigation.:) (10认同)

Jab*_*Jab 61

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

KeyboardNavigation.IsTabStop="False"
Run Code Online (Sandbox Code Playgroud)

您可以设置一个触发器,根据展开状态切换此属性.

  • 您还可以使用 Focusable="False" 将其从键盘焦点和 Tab 键顺序中删除。 (2认同)
  • @Geoff我用一堆按钮来做到这一点,但是没用,只是fyi。 (2认同)

小智 24

<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" />
Run Code Online (Sandbox Code Playgroud)

将允许您使用TAB键在这两个组合框中导航.


Alt*_*F4_ 11

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

KeyboardNavigation.TabNavigation="Cycle"
Run Code Online (Sandbox Code Playgroud)

这也会自动忽略折叠的标签.


Gus*_*ori 6

过去对我TabIndex有用的另一个替代方法是简单地删除所有显式语句,并让控件使用他们在XAML中声明的顺序发挥他们的魔力.

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

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