WPF TreeView中的键盘导航

Evl*_*tnt 3 navigation wpf treeview tabs

我的TreeViewItem.Items数据模板包含2个文本框.当我在第一个文本框中按Tab键时,焦点将转到第二个文本框.我希望当我在第二个文本框上按Tab键时 - 关注下一个TreeViewItem子项目上的第一个文本框,如果TreeViewItem没有下一个子项目,则焦点将在下一个TreeViewItem上的第一个子项目上进行.怎么做?

<TreeView Name="resultsTv" 
            ItemTemplate="{StaticResource excerciseResultDataTemplate}" 
            KeyboardNavigation.TabNavigation="Contained">
                <TreeView.ItemContainerStyle>
                    <Style>
                        <Setter Property="TreeViewItem.IsExpanded" Value="True"/>
                        <Setter Property="KeyboardNavigation.TabNavigation" Value="Contained"></Setter>
                    </Style>
                </TreeView.ItemContainerStyle>
            </TreeView>

<HierarchicalDataTemplate x:Key="excerciseResultDataTemplate" ItemTemplate="{StaticResource setDataTemplate}" ItemsSource="{Binding Sets}">
            <StackPanel Orientation="Horizontal" KeyboardNavigation.TabNavigation="Continue">
                <Label Content="{Binding Name}"></Label>
            </StackPanel>
        </HierarchicalDataTemplate>

<DataTemplate x:Key="setDataTemplate">
            <StackPanel Orientation="Horizontal" KeyboardNavigation.TabNavigation="Continue">
                <TextBox Width="50" Text="{Binding Weight}"/>
                <TextBox Width="50" Text="{Binding Repeats"/>
            </StackPanel>
        </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

Kag*_*nar 7

我自己遇到这个问题,我在互联网上查看了这个问题,只看到了关于WPF商业自定义控件的论坛帖子.但是,由于它们依赖于WPF的通用容器设计,它们仍然可以工作:

将标记的KeyboardNavigation.TabNavigation属性设置TreeViewContained并在树中包含以下内容:

<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
        <Setter Property="KeyboardNavigation.TabNavigation" Value="Continue"/>
    </Style>
</TreeView.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

这有三个问题.Shift-tab根本不起作用.(请参阅此问题.)此外,向上和向下箭头键不起作用.我刚刚发现这样做会处理MouseLeftButtonUp事件,这样就不会触发你自己的事件.