将多个分层数据模板分配给 TreeView ItemTemplate 的正确方法是啥?
Posted
技术标签:
【中文标题】将多个分层数据模板分配给 TreeView ItemTemplate 的正确方法是啥?【英文标题】:What is the proper method for assigning multiple hierarchicalDataTemplates to a TreeView ItemTemplate?将多个分层数据模板分配给 TreeView ItemTemplate 的正确方法是什么? 【发布时间】:2017-06-06 15:18:23 【问题描述】:我有三个 XML HierarchicalDataTemplates。它们在运行时加载,然后分配给 TreeView.ItemTemplate。这是我大约六年前在一个类似项目中成功使用的代码。它不仅现在不能工作(原始项目仍然神秘地工作正常),而且坦率地说,我无法理解我六年前编写的代码或为什么它工作!这是代码 sn-p(OOB 是 TreeView):
//This is for dynamically building a treeview with templates from an XML file
XmlTextReader xmlReader1 = new XmlTextReader("HierarchicalDataTemplate1.xml");
HierarchicalDataTemplate hierarchicalDataTemplate1 = XamlReader.Load(xmlReader1) as HierarchicalDataTemplate;
XmlTextReader xmlReader2 = new XmlTextReader("HierarchicalDataTemplate2.xml");
HierarchicalDataTemplate hierarchicalDataTemplate2 = XamlReader.Load(xmlReader2) as HierarchicalDataTemplate;
hierarchicalDataTemplate1.ItemTemplate = hierarchicalDataTemplate2;
XmlTextReader xmlReader3 = new XmlTextReader("HierarchicalDataTemplate3.xml");
HierarchicalDataTemplate hierarchicalDataTemplate3 = XamlReader.Load(xmlReader3) as HierarchicalDataTemplate;
hierarchicalDataTemplate2.ItemTemplate = hierarchicalDataTemplate3;
OOB.ItemTemplate = hierarchicalDataTemplate1;
Thread updateThread = new Thread(new ParameterizedThreadStart(UpdateTree));
updateThread.Start(this);
TreeView (OOB) 正确显示前两级节点,但不能正确显示第三级。考虑到,我看不到第三个分层数据模板是如何分配给 OOB.ItemTemplate 的,这并不奇怪(嗯,令人惊讶的是为什么它在我六年前编写的代码中可以正常工作)。
谁能告诉我如何正确地将三个单独的 XML hierarchyDataTemplate 文件分配给 TreeView?谢谢!
【问题讨论】:
如果您有一个使用相同代码的工作解决方案和一个非工作解决方案,那么最好的方法可能是尝试将工作解决方案减少一步一步地工作。复制该工作解决方案并开始删除与新应用程序无关的任何内容 - 最后,您将拥有一些无法解释但至少可以用作新应用程序基础的东西,或者,很可能,您将首先找到使旧应用程序能够正常工作的缺失部分。 好吧,我已经完成了与差异程序的比较,相关部分似乎相同。我无法理解 hierarchicalDataTemplate3 是如何分配给 OOB.ItemTemplate 的。 差异是一回事。减少是另一个原因——它起作用的原因可能在于您认为不相关的那些部分。而hiearchicalDataTemplate3
似乎是在hierarchicalDataTemplate2.ItemTemplate = hierarchicalDataTemplate3;
中分配的。
对,但是在将hierarchicalDataTemplate3 分配给hierarchicalDataTemplate2 之后,hierarchicalDataTemplate2 是如何分配给OOB.ItemTemplate 的?这就是让我难过的地方。然而,这与我六年前编写的另一个(更大的)项目的代码副本和粘贴完全相同。
据我了解,您将OOB
与ItemTemplate
设置为hierarchicalDataTemplate1
,将ItemTemplate
设置为hierarchicalDataTemplate2
,将ItemTemplate
设置为hierarchicalDataTemplate3
。最后,OOB 具有在最低级别使用 hierarchicalDataTemplate3
的 ItemTemplate。对我来说这似乎很合理,尽管我的 WPF 随着时间的推移稍微生锈了。
【参考方案1】:
这不是问题。这是在使用 Xpath 设置 HierarchicalDataTemplate
XML 文件的方式。
【讨论】:
以上是关于将多个分层数据模板分配给 TreeView ItemTemplate 的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
为包含多个集合作为子节点的 TreeView 节点构建数据模板的正确方法是啥?