我正在运行时创建一个 TreeView 。它有几个节点(TreeViewItem),每个节点都有一个名称。最初它是崩溃的。单独的组合框显示所有 TreeViewItem 的名称。我必须根据所选名称突出显示 TreeViewItem。我正在使用递归函数并获取 TreeViewItem 容器,如下所示:
if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
continue;
TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();
但它是
Parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted
对于所有折叠的项目。如何手动为它们生成容器(不扩展它们)?
每当你发现自己在视觉树上行走时,你都应该认真考虑构建视图模型。
视图模型可以增加树视图功能,而无需担心您面临的各种问题。
您的应用程序的视图模型将有一些额外的属性
IsSelected
IsExpanded
IsHighlighted
以及你的
Data
然后您可以将 IsSelected、IsHighlighted 和 IsExpanded 绑定(使用 ItemContainerStyle)到 TreeViewItem,然后当您拥有这些视图模型的集合时,您可以在视图模型上进行搜索并只需设置属性 IsHighlighted。然后视图模型会做出响应,并且由于与样式的绑定,如果需要,它会突出显示树视图项。它还可以做一些时髦的事情,比如展开上面的所有节点。树视图会对此做出响应。
视图模型与树视图结合使用时提供了更大的灵活性,并停止了那些视觉树爬行练习(这是一种黑客行为,感觉很脏)
这里有一个关于 ViewModel 和 TreeView 的好文章 http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)