【发布时间】:2021-03-06 19:50:17
【问题描述】:
在 Avalonia Ui, 我的用户界面中有多个布局,我想要一个非常具体的标签顺序, 像
<TextBox Tabindex="2">
<StackPanel>
<TextBox Tabindex="1">
</StackPanel>
<TextBox Tabindex="0">
这将导致使用 tab 键从下到上循环。 这可能吗?我什么也没找到。
【问题讨论】:
标签: avaloniaui
在 Avalonia Ui, 我的用户界面中有多个布局,我想要一个非常具体的标签顺序, 像
<TextBox Tabindex="2">
<StackPanel>
<TextBox Tabindex="1">
</StackPanel>
<TextBox Tabindex="0">
这将导致使用 tab 键从下到上循环。 这可能吗?我什么也没找到。
【问题讨论】:
标签: avaloniaui
我不这么认为。 KeyboardNavigation.TabIndex 尚未实现:https://github.com/AvaloniaUI/Avalonia/issues/3025。
您可以使用KeyboardNavigation 中提供的功能和使用另一个控件(例如DockPanel 或Relative Panel)进行一些有限的控制。
这是一个非常基本的示例,说明如何使用DockPanel 来做你想做的事:
<DockPanel LastChildFill="False"
VerticalAlignment="Top"
Name="TabOrderConatiner">
<TextBox Name="First" Tag="2" DockPanel.Dock="Top"></TextBox>
<TextBox Name="Third" Tag="0" DockPanel.Dock="Bottom"></TextBox>
<TextBox Name="Second" Tag="1" DockPanel.Dock="Top"></TextBox>
</DockPanel>
然而,与TabIndex 所能提供的相比,我上面所说的有限。
除此之外,您还应该能够在容器变为活动状态时设置第一个 TabItem,就像您的代码隐藏一样:
var tabOrderContainer = this.FindControl<DockPanel>("TabOrderConatiner");
var initialElement = this.FindControl<TextBox>("Third");
KeyboardNavigation.SetTabOnceActiveElement(tabOrderContainer, initialElement);
但我没有设法让它工作......
【讨论】: