Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何创建始终扩展的树视图?_Wpf_Treeview_Expansion - Fatal编程技术网

Wpf 如何创建始终扩展的树视图?

Wpf 如何创建始终扩展的树视图?,wpf,treeview,expansion,Wpf,Treeview,Expansion,我以为我已经解决了这个问题。我只是简单地更改了TreeViewItem的模板,以忽略特定节点是否已展开。看起来很棒!但就是这样。。。看起来很棒!键盘导航仍会做出响应,就像节点已展开或折叠一样 例如,如果我在根节点上,按下右箭头(没有移动,也不应该移动),然后按下,我转到根的第一个子节点。但是,如果我在根节点上,向左击(同样,没有移动),然后向下击,我跳到第二个根节点,跳过第一个节点的所有子节点 不用说,这不是我们想要的行为。我们可以简单地吞下左箭头键和右箭头键,或者干脆完全放弃treeview并

我以为我已经解决了这个问题。我只是简单地更改了TreeViewItem的模板,以忽略特定节点是否已展开。看起来很棒!但就是这样。。。看起来很棒!键盘导航仍会做出响应,就像节点已展开或折叠一样

例如,如果我在根节点上,按下右箭头(没有移动,也不应该移动),然后按下,我转到根的第一个子节点。但是,如果我在根节点上,向左击(同样,没有移动),然后向下击,我跳到第二个根节点,跳过第一个节点的所有子节点


不用说,这不是我们想要的行为。我们可以简单地吞下左箭头键和右箭头键,或者干脆完全放弃treeview并移动到嵌套的items presenters(这就是treeview所做的),但我希望我不必仅仅为了这个功能重新创建整个控件。想法?

在您的TreeViewItem模板中,您可以将IsExpanded设置为true,然后,如果您的所有项目都有子元素,则应展开它们

不幸的是,你可能不得不吞下这些按键来获得你想要的键盘导航,因为你看到的导航是经过设计的


您可以创建一个从treeview继承的自定义treeview,并将这些按钮事件放在其中,以便可以重复使用。

KeyDown以及用户按键时可能发生的任何其他按键事件。经过一番思考后,听起来您可能会更好地使用带有itemtemplates的项目的列表框来区分它们。您要查找的是ListBox支持的导航,而不是正在折叠的组,子对象可以有一个边距或类似的东西来复制您在普通树视图中看到的水平偏移。嵌套列表框的问题是键盘导航,因为每个控件都有自己的焦点范围和选项卡导航,这些都在列表框之间,而不是将它们视为一个整体。当然,我可以用它来做模板,但我只是猜测,更好的做法是订阅每个TreeViewItem的IsExpanded changed notification属性,并简单地确保它保持为true。)当使用CollectionViewSource填充时,ListBox似乎可以提供分组功能,其中视图对其进行了一些分组。您的项目可以按父项目分组,并且应该保留listbox导航。不,listbox中的分组用于固定的分组深度,而不是TreeView提供的任意分组。另外,您不能在分组列表框中选择组“节点”。