【问题标题】:Keyboard navigation in WPF TreeViewWPF TreeView 中的键盘导航
【发布时间】:2011-09-05 16:57:49
【问题描述】:

我的 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 treeview tabs navigation


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 在 TreeView 中使用 TextBoxes 等时,这是一个游戏规则改变者。可以将 TreeView 本身的 KeyboardNavigation.TabNavigation 设置为 "Continue" 以允许焦点移动到树之外。
    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 2012-10-29
    • 2011-04-25
    • 1970-01-01
    • 2011-01-17
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多