在此示例窗口中,从第一个文本框到最后一个文本框再到扩展器标题都可以进行制表。
<Window x:Class="ExpanderTab.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
FocusManager.FocusedElement="{Binding ElementName=FirstField}">
<StackPanel>
<TextBox TabIndex="10" Name="FirstField"></TextBox>
<Expander TabIndex="20" Header="_abc">
<TextBox TabIndex="30"></TextBox>
</Expander>
<TextBox TabIndex="40"></TextBox>
</StackPanel>
</Window>
显然,我希望这样做是第一个文本框,扩展器标题,然后是最后一个文本框。是否有一种简单的方法可以将TabIndex分配给扩展器的 header ?
我尝试使用
KeyboardNavigation.IsTabStop="True"
强制将扩展器设为tabstop,但这会使整个扩展器获得焦点,并且整个扩展器不会对空格键使用react。在另外两个选项卡之后,再次选择了标题,并且可以使用空格键将其打开。编辑:
如果有任何想出一种更简洁方法来实现此目的的人,我将为您提供赏金-如果没有,那么rmoore,您就可以得到代表。谢谢你的帮助。
最佳答案
即使没有TabIndex属性,下面的代码也可以使用,为了使预期的Tab键顺序更清楚,将其包括在内。
<Window x:Class="ExpanderTab.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300" FocusManager.FocusedElement="{Binding ElementName=FirstField}">
<StackPanel>
<TextBox TabIndex="10" Name="FirstField"></TextBox>
<Expander TabIndex="20" Header="Section1" KeyboardNavigation.TabNavigation="Local">
<StackPanel KeyboardNavigation.TabNavigation="Local">
<TextBox TabIndex="30"></TextBox>
<TextBox TabIndex="40"></TextBox>
</StackPanel>
</Expander>
<Expander TabIndex="50" Header="Section2" KeyboardNavigation.TabNavigation="Local">
<StackPanel KeyboardNavigation.TabNavigation="Local">
<TextBox TabIndex="60"></TextBox>
<TextBox TabIndex="70"></TextBox>
</StackPanel>
</Expander>
<TextBox TabIndex="80"></TextBox>
</StackPanel>
</Window>
关于wpf - 如何在WPF扩展器控件上设置TabIndex?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/989174/