【发布时间】:2015-08-07 07:53:15
【问题描述】:
所以我的 TreeView 中有 3 个级别的节点:
- 单个根节点(应显示 Image1.png)
- 一些二级节点(应显示 Image2.png)
- 每个二级节点都有一些三级节点(应显示Image3.png)
我正在尝试使用DataTemplate 将显示图像动态分配给每个节点,具体取决于其级别。由于 WPF 中的级别不像 WinForms 中那样容易获得,我只是使用TreeViewItems 的Tag 属性来存储他们的级别。然后我在Style 之后写了这个来分配显示图像:
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Name="img" Width="20" Height="20" Stretch="Fill">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Tag}" Value="0">
<Setter Property="Source" Value="Icons\Image1.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding Tag}" Value="1">
<Setter Property="Source" Value="Icons\Image2.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<TextBlock VerticalAlignment="Center" Text="{Binding}" Margin="5,0" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
是的,你猜对了;它不起作用。有人可以确定问题出在哪里吗?还是我做错了?
【问题讨论】:
-
标签不是 TreeViewItem 的 DataContext 中对象的属性。您应该在
{Binding Tag}上设置一个RelativeSource。 -
@Clemens:我将其更改为
Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag}",但它仍然没有显示任何内容。
标签: wpf xaml treeview datatemplate datatrigger