user589195
user589195

Reputation: 4250

Invalid URI: The format of the URI could not be determined - C#

Im trying to set the source of a resource dictionary in c# to a location of a folder within the project, but get the above error.

Could someone advise what the issue is please?

Heres the code:

myResourceDictionary.Source = new Uri("../Resources/Styles/Shared.xaml");

Please let me know if you need anymore information.

Upvotes: 6

Views: 28099

Answers (3)

TidyDev
TidyDev

Reputation: 3688

I was trying to set the background of a window to an ImageBrush.

Changing UriKind.Absolute to UriKind.Relative fixed the problem for me.

private void SetBackgroundImage()
{
    ImageBrush myBrush = new ImageBrush
    {
        ImageSource =
        new BitmapImage(new Uri("background.jpg", UriKind.Relative))
    };
    this.Background = myBrush;
}

Upvotes: 0

saurabhj
saurabhj

Reputation: 2498

I kept running into the same issue even after passing the UriKind.Relative argument. The weird bit was that some of the Uris to XAML pages were working using the method @Magnus suggested - but most of them would throw the:

The format of the URI could not be determined

exception.

Finally, I read up on Pack Uris for WPF applications which solved my problem a 100%.

I started using urls like this:

// ResourceFile is in the Root of the Application
myResourceDictionary.Source = 
    new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.RelativeOrAbsolute);

or

// ResourceFile is in the Subfolder of the Application
myResourceDictionary.Source = 
    new Uri("pack://application:,,,/SubFolder/ResourceFile.xaml", UriKind.RelativeOrAbsolute);

Hope this helps someone struggling with the same issues I was facing.

Upvotes: 4

Magnus Johansson
Magnus Johansson

Reputation: 28325

You have to use UriKind.Relative

myResourceDictionary.Source = new Uri("../Resources/Styles/Shared.xaml",  UriKind.Relative);

Upvotes: 11

Related Questions