如何使用HierarchicalDataTemplate向TreeView添加按钮?

时间:2017-01-19 17:17:01

标签: c# wpf button treeview

我有一个构造如下的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”。

我正在尝试做什么?如果我拿出添加按钮的脚本一切正常。

谢谢!

1 个答案:

答案 0 :(得分:1)

一个明显的错误是你在模板的可视树的根级别有两个元素。你不能这样做。 DataTemplateHierarchicalDataTemplate只能有一个孩子。因此,您的第一步是让一个孩子成为支持多个孩子的控件,然后将TextBlockButton放入其中。 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;上设置。好吧,也许它现在有一个。

相关问题