Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Embedded images not showing when in a UserControl

I have an Image control that contains a path to an embedded image (build action 'resource').

<Image Source="Assets/images/image.png" Stretch="None" />

If I add that to a container in my MainPage.xaml the image appears fine. When having the same image in a UserControl as shown below, and then adding an instance of that UserControl on MainPage.xaml the image does not appear.

<UserControl x:Class="HomePage.Views.SimpleUserContol"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <Grid x:Name="LayoutRoot" >
        <Image Source="Assets/images/image.png" Stretch="None" />
    </Grid>
</UserControl>

Can anyone shed any light on why this happening and maybe point me in the direction of a solution.

Cheers, J

(I'm working in Silverlight but would think the same thing probably happens in WPF)

EDIT:

Setting

<Image Source="/Assets/images/image.png" Stretch="None" />

works fine when setting the build action to 'Content' however it doesn't work when using 'resource'. The problem is definatly it's relative position in the file structure as add ../ works fine. I'd still like a solution to get an image from the assembly if possible

like image 983
James Hay Avatar asked Oct 12 '09 11:10

James Hay


3 Answers

You have to reference it as a resource, not just the path. This is how it is done in a WPF application:

<Image Source="/MyAppName;component/images/image.png" Stretch="None" />

The original image is located in images/image.png

Note:
I have no experience in SilverLight, but you said it is probably similiar in WPF, so I suggest this...

like image 100
awe Avatar answered Nov 15 '22 13:11

awe


You're using a relative path to the image. If your UserControl is located in a subdirectory, the relative path is not valid anymore. You should use an absolute path like "/Assets/images/image.png", or "pack://application:,,,/Assets/images/image.png" (use this last version if your UserControl is going to be used by another assembly)

like image 37
Thomas Levesque Avatar answered Nov 15 '22 12:11

Thomas Levesque


If you needed to change its build type from Content to Resource, try building clean. I had everything exactly right (path to other project's resources, build type, et al.) yet it didn't work until I added a new image to the images folder, which perhaps cleared out the old statuses.

In fact, manually delete the bin and obj folders in the project where the image is.

like image 24
AndyClaw Avatar answered Nov 15 '22 14:11

AndyClaw