c# - 将选项卡导航限制为 UI 元素
问题描述
我正在构建一个 UWP 应用程序。我目前正在努力使其更易于访问,因此我仅将其与键盘一起使用并使用键导航tab。
有时我会在整个屏幕上显示一个带有 2 个按钮的 UserControl,而将其余的页面元素留在背景中。但是,如果我使用选项卡导航到这 2 个按钮,焦点会很快转到背景元素,这就是我要避免的。
我希望选项卡只关注我显示的用户控件中的这两个按钮。
我注意到像 ContentDialog 这样的一些框架元素会自动执行此操作,并且我想要相同的行为。
关于如何限制 UserControl 内的选项卡导航的任何想法?
解决方案
当您显示 时,您可以通过将背景中存在的元素的依赖属性设置为falseUserControl
来触发对布局的修改。IsTabStop
或者您也可以禁用背景中的元素,但这也会修改控件的外观,这可能不符合您的特定意图。
- 如果有多种元素需要将其
IsTabStop
设置为false,而不是定义一个标识符属性x:Name
并且必须在代码隐藏中引用每个元素,我建议循环一个布局Children
依赖属性并修改控件属性这边走。
更新:
我完全误解了你的要求。重新阅读后,我了解您的目标是什么,并且根据文档,这些目标似乎是可以实现的!
查看Tab Navigation here 和Control Group文档,表明您可以使用 API 的以下属性自定义控件导航:
XYFocusKeyboardNavigation
启用控件之间的箭头键导航
TabFocusNavigation
指示是否有多个制表位或单个制表位
FindFirstFocusableElement
并FindLastFocusableElement
用 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
是因为它的导航行为遵循本地场景的约定。
推荐阅读
- netty - Netty:事件循环组和自定义事件
- javascript - 模态弹出窗口已停止运行
- css - 动态背景图像不起作用 - Angular 5
- .net - 无法在后台服务中获取 ArcGIS Map url 的图像
- r - 基于R中的日期时间查找唯一ID的最后一个和第一个值
- vue.js - 通过 Vue / Axios 发送 URL 查询字符串
- angular - Angular 没有呈现 app.component.html 页面
- java - Lucene MultiFieldQueryParser 不起作用
- html - 如何在图像向右浮动时使文本重叠
- python - 如何改进这个交替迭代器的 Python 3 代码?