2017-02-26 1 views
-1

TreeViewItemを使用してツリービューの実行時を満たしました。WPFツリービューアイテムテンプレート

すべての親TreeViewItemには、Tagプロパティ= nullがあります。すべての子TreeViewItem(他の子なし)は、Tagプロパティ=オブジェクトを持ちます。

treeviewitem.tagオブジェクト(!= null)に対して別のレイアウト(ラジオボタンとテキストブロック)を表示したいのですが、ツリービュー項目の仕組みを理解できません...階層化とデータテンプレートを試しましたが失敗します。

<TreeView.ItemTemplate> 
    <HierarchicalDataTemplate DataType="{x:Type TreeViewItem}"> 
     <StackPanel Orientation="Horizontal"> 
      <RadioButton></RadioButton> 
      <TextBlock Text="{Binding Path=Header}"></TextBlock> 
     </StackPanel> 
    </HierarchicalDataTemplate> 
</TreeView.ItemTemplate> 
+0

として、あなたはこれらの新しいタイプを使用してツリーを作成する必要がありますが、最終的にあなたのツリーは、同じオブジェクトになりますか?このコードを投稿してください。 – mm8

答えて

0

XAMLではifとelseを単純に行うことはできません。したがって、アクセスできるのはすべてタイプです。だから、何をする必要がTreeViewItem同様の元の型に基づいて、3種類のタイプを作成することです:

class RadioTreeViewItem:TreeViewItem{} 
class GeneralTreeViewItem:TreeViewItem{} 

は、その後、あなたは、このようなさまざまな要素タイプごとに異なるデータテンプレートやビューを宣言するDataTemplateを使用します。

もちろん
<TreeView.ItemTemplate> 
    <HierarchicalDataTemplate DataType="{x:Type TreeViewItem}"> 
     <StackPanel DataContext={Binding}> 
     <DataTemplate DataType="{x:Type GeneralTreeViewItem}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Path=Header}"></TextBlock> 
      </StackPanel> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type RadioTreeViewItem}"> 
      <StackPanel Orientation="Horizontal"> 
       <RadioButton></RadioButton> 
       <TextBlock Text="{Binding Path=Header}"></TextBlock> 
      </StackPanel> 
     </DataTemplate> 
     </StackPanel> 
    </HierarchicalDataTemplate> 
</TreeView.ItemTemplate> 

正確にどのようにデータをツリービューを「埋める」んList<TreeViewItem>

+0

このコードは機能しません(ビジュアルツリーは一度しか設定できません) –

+0

アイテムをツリーに割り当てる場所のコードを投稿してください。また、私はスタックパネル内の内側のデータテンプレートをラップしてもあなたはそれを行うでしょう – Emad

+0

<[your code]> –