将选项卡导航限制为 UI 元素

Limit tab navigation to a UI Element

我正在构建一个 UWP 应用程序。我目前正在努力使它更易于访问,所以我只通过键盘使用它并使用 tab 键导航。

有时我会使用所有屏幕显示带有 2 个按钮的 UserControl,而将其余页面元素留在背景中。但是,如果我使用选项卡导航到这 2 个按钮,焦点会迅速转到背景元素,而这正是我要避免的。

我希望选项卡仅关注我显示的用户控件中的那 2 个按钮。

我注意到某些框架元素(如 ContentDialog)会自动执行此操作,我想要相同的行为。

关于如何限制 UserControl 内的选项卡导航有什么想法吗?

当您显示 UserControl 时,您可以通过将 IsTabStop 依赖项 属性 设置为 false 来触发布局修改背景中存在的元素。

或者你也可以禁用背景中的元素,但这也会修改控件的外观,这对于你的特定意图来说可能是不希望的。

  • 万一有各种各样的元素需要有它的 IsTabStop 设置为 false,而不是定义标识符 具有 x:Name 的属性,并且必须在其中引用每个单独的属性 代码隐藏,我建议循环布局 Children 依赖项 属性 并以此方式修改控件属性。

更新:

我完全误解了你的要求。重读后,我明白了你的目标是什么,而且根据文档,这些目标似乎是可以实现的!

查看 Tab Navigation here and Control Group 文档,表明您可以使用 API 的以下属性自定义控件导航:

XYFocusKeyboardNavigation enables arrow key navigation between controls

TabFocusNavigation indicates whether there are multiple tab stops or single tab stop

FindFirstFocusableElement and FindLastFocusableElement sets focus on the first item with Home key and the last item with End key

查看模板,我们看到为 ContentDialog 定义的以下 VisualState

<VisualState x:Name="DialogShowing">
    <VisualState.Setters>
        <Setter Target="LayoutRoot.Visibility" Value="Visible" />
        <Setter Target="BackgroundElement.TabFocusNavigation" Value="Cycle" />
    </VisualState.Setters>
</VisualState>

显示对话框时会出现这种视觉状态,它将 TabFocusNavigation 依赖项 属性 设置为 Cycle 意味着所有子项都将获得一次焦点当 属性 设置为这种方式时,选项卡导航将循环。

在上面的链接中,文档非常棒,并且可以为 TabFocusNavigation 设置的每个可能值都有一个图形表示。

您的 UserControl 未按预期工作的原因是它的导航行为遵循 Local 场景的约定。