How to set Image Source in C# to XAML Static Resource programmatically?
Asked Answered
R

3

8

I have this ResourceDictionary in Main.xaml:

<Window.Resources>
    <ResourceDictionary>
        <BitmapImage x:Key="Customer" UriSource="Icons/customer.png"/>
        <BitmapImage x:Key="Project" UriSource="Icons/project.png"/>
        <BitmapImage x:Key="Task" UriSource="Icons/task.png"/>
    </ResourceDictionary>
</Window.Resources>

I initially set the image using:

<Image Name="TypeIcon" HorizontalAlignment="Left" VerticalAlignment="Center"
    Source="{StaticResource Customer}" Height="16" Width="16"/>

I'm trying to change TypeIcon's Source from Customer to Project in a C# method.

I've tried using:

TypeIcon.Source = "{StaticResource Project}";

But I get this error:

Cannot implicitly convert type string to System.Windows.Media.ImageSource

I've tried defining the image using new ImageSource(), but this doesn't work either.

How can I change the image's Source programmatically in C#?

Richy answered 4/9, 2013 at 22:52 Comment(0)
R
16

After much Googling, whilst writing this question, I figured out how to do it:

TypeIcon.Source = (ImageSource) Resources["Project"];
Richy answered 4/9, 2013 at 22:52 Comment(1)
What is what here? For "ImageSource" you also need to include "using System.Windows.Media;". But "Resources" is still not available in current context...Absentee
B
11

It is not for static resources but perhaps will be useful anyway... :)

i.e. how to set background for Grid dynamically

var myBrush = new ImageBrush();
            var image = new Image
                            {
                                Source = new BitmapImage(
                                    new Uri(
                                        "pack://application:,,,/YourAppName;component/Images/Boo.png"))
                            };
myBrush.ImageSource = image.Source;
MainGrid.Background = myBrush;

i.e. how to set icon of the app dynamically

var idleIco = new Image
            {
                Source = new BitmapImage(
                    new Uri(
                        "pack://application:,,,/YourAppName;component/Images/idle.ico"))
            };
SomeObjectYouAreUsingToSet.IconSource =idleIco.Source;
Biathlon answered 4/2, 2014 at 11:35 Comment(0)
S
3

You can use the ImageSourceConverter class to get what you want, for example:

img1.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("/Assets/check.png");
Signe answered 20/10, 2013 at 17:56 Comment(1)
The Media namespace is unavailable for universal apps System.Windows.Media.ImageSourceConverterCaravan

© 2022 - 2024 — McMap. All rights reserved.