如何解决WPF TreeView中的键盘导航
| 我的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的通用容器设计,因此它们仍然可以工作:
将
TreeView
标记的KeyboardNavigation.TabNavigation
属性设置为Contained
,并将以下内容包括在树中:
<TreeView.ItemContainerStyle>
<Style TargetType=\"TreeViewItem\">
<Setter Property=\"KeyboardNavigation.TabNavigation\" Value=\"Continue\"/>
</Style>
</TreeView.ItemContainerStyle>
这有三个问题。 Shift-tab根本不起作用。 (请参阅此问题。)此外,向上和向下箭头键的作用不大。我刚刚发现这样做将处理MouseLeftButtonUp事件,以便不会触发您自己的事件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。