Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

Работа с объектными (логическими) ресурсами

При построении приложения WPF часто приходится определять большой объем разметки XAML для использования во многих местах окна или возможно во множестве окон либо проектов. Например, пусть создана "безупречная" кисть с линейным градиентом, определение которой в разметке занимает 10 строк. Теперь кисть необходимо применить в качестве фонового цвета для каждого элемента

Button
в проекте, состоящем из 8 окон, т.е. всего получается 16 элементов
Button
.

Худшее,

что можно было бы предпринять — копировать и вставлять одну и ту же разметку XAML в каждый элемент управления
Button
. Очевидно, в итоге это могло бы стать настоящим кошмаром при сопровождении, т.к. всякий раз, когда нужно скорректировать внешний вид и поведение кисти, приходилось бы вносить изменения во многие места.

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

Взаимодействие с объектными ресурсами является крупной частью процесса разработки приложений WPF. Вы увидите, что объектные ресурсы могут быть намного сложнее, чем специальная кисть. Допускается определять анимацию на основе XAML, трехмерную визуализацию, специальный стиль элемента управления, шаблон данных, шаблон элемента управления и многое другое, и упаковывать каждую сущность в многократно используемый ресурс.

Роль свойства Resources

Как уже упоминалось, для применения в приложении объектные ресурсы должны быть помещены в подходящий объект словаря. Каждый производный от

FrameworkElement
класс поддерживает свойство
Resources
, которое инкапсулирует объект
ResourceDictionary
, содержащий определенные объектные ресурсы. Объект
ResourceDictionary
может хранить элементы любого типа,потому что оперирует экземплярами
System.Object
и допускает манипуляции из разметки XAML или процедурного кода.

В инфраструктуре WPF все элементы управления плюс элементы

Window
,
Page
(используемые при построении навигационных приложений) и
UserControl
расширяют класс
FrameworkElement
, так что почти все виджеты предоставляют доступ к
ResourceDictionary
. Более того, класс
Application
, хотя и не расширяет
FrameworkElement
, но поддерживает свойство с идентичным именем Resources, которое предназначено для той же цели.

Определение ресурсов уровня окна

Чтобы приступить к исследованию роли объектных ресурсов, создайте в Visual Studio новый проект приложения WPF по имени

ObjectResourcesApp
и замените
первоначальный элемент
Grid
горизонтально выровненным диспетчером компоновки
StackPanel
, внутри которого определите два элемента управления
Button
(чего вполне достаточно для пояснения роли объектных ресурсов):

<StackPanel Orientation="Horizontal">

<Button Margin="25" Height="200" Width="200" Content="OK" FontSize="20"/>

<Button Margin="25" Height="200" Width="200" Content="Cancel" FontSize="20"/>

</StackPanel>

Выберите кнопку OK и установите в свойстве

Background
специальный тип кисти с применением интегрированного редактора кистей (который обсуждался в главе 26). Кисть помещается внутрь области между дескрипторами
<Button>
и
</Button>
:

<Button Margin="25" Height="200" Width="200" Content="OK" FontSize="20">

<Button.Background>

<RadialGradientBrush>

<GradientStop Color="#FFC44EC4" Offset="0" />

<GradientStop Color="#FF829CEB" Offset="1" />

<GradientStop Color="#FF793879" Offset="0.669" />

</RadialGradientBrush>

</Button.Background>

</Button>

Чтобы разрешить использовать эту кисть также и в кнопке Cancel (Отмена), область определения

RadialGradientBrush
должна быть расширена до словаря ресурсов родительского элемента. Например, если переместить
RadialGradientBrush
в
StackPanel
, то обе кнопки смогут применять одну и ту же кисть, т.к. они являются дочерними элементами того же самого диспетчера компоновки. Что еще лучше, кисть можно было бы упаковать в словарь ресурсов самого окна, в результате чего ее могли бы свободно использовать все элементы содержимого окна.

Когда необходимо определить ресурс, для установки свойства

Resources
владельца применяется синтаксис "свойство-элемент". Кроме того, элементу ресурса назначается значение
х:Кеу
, которое будет использоваться другими частями окна для ссылки на объектный ресурс. Имейте в виду, что атрибуты
х:Key
и
х:Name
— не одно и то же! Атрибут
х:Name
позволяет получать доступ к объекту как к переменной-члену в файле кода, в то время как атрибут
х:Кеу
дает возможность ссылаться на элемент в словаре ресурсов.

Поделиться:
Популярные книги

Жалкая

Макинтайер Эмили
3. Долго и Несчастливо
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Жалкая

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Академия проклятий. Книги 1 - 7

Звездная Елена
Академия Проклятий
Фантастика:
фэнтези
8.98
рейтинг книги
Академия проклятий. Книги 1 - 7

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Измена

Рей Полина
Любовные романы:
современные любовные романы
5.38
рейтинг книги
Измена

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Сердце для стража

Каменистый Артем
5. Девятый
Фантастика:
фэнтези
боевая фантастика
9.20
рейтинг книги
Сердце для стража

Черный Маг Императора 11

Герда Александр
11. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Черный Маг Императора 11

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Жена фаворита королевы. Посмешище двора

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Жена фаворита королевы. Посмешище двора

Как я строил магическую империю 5

Зубов Константин
5. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 5

Блуждающие огни 2

Панченко Андрей Алексеевич
2. Блуждающие огни
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Блуждающие огни 2

Ратник

Ланцов Михаил Алексеевич
3. Помещик
Фантастика:
альтернативная история
7.11
рейтинг книги
Ратник

Маленькая слабость Дракона Андреевича

Рам Янка
1. Танцы на углях
Любовные романы:
современные любовные романы
эро литература
5.25
рейтинг книги
Маленькая слабость Дракона Андреевича