在WPF中设置Tab键顺序

如何在WPF中设置制表符sorting? 我有一个ItemsControl扩展了一些项目,一些折叠,并希望跳过折叠的时候我TabBar。

有任何想法吗?

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

KeyboardNavigation.IsTabStop="False" 

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

如果你想明确地设置表单中元素的Tab顺序,下面的附加属性应该有所帮助:

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

我说“应该帮助”,因为我还没有发现它是非常可靠的,尽pipe我可能需要阅读更多关于它是如何使用的。 我只发布这个半熟的答案,因为没有人提到这个属性。


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

<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键浏览这两个combobox。

我认为这里有一个更容易的解决scheme,在你的控制或窗口顶部或任何其他地方,你可以添加:

 KeyboardNavigation.TabNavigation="Cycle" 

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

在过去,另一种替代方法是简单地删除所有显式的TabIndex语句,并让控件使用它们在XAML中声明的顺序工作。

当然,这可能会要求您对控件重新sorting。 但是这是一个简单的复制粘贴操作。

此外,.NET 3.0有一个类,可以自动设置标签顺序,你可以根据你的表单部分覆盖它。

  (new TabOrderManager(this)).SetTabOrder(TabOrderManager.TabScheme.AcrossFirst);