Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置WPF treeview触发器以在扩展上显示不同的图像_Wpf_Triggers_Treeview_Datatrigger_Hierarchicaldatatemplate - Fatal编程技术网

设置WPF treeview触发器以在扩展上显示不同的图像

设置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

我有一个wpf树视图,它显示各种类型的节点以及相应的图像,比如文件夹图像。最初,树及其节点以及相应的图像按预期显示。但是,当节点展开时,预期展开节点的图像应交换为展开图像。我正在尝试使用
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>