Платформа.NET поддерживает инфраструктуру для работы с ресурсами – информационными фрагментами приложения, представляющими изображения, таблицы строк или иные данные. WPF расширяет базовые возможности.NET, предоставляя поддержку двух видов ресурсов – двоичных и логических.
Двоичные ресурсы
Двоичный ресурс в WPF – это традиционный ресурс с точки зрения платформы.NET. Обычно на этапе разработки двоичный ресурс представлен в виде файла в составе проекта. Такой файл может быть внедрён в сборку.NET или существовать в виде отдельного компонента, логически связанного со сборкой. Это поведение настраивается в Visual Studio в окне свойств файла. Установите свойство Build Action в значение Resource для внедрения ресурса, или в Content для закрепления связи между отдельным файлом ресурса и сборкой.
Для доступа к двоичным ресурсам в WPF обычно используется универсальный идентификатор ресурса в формате упакованного URI[4]. Упакованный URI имеет вид pack://контейнер/путь. Ниже представлены типичные примеры упакованных URI:
|
|
pack://application:,,,/img.png – ресурс img.png (изображение), внедрённый в текущую сборку, или файл img.png, ассоциированный со сборкой при компиляции.
pack://application:,,,/images/img.png – аналогично предыдущего URI, но в проекте Visual Studio файл img.png располагался в подкаталоге images.
pack://application:,,,/MyAssembly;component/img.png – ресурс img.png, внедрённый в сборку MyAssembly.dll.
images/img.png – относительный упакованный URI для ссылки на ресурс, связанный с текущей сборкой.
Для работы с URI служит класс System.Uri. Рассмотрим примеры связывания элемента Image с изображением, представленным в виде ресурса:
// этот объект описывает абсолютный URI
var absoluteUri = new Uri("pack://application:,,,/images/img.png");
// этот объект описывает относительный URI
var relativeUri = new Uri("images/img.png", UriKind.Relative);
// создадим элемент Image
// и свяжем его с bitmap-изображением, используя абсолютный URI
var picture = new Image();
picture.Source = new BitmapImage(absoluteUri);
В разметке XAML ссылки на ресурсы обычно задаются простыми строками, так как имеется стандартный конвертер из строки в объект URI:
<Image x:Name="picture" Source="images/img.png" />