基于Tag属性的WPF TreeView图像

时间:2018-04-08 07:38:46

标签: wpf xaml treeview

我正在尝试创建一个WPF树视图,它应该根据TreeViewItem的Tag property添加TreeviewItem(节点)前面的图像。我希望这可以使用此属性,因为我将让我的PowerShell脚本在执行期间动态创建treenodes。

这是我在WPF应用程序中使用的XAML:

<TreeView Name="MainTreeview1" Margin="10,248,10,151" Padding="-2,1,1,1">
  <TreeView.Resources>
    <Style TargetType="{x:Type TreeViewItem}">
      <Setter Property="HeaderTemplate">
        <Setter.Value>
          <DataTemplate>
            <StackPanel Orientation="Horizontal">
              <Image Name="TreeNodeIMG" 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="images\ImageForTag0.png"/>
                      </DataTrigger>
                      <DataTrigger Binding="{Binding Tag}" Value="1">
                        <Setter Property="Source" Value="images\ImageForTag1.png"/>
                      </DataTrigger>
                    </Style.Triggers>
                  </Style>
                </Image.Style>
              </Image>
              <TextBlock VerticalAlignment="Center" Text="{Binding}" Margin="5,0" />
            </StackPanel>
          </DataTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </TreeView.Resources>

  <TreeViewItem Header="TestWithIMG1" Tag="0"/>
  <TreeViewItem Header="TestWithIMG2" Tag="1"/>

</TreeView>

如果使用treeviewitem模板可以实现这一点,那么我也可以这么做,因为我可以轻松区分treenodes。

1 个答案:

答案 0 :(得分:0)

这是可能的,但您需要以不同方式定义绑定源,因为Tag不是DataContext的属性,它是TreeViewItem属性

<Style.Triggers>
  <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource AncestorType=TreeViewItem}}" 
               Value="0">
    <Setter Property="Source" Value="images\ImageForTag0.png"/>
  </DataTrigger>
  <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource AncestorType=TreeViewItem}}" 
               Value="1">
    <Setter Property="Source" Value="images\ImageForTag1.png"/>
  </DataTrigger>
</Style.Triggers>