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

时间:2018-06-05 15:20:37

标签: c# xaml uwp focus

我在构建一个UWP应用。我目前正在努力让它更易于访问,因此我只使用键盘并使用 tab 键进行导航。

有时我使用所有屏幕显示带有2个按钮的UserControl,其余页面元素保留在背景中。但是如果我使用tab导航到这两个按钮,焦点会快速转移到后台的元素,这就是我想要避免的。

我希望标签只关注我显示的用户控件中的那两个按钮。

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

关于如何限制UserControl中的标签导航的任何想法?

1 个答案:

答案 0 :(得分:2)

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

要么你或者你也可以在背景中禁用这些元素,但这也会修改控件的外观,这可能是你特定意图所不希望的。

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

更新

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

查看此处Tab NavigationControl Group文档,表明您可以使用API​​的以下属性自定义控件导航:

  

XYFocusKeyboardNavigation启用箭头键之间的导航   对照

     

TabFocusNavigation表示是否有多个标签   停止或单个制表位

     

FindFirstFocusableElement和   FindLastFocusableElement使用Home键将焦点放在第一个项目上   和带有结束键的最后一项

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

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

当显示对话框并将TabFocusNavigation依赖属性设置为循环时,会出现此可视状态,这意味着所有子项都将获得一次焦点,并且标签导航将循环显示就是这样设定的。

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

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