Загрузка изображений в WPF из кода
Я должен был прочитать множество решений в Интернете, но по какой-то идиотской причине я не могу заставить их работать.
У меня есть изображение .jpg в папке "Ресурсы" моего проекта, и для изображения установлено значение "Создать действие: ресурс" (не встроенный ресурс) и никогда не копировать в папку вывода.
Мое изображение не добавлено в файл resources.resx.
Я пытаюсь получить доступ к файлу следующим образом:
lResult = new BitmapImage(new Uri(@"pack://application:,,,/Resources/ImageMissing.jpg", UriKind.Absolute));
Но это не говорит о том, что там нет изображения.
Это настолько фундаментально, что я чувствую себя действительно глупо, но я просто не могу понять простой концепции использования ресурсов.
Спасибо.
Ответы
Ответ 1
Если вам нужно указать, что ссылающийся ресурс ссылается на локальную сборку, я бы подумал, что вы хотите включить "компонент". Например, у меня есть код, который загружает значок из ресурса, доступного из той же сборки, в которой находится мой код. Я пишу это:
var SourceUri = new Uri("pack://application:,,,/MyCompany.MyProduct.MyAssembly;component/MyIcon.ico", UriKind.Absolute);
thisIcon = new BitmapImage(SourceUri);
Как отмечено в статье, доступной в http://msdn.microsoft.com/en-us/library/aa970069.aspx, следующие дополнительные примеры иллюстрируют использование "компонента":
В следующем примере показан URI пакета для файла ресурсов XAML, который находится в корне указанной папки проекта сборки.
pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
В следующем примере показан URI пакета для файла ресурсов XAML, который находится во вложенной папке указанной папки проекта сборки.
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
В следующем примере показан URI пакета для файла ресурсов XAML, который находится в корневой папке справочной папки проекта, связанной с версией, для версии.
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml
Обратите внимание, что синтаксис URI пакета для ссылочных файлов ресурсов сборок может использоваться только с полномочием application:///. Например, в WPF не поддерживается следующее.
pack://siteoforigin:,,,/SomeAssembly;component/ResourceFile.xaml
Ответ 2
Вам нужна еще одна запятая. Вот документация по Pack URI в WPF. Обратите внимание, что при использовании полномочий есть три запятой.
lResult = new BitmapImage(new Uri(@"pack://application:,,,/Resources/ImageMissing.jpg", UriKind.Absolute));
Ответ 3
Вам удалось переименовать файл (или папку) в обозревателе решений, а затем не очистить или не перестроить приложение?
Если вы уверены, что имя в вашем URI соответствует тому, что находится в обозревателе решений, попробуйте щелкнуть его правой кнопкой мыши и выбрать "Перестроить".
Ответ 4
Проблема заключается в том, что изображение не добавлено в ваш проект - в том числе в файле ресурсов недостаточно.
Щелкните правой кнопкой мыши свой проект > Добавить существующий элемент > Обзор и поиск и добавление изображения.
Затем вам нужно всего лишь:
myImage = new BitmapImage(new Uri(@"ImageMissing.jpg", UriKind.RelativeOrAbsolute));
Ответ 5
Вероятно, вы создали эту вторую библиотеку как "Библиотека классов" вместо "Пользовательская библиотека WPF". Создание xaml файлов или встраивание изображений как "Ресурсы" в библиотеке классов недостаточно для WPF, вероятно, в файле AssemblyInfo.cs, вероятно, отсутствует следующее:
Свойства/AssemblyInfo.cs
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
Ответ 6
Попробуйте следующее:
var icon = BitmapFrame.Create(Application.GetResourceStream(
new Uri("MyAppBitmap.jpg", UriKind.RelativeOrAbsolute)).Stream);