动态设置每个节点的图像
Dynamically set image of each node
所以我的 TreeView 中有 3 级节点:
- 单个根节点(应显示 Image1.png)
- 一些二级节点(应该显示Image2.png)
- 每个二级节点都有一些三级节点(应该显示Image3.png)
我正在尝试使用 DataTemplate
将显示图像动态分配给每个节点,具体取决于其 级别 。由于级别在 WPF 中不像在 WinForms 中那样容易获得,我只是使用 Tag
属性 of TreeViewItem
s 来存储它们的级别。然后我写了下面的 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>
是的,你猜对了;它不起作用。有人可以确定问题出在哪里吗?还是我做错了?
现在,您的{Binding Tag} 将尝试查找 TreeViewItem 的 DataContext 的标签 属性,而不是 DependencyProperty。因为,我猜,DataContext 中没有 Tag 属性,所以它不会工作。如果您在 VS 中查看输出 Windows,您应该会看到到处都是绑定错误。
您需要做的是将相关源添加到您的绑定中,以便它查看 TreeViewItem 而不是 DataContext。这是一个例子:
<DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}" Value="0">
所以我的 TreeView 中有 3 级节点:
- 单个根节点(应显示 Image1.png)
- 一些二级节点(应该显示Image2.png)
- 每个二级节点都有一些三级节点(应该显示Image3.png)
我正在尝试使用 DataTemplate
将显示图像动态分配给每个节点,具体取决于其 级别 。由于级别在 WPF 中不像在 WinForms 中那样容易获得,我只是使用 Tag
属性 of TreeViewItem
s 来存储它们的级别。然后我写了下面的 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>
是的,你猜对了;它不起作用。有人可以确定问题出在哪里吗?还是我做错了?
现在,您的{Binding Tag} 将尝试查找 TreeViewItem 的 DataContext 的标签 属性,而不是 DependencyProperty。因为,我猜,DataContext 中没有 Tag 属性,所以它不会工作。如果您在 VS 中查看输出 Windows,您应该会看到到处都是绑定错误。
您需要做的是将相关源添加到您的绑定中,以便它查看 TreeViewItem 而不是 DataContext。这是一个例子:
<DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}" Value="0">