设置WPF treeview触发器以在扩展上显示不同的图像
我有一个wpf树视图,它显示各种类型的节点以及相应的图像,比如文件夹图像。最初,树及其节点以及相应的图像按预期显示。但是,当节点展开时,预期展开节点的图像应交换为展开图像。我正在尝试使用设置WPF treeview触发器以在扩展上显示不同的图像,wpf,triggers,treeview,datatrigger,hierarchicaldatatemplate,Wpf,Triggers,Treeview,Datatrigger,Hierarchicaldatatemplate,我有一个wpf树视图,它显示各种类型的节点以及相应的图像,比如文件夹图像。最初,树及其节点以及相应的图像按预期显示。但是,当节点展开时,预期展开节点的图像应交换为展开图像。我正在尝试使用hierarchycaldatatemplate触发器来设置此设置 触发器的设置是否应不同? 这棵树看起来像: (Folder Image) Solutions (SolutionsViewModel) --(Solution Image) Solution 1 (Solution) --(Solution Im
hierarchycaldatatemplate
触发器来设置此设置
触发器的设置是否应不同?
这棵树看起来像:
(Folder Image) Solutions (SolutionsViewModel)
--(Solution Image) Solution 1 (Solution)
--(Solution Image) Solution 2 (Solution)
(Folder Image) Conventions (ConventionsViewModel)
树视图中主要节点的xaml(主题为空):
可能与此相关
在回答我链接的问题时,我会通过RelativeSource
绑定在图像中进行触发,您可以将其重构为一种样式,这样就不会有所有冗余代码
可能您可以使用DynamicResources向每个图像控件提供这两个图像,或者您可以对图像进行子类Image
,或者创建一个提供属性的UserControl
DynamicSource方法:
<TreeView.Resources>
<Style x:Key="ExpandingImageStyle" TargetType="{x:Type Image}">
<Setter Property="Source" Value="{DynamicResource Icon_Closed}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem}, Path=IsExpanded}" Value="True">
<Setter Property="Source" Value="{DynamicResource Icon_Open}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TreeView.Resources>
为完整起见,使用
HierarchycalDataTemplate
的原始设置只需使用相对资源
绑定即可触发(如HB的回答所示),例如:
<HierarchicalDataTemplate DataType="{x:Type svm:SolutionsViewModel}" ItemsSource="{Binding Items, Mode=OneWay}">
<StackPanel Style="{StaticResource TreeViewItemStackPanelStyle}">
<Image x:Name="nodeImg" Style="{StaticResource IconImageStyleSmall}" Source="{StaticResource Icon_FolderClosed}" />
<TextBlock Style="{StaticResource TreeViewItemTextStyle}" />
</StackPanel>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem}, Path=IsExpanded}" Value="True">
<Setter TargetName="nodeImg" Property="Source" Value="{Binding Source={StaticResource Icon_FolderOpen}, Mode=OneTime}"/>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
下面是一个示例图像,在TreeView
中展开时有不同的图像:
<!-- Example usage -->
<HierarchicalDataTemplate DataType="{x:Type obj:Employee}">
<StackPanel Orientation="Horizontal">
<Image Style="{StaticResource ExpandingImageStyle}">
<Image.Resources>
<BitmapImage x:Key="Icon_Closed" UriSource="Images/FolderClosed.ico"/>
<BitmapImage x:Key="Icon_Open" UriSource="Images/FolderOpen.ico"/>
</Image.Resources>
</Image>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type svm:SolutionsViewModel}" ItemsSource="{Binding Items, Mode=OneWay}">
<StackPanel Style="{StaticResource TreeViewItemStackPanelStyle}">
<Image x:Name="nodeImg" Style="{StaticResource IconImageStyleSmall}" Source="{StaticResource Icon_FolderClosed}" />
<TextBlock Style="{StaticResource TreeViewItemTextStyle}" />
</StackPanel>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem}, Path=IsExpanded}" Value="True">
<Setter TargetName="nodeImg" Property="Source" Value="{Binding Source={StaticResource Icon_FolderOpen}, Mode=OneTime}"/>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>