我有一个构造如下的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;
它读取这样的XML文件:
<HierarchicalDataTemplate xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ItemsSource="{Binding XPath=SubCategory}">
<TextBlock FontSize="36" FontFamily="K22 Monastic" Text="{Binding XPath=@CategoryName}" />
<Button>Add Subordinate Unit</Button>
</HierarchicalDataTemplate>
但是在添加按钮时会引发运行时错误: “模板”属性已在“HierarchicalDataTemplate”上设置。行号“3”和行位置“4”。
我正在尝试做什么?如果我拿出添加按钮的脚本一切正常。
谢谢!
答案 0 :(得分:1)
一个明显的错误是你在模板的可视树的根级别有两个元素。你不能这样做。 DataTemplate
或HierarchicalDataTemplate
只能有一个孩子。因此,您的第一步是让一个孩子成为支持多个孩子的控件,然后将TextBlock
和Button
放入其中。 StackPanel
是个好人:
<HierarchicalDataTemplate
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
ItemsSource="{Binding XPath=SubCategory}"
>
<StackPanel Orientation="Horizontal">
<TextBlock
FontSize="36"
FontFamily="K22 Monastic"
Text="{Binding XPath=@CategoryName}"
/>
<Button>Add Subordinate Unit</Button>
</StackPanel>
</HierarchicalDataTemplate>
值得注意的是,当我将模板XAML粘贴到XAML设计器中时,我得到了一个不同的错误:&#34;属性&#39; VisualTree&#39;设置不止一次&#34; - 但是当我复制你的XamlReader.Load()
代码时,我会得到与你相同的异常和消息(并且相同的修复程序会对其进行更正)。
Google的结果为零#34;模板属性已在HierarchicalDataTemplate&#34;上设置。好吧,也许它现在有一个。