我有一个WPF / XAML表单,它在页面上有控件,还有一个选项卡控件内的控件。
我希望通过适当地设置tabindex值,用户可以从选项卡控件外部的控件到第一个选项卡项内的控件进行选项卡,但似乎在选项卡控件中跳过选项卡控件内的项目表格。
有没有办法让标签进入tabitem / tab控件?
答案 0 :(得分:1)
WPF提供了许多方法来影响应用程序中的Tab键顺序。可能最重要的也是奇怪的是最不为人知的。我在谈论KeyboardNavigation
课程,特别是KeyboardNavigation.TabNavigation
Attached Property。从MSDN上的链接页面,此属性获取或设置此属性在上设置的元素的子元素的逻辑选项卡导航行为。
使用的KeyboardNavigationMode
Enumeration中有几个可能的值会以不同的方式影响制表顺序。查看最后一个链接页面以查看哪一个最适合您的情况,但作为示例,Local
值具有选项卡索引仅在此容器内的本地子树上被考虑的效果。 。[导航在到达边缘时离开包含元素] 。
<Grid KeyboardNavigation.TabNavigation="Local">
...
</Grid>
答案 1 :(得分:0)
这是我经常遇到的一个问题,这是一个棘手的问题。根据我的理解,它不能按预期工作的原因是因为Tab键顺序(甚至通过TabIndex
指定)是上下文的。更高级别项目的TabIndex将优先于内部元素。因此,如果TabItem
内有两个TabControl
,并且每个UIElement
内部都有TabIndex
,即使指定了TabItem
,标签也会首先遍历在UIElement
向下移动到这些控件的内容之前。我“思考”,IIRC“这与页面的组成方式有关,但不要引用我的内容.MS有一些奇怪的原因可以解释这些微妙的细微差别。
解决方案。我过去做过的事情(只要你没有使用WinRT,这会使问题更严重)你可以使用UIElement.Focus。我按照我希望它们在代码中选项卡时的顺序存储KeyDown
的列表。然后,通过将int currentIndex = TabbableControls.IndexOf(sender);
UIElement next = TabbableControls[(currentIndex + 1) % TabbableControls.Length];
next.Focus();
事件绑定到所有这些控件的公共处理程序,我执行以下操作:
{{1}}
希望这有帮助!