2017-02-26 91 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]> –