2017-01-19 7 views
1

私はこのように構成されたTreeView持っている:どのようにHierarchicalDataTemplateを使用して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 [email protected]}" /> 
    <Button>Add Subordinate Unit</Button> 
</HierarchicalDataTemplate> 

をしかし、それはボタンを追加するにはランタイムエラーがスローされます。 " 'Template'プロパティは既に 'HierarchicalDataTemplate'に設定されています。 '行番号 '3'および行位置 '4'。

私がしようとしていることは可能ですか?ボタンを追加するためのスクリプトを取り出すと、すべて正常に動作します。

ありがとうございます!

答えて

1

明白なエラーの1つは、テンプレートのビジュアルツリーのルートレベルに2つの要素があることです。あなたはそれをすることはできません。 DataTemplateまたはHierarchicalDataTemplateには1人の子供しか持てません。あなたの最初のステップは、その子供を自分の複数の子供をサポートするコントロールにすることです、あなたの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 [email protected]}" 
      /> 
     <Button>Add Subordinate Unit</Button> 
    </StackPanel> 
</HierarchicalDataTemplate> 

それは私がXAMLデザイナーにあなたのテンプレートのXAMLを貼り付けるとき、私は別のエラーが出ることに注意することは興味深い:「プロパティを 『VisualTree』複数回設定されている」 - しかし、 XamlReader.Load()のコードを複製すると、同じ例外とメッセージが表示されます(同じ修正プログラムで修正されます)。

「テンプレートプロパティは既にHierarchicalDataTemplateに設定されています」の結果はゼロです。まあ、それは今持っているかもしれない。

+1

これは動作し、エラーは発生しません。ありがとう!私はそれを4分間の答えとすることはできません。私が戻ったときに私はそれをやります。再度、感謝します! – zetar

+0

@zetarそれを聞いてうれしい! –

関連する問題