【问题标题】:Setting tab order in WPF在 WPF 中设置 Tab 键顺序
【发布时间】:2020-06-23 02:38:44
【问题描述】:

如何在 WPF 中设置制表符排序?我有一个 ItemsControl,其中一些项目已展开,有些项目已折叠,并且希望在我进行选项卡时跳过折叠的项目。

有什么想法吗?

【问题讨论】:

  • 杰西建议的答案是要走的路...
  • 这似乎是默认行为?
  • @Román 谁是杰西?
  • @Stealth Rabbi:选择的答案。名称可能已经改变(从 11 年前开始????)

标签: .net wpf tab-ordering keyboard-navigation


【解决方案1】:

如果您想显式设置表单中元素的制表符顺序,以下附加属性应该会有所帮助:

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

我说“应该有帮助”是因为我发现它不是很可靠,尽管我可能需要阅读更多关于它的用途的信息。我只发布这个半生不熟的答案,因为没有其他人提到这个属性。


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

【讨论】:

  • 诀窍是在父元素中将 TabIndex 与 KeyboardNavigation.TabNavigation 的各种值一起使用。我发现自己最常使用“本地”TabNavigation。 :)
  • 我不得不将它添加到我的每个控件中,而不是仅仅将它们添加到承载所述控件的不同 StackPanel 中。
  • 我发现设置&lt;DockPanel Panel.ZIndex="2"&gt; 有助于订购顶级面板的入口点。
【解决方案2】:

您可以通过在 XAML 中的元素上设置 KeyboardNavigation.IsTabStop 来跳过制表符序列中的元素。

KeyboardNavigation.IsTabStop="False"

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

【讨论】:

  • 你也可以是 Focusable="False" 它将它从键盘焦点和标签顺序中删除。
  • @Geoff 我用一堆按钮做了这个,但没用,仅供参考。
  • 这允许跳过您不希望成为选项卡排序一部分的控件,但是 WPF 中还有很多其他问题。制表符排序不是分层的,因此,如果屏幕上的其他控件具有零排序(默认情况下),那么制表符排序将不起作用。
【解决方案3】:

&lt;Control KeyboardNavigation.TabIndex="0" ... /&gt; 工作得很好... 例如-

<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 键浏览这两个组合框。

【讨论】:

    【解决方案4】:

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

    KeyboardNavigation.TabNavigation="Cycle"
    

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

    【讨论】:

      【解决方案5】:

      过去对我有用的另一种选择是简单地删除所有显式 TabIndex 语句,并让控件使用它们在 XAML 中声明的顺序发挥它们的魔力。

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

      【讨论】:

      • 问题是你不能简单地重新排序像 DockPanels 这样的控件,你添加它们的顺序与 tab 顺序不匹配。例如,考虑在右侧停靠按钮。您首先停靠最后一个,第二个停靠到最后一个,等等,但您希望反转标签顺序。这就是最让我绊倒的地方。像这样的时候,我怀念以前的 VB6 日子(不是语言,只是这个功能),你选择“设置标签顺序”,然后单击所有控件。简单又甜美。令人沮丧的是,我们在 2018 年没有这样的事情。
      • @Mark 或 2020 :)。 WPF 中的制表符排序非常复杂,每当我需要自定义排序时,我都必须花一整天的时间来解决它的不可预测性。在 Winforms 中,这是一个平凡的任务,每个窗口需要几分钟。
      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-08
        • 2017-02-15
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多