在此示例窗口中,从第一个文本框到最后一个文本框再到扩展器标题都可以进行制表。

<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/

10-10 23:02