WPF | Статические и динамические ресурсы

Всем привет! На просторах интернета мало информации о применении статических и динамического использования ресурсов, особенное примеров с Image.

Однако StaticResource и DynamicResource достаточно просто использовать, а самое главное, это очень сильно сокращает код, так как основная логика происходящего на загрузку и использования находится в Xaml разметке. Один раз подключив ресурсы к компоненту, мы можем менять или привязать их к нему.

В одном из проектов мне надо было использовать для загрузки в Image динамическое изменения изображения. К моему удивлению, в интернете я не нашел, именно оптимального подхода в моем вопросе. По этому я покажу подробно то как это сделал я.

Добавляем изображения в параметры проекта.

Первым делом нам надо будет найти 5 изображений формата jpg. Для просто ты понимания, я советую делать в точности так же как я. Я дал всем изображения имена 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg

Первое изображения имеет пустой фон, то есть на нем нет никакого изображения так такового, а только белый холст. Остальные изображения в моем случаи имеют, фотографии водопадов. После добавления в проект у вас должно выглядеть так же как у меня.

Изменения свойств изображения.

Теперь нам надо выделить фаил изображения в Обозреватель решений, и выбрать Свойства. В окне свойств в пункте Действие при сборке выбрать из выпадающего списка Resource. Выглядеть все это должно так же как у меня.

То же самое делаем со всеми остальными изображениями. После этого необходимо зайти в меню и выбрать Сборка>Очистка решений и Сборка>Пересобрать решение

Работаем с App.xaml

Основная задача данного файла состоит в определении ресурсов, общих для приложения. Поэтому тут по умолчанию определен пустой элемент Application.Resources, в который, собственно, и помещаются ресурсы. Что мы с вами и сделаем, вставим следующий код:

Будьте внимательны, так как у меня названия проекта может отличаться от вашего, потому рекомендую копировать только блок и его содержимого  <Application.Resources>

Внутри блока помещаем BitmapImage задаем ключи к каждому из изображений в моем случаи это imgRes1 imgRes2 итд.

В UriSource=»/Resources/1.jpg» указываем путь к нашему изображению.

На этом с работой в файле App.xaml заканчиваем.

Работаем с MainWindow.xaml

В основной разметке впишем следующий код:

 

В коде разметки MainWindow.xaml мы добавили две Конопки и компонент Image внутри его блока задали имя img и сделали динамическую привязку к ресурсам Source=»{DynamicResource imgRes1}» . Если бы мы изменили на статичный ресурс таким образом Source=»{StaticResource imgRes1}» то дальше мы бы не смогли менять изображения, оно было бы статичным.

Перейдем непосредственно основной логике программы где свяжем наши кнопки для изменения изображения.

class MainWindow

Приведу сразу полный код, что бы вас не путать, и разберем его по пунктам ниже.

В коде я оставил исчерпывающие комментарии к нему. Но хотел акцентировать внимание на том от куда мы подгружаем ресурсы и откуда.

В данной строке мы

Мы используем и работаем непосредственно с ресурсами из файла App.xaml То есть мы обращаемся по ключу imgRes1 и сохраняем в него новый ресурс, в нашем случаи imgRes1 при нажатии кнопки Вперед сохранит изображения из imgRes2. Но весь процесс будет происходить в App.xaml. Однако если изменить часть кода таким образом.

То выборки ресурса будет произведено из файла App.xaml а сохранения уже произойдет в файле Windows.xaml

И многие делаю ошибку следующего образом

 

Мы пытаемся взять ресурс из файла MainWindows.xaml и использовать его там же. Но ресурса изображения там нет. А соответственно никаких изменений не произойдет.

Окончательный вариант работы нашей программы выглядит таким образом.

Обновлено: 26.02.2021 — 12:30

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.