Quantcast
Channel: Windows Presentation Foundation (WPF) forum
Viewing all articles
Browse latest Browse all 18858

How to implement GIF icon in tree view

$
0
0

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;
        }
    }


Download Sample Project


Viewing all articles
Browse latest Browse all 18858

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>