I have tried to search related topics about this, and found out MediaElementand PictureBox being used for GIF icon.
Have tired implement by using MediaElements but it does not work.
XAML
<Grid><TreeView Name="tvMain" ItemsSource="{Binding Courses}" Height="300"><TreeView.ItemContainerStyle><Style TargetType="{x:Type TreeViewItem}"><Setter Property="IsExpanded" Value="{Binding ., Converter={StaticResource isExpandedConverter} ,Mode=TwoWay}"/><Setter Property="HorizontalContentAlignment" Value="Stretch" /><Setter Property="VerticalContentAlignment" Value="Stretch" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="TreeViewItem"><StackPanel><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="Auto" MinWidth="20" /><ColumnDefinition Width="*" /></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="Auto" /><RowDefinition /></Grid.RowDefinitions><ToggleButton IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press" Name="Expander"><ToggleButton.Style><Style TargetType="ToggleButton"><Setter Property="UIElement.Focusable" Value="false" /><Setter Property="FrameworkElement.Width" Value="16" /><Setter Property="FrameworkElement.Height" Value="16" /><Setter Property="Control.Template"><Setter.Value><ControlTemplate TargetType="ToggleButton"><Border Padding="5, 5, 5, 5" Background="#00FFFFFF" Width="16" Height="16"><Path Fill="#00FFFFFF" Stroke="#FF989898" Name="ExpandPath"><Path.Data><PathGeometry Figures="M0, 0L0, 6L6, 0z" /></Path.Data><Path.RenderTransform><RotateTransform Angle="135" CenterX="3" CenterY="3" /></Path.RenderTransform></Path></Border><ControlTemplate.Triggers><Trigger Property="UIElement.IsMouseOver" Value="True"><Setter TargetName="ExpandPath" Property="Shape.Stroke" Value="#FF1BBBFA" /><Setter TargetName="ExpandPath" Property="Shape.Fill" Value="#00FFFFFF" /></Trigger><Trigger Property="ToggleButton.IsChecked" Value="True"><Setter TargetName="ExpandPath" Property="UIElement.RenderTransform"><Setter.Value><RotateTransform Angle="180" CenterX="3" CenterY="3" /></Setter.Value></Setter><Setter TargetName="ExpandPath" Property="Shape.Fill" Value="#FF595959" /><Setter TargetName="ExpandPath" Property="Shape.Stroke" Value="#FF262626" /></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></ToggleButton.Style></ToggleButton><Border x:Name="Bd" HorizontalAlignment="Stretch" BorderThickness="{TemplateBinding Border.BorderThickness}" BorderBrush="{TemplateBinding Border.BorderBrush}" Padding="{TemplateBinding Control.Padding}" Background="{TemplateBinding Panel.Background}" SnapsToDevicePixels="True" Grid.Column="1"><ContentPresenter x:Name="PART_Header" Content="{TemplateBinding HeaderedContentControl.Header}" ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}" ContentStringFormat="{TemplateBinding HeaderedItemsControl.HeaderStringFormat}" ContentTemplateSelector="{TemplateBinding HeaderedItemsControl.HeaderTemplateSelector}" ContentSource="Header" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /></Border><ItemsPresenter x:Name="ItemsHost" Grid.Column="1" Grid.Row="1" /></Grid></StackPanel><ControlTemplate.Triggers><Trigger Property="TreeViewItem.IsExpanded" Value="False"><Setter TargetName="ItemsHost" Property="UIElement.Visibility" Value="Collapsed" /></Trigger><Trigger Property="ItemsControl.HasItems" Value="False"><Setter TargetName="Expander" Property="UIElement.Visibility" Value="Hidden" /></Trigger><Trigger Property="TreeViewItem.IsSelected" Value="True"><Setter TargetName="Bd" Property="Panel.Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /><Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" /></Trigger><MultiTrigger><MultiTrigger.Conditions><Condition Property="TreeViewItem.IsSelected" Value="True" /><Condition Property="Selector.IsSelectionActive" Value="False" /></MultiTrigger.Conditions><Setter TargetName="Bd" Property="Panel.Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" /><Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" /></MultiTrigger><Trigger Property="UIElement.IsEnabled" Value="False"><Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></TreeView.ItemContainerStyle><TreeView.Resources><Style TargetType="{x:Type TreeViewItem}"><Setter Property="HorizontalContentAlignment" Value="Stretch" /><Setter Property="VerticalContentAlignment" Value="Center" /></Style><HierarchicalDataTemplate DataType="{x:Type model:Course}" ItemsSource="{Binding Students}"><DockPanel LastChildFill="True"><Image Margin="3" Source="{Binding Status, Converter={StaticResource valueToImageConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /><TextBlock x:Name="txtName" Margin="3" Text="{Binding Name}" Foreground="Black" /></DockPanel><HierarchicalDataTemplate.Triggers><DataTrigger Binding="{Binding Status}" Value="0"><Setter TargetName="txtName" Property="Background" Value="Transparent" /></DataTrigger><DataTrigger Binding="{Binding Status}" Value="1"><Setter TargetName="txtName" Property="Background" Value="Yellow" /></DataTrigger><DataTrigger Binding="{Binding Status}" Value="2"><Setter TargetName="txtName" Property="Background" Value="Red" /></DataTrigger></HierarchicalDataTemplate.Triggers><HierarchicalDataTemplate.ItemTemplate><HierarchicalDataTemplate><DockPanel LastChildFill="True"><Image Margin="3" Source="{Binding Value.Status, Converter={StaticResource valueToImageConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /><TextBlock x:Name="txtName" Margin="3" Foreground="Black" Text="{Binding Value.Name}" ToolTip="{Binding Value.Tooltip}" /></DockPanel></HierarchicalDataTemplate></HierarchicalDataTemplate.ItemTemplate></HierarchicalDataTemplate></TreeView.Resources></TreeView><DockPanel LastChildFill="True" Width="200" Height="50" Visibility="{Binding Items.Count, ElementName=tvMain, Converter={StaticResource valueToVisibilityConverter}}"><Border Margin="5" BorderThickness="1" BorderBrush="Black" Background="LightGreen"><TextBlock TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Text="No Error" /></Border></DockPanel></Grid>
C# Code
public class ValueToImageConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { Status status = (Status)value; if (status == Status.Green) { return new BitmapImage(new Uri(@"\Images\Green-icon.png", UriKind.Relative)); } else if (status == Status.Red) { return new BitmapImage(new Uri(@"\Images\Red-icon.png", UriKind.Relative)); } else { return new BitmapImage(new Uri(@"\Images\Yellow-icon.png", UriKind.Relative)); } } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return null; } }