首页 > 解决方案 > 将选项卡导航限制为 UI 元素

问题描述

我正在构建一个 UWP 应用程序。我目前正在努力使其更易于访问,因此我仅将其与键盘一起使用并使用键导航tab

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

我希望选项卡只关注我显示的用户控件中的这两个按钮。

我注意到像 ContentDialog 这样的一些框架元素会自动执行此操作,并且我想要相同的行为。

关于如何限制 UserControl 内的选项卡导航的任何想法?

标签: c#xamluwpfocus

解决方案


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

或者您也可以禁用背景中的元素,但这也会修改控件的外观,这可能不符合您的特定意图。

  • 如果有多种元素需要将其 IsTabStop设置为false,而不是定义一个标识符属性x:Name并且必须在代码隐藏中引用每个元素,我建议循环一个布局Children 依赖属性并修改控件属性这边走。

更新:

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

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

XYFocusKeyboardNavigation启用控件之间的箭头键导航

TabFocusNavigation指示是否有多个制表位或单个制表位

FindFirstFocusableElementFindLastFocusableElement用 Home 键将焦点放在第一个项目上,用 End 键将焦点放在最后一个项目上

查看模板,我们看到为VisualState定义了以下内容ContentDialog

<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是因为它的导航行为遵循本地场景的约定。


推荐阅读