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