By the way, I did something like this just a few days ago. In my application, the icon icon is added to the HierarchicalDataTemplate to those objects that behave like folders, I use a trigger to change the icon depending on whether the item was expanded or not, here is the corresponding XAML bit:
<HierarchicalDataTemplate DataType="{x:Type data:FeedComposite}" ItemsSource="{Binding Path=Children}"> <StackPanel Orientation="Horizontal" Margin="1"> <StackPanel.Children> <Image> <Image.Style> <Style BasedOn="{StaticResource IconImageStyleSmall}" TargetType="Image"> <Setter Property="Source" Value="{Binding Source={StaticResource Icon_FolderClosed}, Mode=OneTime}"/> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem}, Path=IsExpanded}" Value="True"> <Setter Property="Source" Value="{Binding Source={StaticResource Icon_FolderOpen}, Mode=OneTime}"/> </DataTrigger> </Style.Triggers> </Style> </Image.Style> </Image> <TextBlock Text="{Binding Title}"/> </StackPanel.Children> </StackPanel> </HierarchicalDataTemplate>
Where {StaticResource Icon_FolderOpen} and {StaticResource Icon_FolderClosed} are BitmapImages that contain icons for folder states. IconImageStyleSmall is a style that sets the MaxWidth and MaxHeight image to something suitable.
Edit: To achieve the goal.
<BitmapImage x:Key="Icon_FolderOpen" UriSource="pack://application:,,,/ImageResources/Icons/FolderOpen.ico" /> <BitmapImage x:Key="Icon_FolderClosed" UriSource="pack://application:,,,/ImageResources/Icons/FolderClosed.ico" /> <Style x:Key="IconImageStyleSmall" TargetType="Image"> <Setter Property="MaxWidth" Value="16"/> <Setter Property="MaxHeight" Value="16"/> <Setter Property="Margin" Value="1"/> </Style>
Icons used
HB
source share