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

на главную

Жанры

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

Среда Visual Studio позволяет переместить ресурс на более высокий уровень с применением соответствующего окна Properties. Чтобы сделать это, сначала понадобится идентифицировать свойство, имеющее сложный объект, который необходимо упаковать в виде ресурса (свойство

Background
в рассматриваемом примере). Справа от свойства находится небольшой квадрат, щелчок на котором приводит к открытию всплывающего меню. Выберите в нем пункт Convert to New Resource (Преобразовать в новый ресурс), как продемонстрировано на рис. 27.3.

Будет

запрошено имя ресурса (
myBrush
) и предложено указать, куда он должен быть помещен. Оставьте отмеченным переключатель This document (Этот документ), который выбирается по умолчанию (рис. 27.4).

В результате определение кисти переместится внутрь дескриптора

Window
.

Resources:

<Window.Resources>

<RadialGradientBrush x:Key="myBrush">

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

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

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

</RadialGradientBrush>

</Window.Resources>

Свойство

Background
элемента управления
Button
обновляется для работы с новым ресурсом:

<Button Margin="25" Height="200" Width="200" Content="OK"

FontSize="20" Background="{DynamicResource myBrush}"/>

Мастер создания ресурсов определил новый ресурс как динамический (

Dynamic Resource
). Динамические ресурсы рассматриваются позже, а пока поменяйте тип ресурса на статический (
StaticResource
):

<Button Margin="25" Height="200" Width="200" Content="OK"

FontSize="20" Background="{StaticResource myBrush}"/>

Чтобы оценить преимущества, модифицируйте свойство

Background
кнопки Cancel (Отмена), указав в нем тот же самый ресурс
StaticResource
, после чего можно будет видеть повторное использование в действии:

<Button Margin="25" Height="200" Width="200" Content="Cancel"

FontSize="20" Background="{StaticResource myBrush}"/>

Расширение разметки {StaticResource}

Расширение разметки

{StaticResource}
применяет ресурс только один раз (при
инициализации) ион остается "подключенным" к первоначальному объекту на протяжении всей времени жизни приложения. Некоторые свойства (вроде градиентных переходов) будут обновляться, но в случае создания нового элемента
Brush
, например, элемент управления не обновится. Чтобы взглянуть на такое поведение в действии, добавьте свойство
Name
и обработчик события
Click
к каждому элементу управления
Button
:

<Button Name="Ok" Margin="25" Height="200" Width="200" Content="OK"

FontSize="20" Background="{StaticResource myBrush}" Click="Ok_OnClick"/>

<Button Name="Cancel" Margin="25" Height="200" Width="200" Content="Cancel"

FontSize="20" Background="{StaticResource myBrush}" Click="Cancel_OnClick"/>

Затем поместите в обработчик события

Ok_OnClick
следующий код:

private void Ok_OnClick(object sender, RoutedEventArgs e)

{

// Получить кисть и внести изменение.

var b=(RadialGradientBrush)Resources["myBrush"];

b.GradientStops[1]=new GradientStop(Colors.Black, 0.0);

}

На заметку! Здесь для поиска ресурса по имени используется индексатор

Resources
. Тем не менее, имейте в виду, что если ресурс найти не удастся, тогда будет сгенерировано исключение времени выполнения. Можно также применять метод
TryFindResource
, который не приводит к генерации исключения, а просто возвращает
null
, если указанный ресурс не найден.

Запустив программу и щелкнув на кнопке ОК, вы заметите,что градиенты соответствующим образом изменяются. Добавьте в обработчик события

Cancel_OnClick
такой код:

private void Cancel_OnClick(object sender, RoutedEventArgs e)

{

// Поместить в ячейку myBrush совершенно новую кисть.

Resources["myBrush"]=new SolidColorBrush(Colors.Red);

}

Снова запустив программу и щелкнув на кнопке Cancel, вы обнаружите, что ничего не происходит!

Расширение разметки {DynamicResource}

Для свойства также можно использовать расширение разметки

DynamicResource
. Чтобы выяснить разницу, измените разметку для кнопки Cancel, как показано ниже:

<Button Name="Cancel" Margin="25" Height="200" Width="200" Content="Cancel"

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

Поступь Империи

Ланцов Михаил Алексеевич
7. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Поступь Империи

Мастер Разума

Кронос Александр
1. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
6.20
рейтинг книги
Мастер Разума

Сиротка 4

Первухин Андрей Евгеньевич
4. Сиротка
Фантастика:
фэнтези
попаданцы
6.00
рейтинг книги
Сиротка 4

Провинциал. Книга 7

Лопарев Игорь Викторович
7. Провинциал
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Провинциал. Книга 7

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Книга пяти колец

Зайцев Константин
1. Книга пяти колец
Фантастика:
фэнтези
6.00
рейтинг книги
Книга пяти колец

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Болотник 3

Панченко Андрей Алексеевич
3. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 3

Темный Охотник 3

Розальев Андрей
3. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник 3

Семья. Измена. Развод

Высоцкая Мария Николаевна
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья. Измена. Развод

Восход. Солнцев. Книга X

Скабер Артемий
10. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга X

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII