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

на главную

Жанры

Язык программирования 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"

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

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

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

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

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

Великий перелом

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

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

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

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

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

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

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6