wpf - WPF TreeView中的键盘导航

标签 wpf treeview tabs navigation

我的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>

最佳答案

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

KeyboardNavigation.TabNavigation标记的TreeView属性设置为Contained,并在树中包括以下内容:

<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
        <Setter Property="KeyboardNavigation.TabNavigation" Value="Continue"/>
    </Style>
</TreeView.ItemContainerStyle>

这有三个问题。 Shift-tab根本不起作用。 (请参阅此question。)此外,向上和向下箭头键的作用不大。而且我刚刚发现这样做将处理MouseLeftButtonUp事件,以便不会触发您自己的事件。

关于wpf - WPF TreeView中的键盘导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6191659/

相关文章:

c# - 使用单独的数据库表在 DataGridComboBoxColumn 中设置 ItemSource

c# - Expression Blend 中数据绑定(bind)的新功能

c++ - Qt 中可以使用哪个函数来选择 TreeView 中的项目?

javascript - 如何使用 angularjs 和特定的数据结构创建简单的树可折叠/可折叠 View

wpf - ListBox WPF- VirtualizingStackPanel 有两行,如 wrappanel

c# - 组合框选择

javascript - Angular 1指令组件在模态和模态外有不同的行为

visual-studio-code - VS Code 的选项卡组

Android 应用程序正在崩溃选项卡和谷歌地图

tabs - 浏览器重启后在 Chrome 扩展中重新建立标签标识