Загрузка изображений в WPF из кода
должно быть, я читал много решений в интернете, но по какой-то идиотской причине я не могу заставить их работать.
У меня есть .jpg-изображение в папке Resources моего проекта, и изображение настроено на Build Action: Resource (не встроенный ресурс) и никогда не копировать в выходную папку. Мой образ не добавил к моим ресурсам.файл resx.
Я пытаюсь получить доступ к файлу так:
lResult = new BitmapImage(new Uri(@"pack://application:,,,/Resources/ImageMissing.jpg", UriKind.Absolute));
но это не говорит о том, что нет изображения там.
Это так просто, я чувствую себя очень глупо, но я просто не могу понять простую концепцию использования ресурсов.
спасибо.
6 ответов
Если вам нужно указать, что на ресурс, на который ссылаются, ссылаются из локальной сборки, тогда я думаю, что вы захотите включить "компонент". Например, у меня есть код, который загружает значок из ресурса, доступного из той же сборки, в которой находится мой код. Я пишу это:
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 пакета для ссылочных файлов ресурсов сборки может использоваться только с приложением: / / / authority. Например, в WPF не поддерживается следующее.
pack://siteoforigin:,,,/SomeAssembly;component/ResourceFile.xaml
вам нужна еще одна запятая там. Вот документация по URI типа "Pack" в WPF. Обратите внимание, что при использовании полномочий есть три запятые.
lResult = new BitmapImage(new Uri(@"pack://application:,,,/Resources/ImageMissing.jpg", UriKind.Absolute));
вам удалось переименовать файл (или папку) в обозревателе решений, а затем не очистить или перестроить приложение?
Если вы уверены, что имя в URI соответствует тому, что находится в обозревателе решений, попробуйте щелкнуть правой кнопкой мыши решение и выбрать "перестроить".
проблема в том, что изображение не было добавлено в ваш проект-включение его в файл ресурсов недостаточно.
щелкните правой кнопкой мыши проект > добавить существующий элемент > найдите и добавьте изображение.
затем все, что вам нужно сделать, это:
myImage = new BitmapImage(new Uri(@"ImageMissing.jpg", UriKind.RelativeOrAbsolute));
вероятно, вы создали эту вторую библиотеку как "библиотеку классов" вместо "пользовательской библиотеки 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)
)]
попробуйте это:
var icon = BitmapFrame.Create(Application.GetResourceStream(
new Uri("MyAppBitmap.jpg", UriKind.RelativeOrAbsolute)).Stream);