2017-02-26 123 views
-1

我有一個treeview填充運行時TreeViewItem。WPF treeview項目模板

所有父級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

究竟怎麼「補」的數據TreeView的你的樹嗎?請發佈此代碼。 – 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]> –