在展开或折叠节点时,如何更改WPF树视图中节点的图像?

时间:2010-11-19 19:08:32

标签: c# wpf treeview

我的Xaml看起来像这样:

<TreeView Name="mainTree" ItemsSource="{Binding Folders}">
  <TreeView.Resources>
    <Style TargetType="{x:Type TreeViewItem}">
      <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
      <Style.Triggers>
        <!-- ??? -->
      </Style.Triggers>
    </Style>
    <HierarchicalDataTemplate DataType="{x:Type local:FolderNode}" ItemsSource="{Binding Children}" >
      <StackPanel Orientation="Horizontal" Name="myPanel">
        <Image x:Name="treeImg" Width="16" Height="16" Source="Images/vsfolder_closed.png"/>
        <TextBlock Text="{Binding Name}" />
      </StackPanel>
      <HierarchicalDataTemplate.Triggers>
        <!-- ??? -->
      </HierarchicalDataTemplate.Triggers>
    </HierarchicalDataTemplate>
  </TreeView.Resources>
</TreeView>

现在我想要的是如果展开treenode,图像源会更改为Images / vsfolder_open.png ......

最简单的方法是什么?

提前致谢!

1 个答案:

答案 0 :(得分:4)

将DataTrigger添加到HierarchicalDataTemplate。由于您在ViewModel中对Property IsExpanded进行双向绑定,因此您可以绑定它并使用TargetName,因为DataTemplate中的名称范围。

<HierarchicalDataTemplate.Triggers>
    <DataTrigger Binding="{Binding IsExpanded}" Value="True">
        <Setter TargetName="treeImg"
                Property="Source"
                Value="Images/vsfolder_open.png"/>
    </DataTrigger>
</HierarchicalDataTemplate.Triggers>