Я только что некоторое время боролся с этой же проблемой, и я думаю, что частью того, что пошло не так в оригинале, было пропущенное слово «компонент».У меня, например, было
myBitmapImage.UriSource = new Uri(@"pack://application:,,,/MyApp;images/mona2.jpg");
, но должен иметь
... = new Uri(@"pack://application:,,,/MyApp;component/images/mona2.jpg");
Слово "компонент" не является частью имени пути, несмотря на его появление -- это строковый литерал, который должен быть там.Зачем?Кто-то думал, что это хорошая идея, наверное.
А для тех, кто борется с другой частью дела, как насчет "MyApp"?Это название Ассамблеи.Щелкните правой кнопкой мыши на имени вашего проекта, выберите «Свойства ...», и на вкладке «Приложение» вы увидите поле «Имя сборки:».
Если вам не хочется искать это (или беспокоиться о том, что это может измениться, нарушая ваш код), вы можете сделать это:
String appUri = @"pack://application:,,,/" +
System.Reflection.Assembly.GetEntryAssembly().GetName().Name + ";";
String path = appUri + "component/images/mona2.jpg";
myBitmapImage.UriSource = new Uri(path);
Не очень красивый код, я признаю- оно может быть явно сокращено - но, надеюсь, оно приведет вас туда, куда вам нужно.Не забудьте установить для свойства «Build» в вашем файле изображения значение «Resource»!