tags:

views:

1461

answers:

3

I'm having problems setting the source for images in my Wpf application. I have an Image where the source is bound to the SourceUri property of the DataContext object, like this:

<Image Source="{Binding SourceUri}"></Image>

Now, I don't know what to set on the SourceUri property of my object. Setting the complete absolute path ("c:/etc/image.jpg") it displays nicely, but obviously I want to set the relative path instead. My images are stored in a folder Resources which is in the same folder as my application folder. In the end these images might come from anywhere, so adding them to the project really isn't an option.

I've tried the path relative to the application folder, and relative to the working path (debug-folder). Also tried using the "pack://.." syntax without luck, but read that this would not be any point doing.

Any hints on what I should try?

+2  A: 

Perhaps you could make the SourceUri property of your DataContext object a bit cleverer, and determine what the application folder is, and return an absolute path based on that. For example:

public string SourceUri
{
    get
    {
        return Path.Combine(GetApplicationFolder(), "Resources/image.jpg");
    }
}
Mark Heath
Sure - that works - Thx! Couldn't find a good way to find the application folder though, so feels a bit hacky at the moment.. Is there a GetApplicationFolder() in .Net? Couldn't find one.. But shouldn't relative path references work somehow? And these will then be relative to the application root folder? No?
stiank81
try Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
Mark Heath
That gives me the same as the one I'm using, "Path.GetFullPath("."), but I guess the latter depends on the working folder. So going with your suggestion. I got some more issues around this, but I'll figure it out.. Thx for your attention!
stiank81
+1  A: 

Environment.CurrentDirectory will show you the folder the .exe is stored in (that is unless you manually set a .CurrentDirectory - but then we can assume you already know where it is).

Nick Udell
A: 

There's a handy method in System.IO.Path which can help with this:

return Path.GetFullPath("Resources/image.jpg");

This should return 'C:\Folders\MoreFolders\Resources\image.jpg' or whatever the full path is in your context. It will use the current working folder as the starting point.

Link to MSDN documentation on GetFullPath.

Holf