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

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

Жанры

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

<BeginStoryboard>

<Storyboard>

<StringAnimationUsingKeyFrames RepeatBehavior="Forever"

Storyboard.TargetProperty="Content"

Duration="0:0:3">

<DiscreteStringKeyFrame Value="" KeyTime="0:0:0" />

<DiscreteStringKeyFrame Value="O" KeyTime="0:0:1" />

<DiscreteStringKeyFrame Value="OK" KeyTime="0:0:1.5" />

<DiscreteStringKeyFrame Value="OK!" KeyTime="0:0:2" />

</StringAnimationUsingKeyFrames>

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Button.Triggers>

</Button>

</StackPanel>

</Window>

Первым

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

Внутри элемента

StringAnimationUsingKeyFrames
определены четыре элемента
DiscreteStringKeyFrame
, которые изменяют свойство
Content
на протяжении двух секунд (длительность, установленная объектом
StringAnimationUsingKeyFrames
, составляет в сумме три секунды, поэтому между финальным символом
!
и следующим появлением
О
будет заметна небольшая пауза).

Теперь, когда вы получили некоторое представление о том, как строятся анимации в коде C# и разметке XAML, давайте выясним роль стилей WPF, которые интенсивно задействуют графику, объектные ресурсы и анимацию.

Роль стилей WPF

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

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

System.Windows.Style
. Класс
Style
имеет свойство по имени
Setters
, которое открывает доступ к строго типизированной коллекции объектов
Setter
. Именно объект
Setter
обеспечивает возможность определения пар "свойство-значение".

В дополнение к коллекции

Setters
класс
Style
также определяет несколько других важных членов, которые позволяют встраивать триггеры, ограничивать место применения стиля и даже создавать новый стиль на основе существующего (воспринимайте такой прием как "наследование стилей"). Ниже
перечислены наиболее важные члены класса
Style
:

Triggers
— открывает доступ к коллекции объектов триггеров, которая делает возможной фиксацию условий возникновения разнообразных событий в стиле;

BasedOn
— разрешает строить новый стиль на основе существующего;

TargetType
— позволяет ограничивать место применения стиля.

Определение и применение стиля

Почти в каждом случае объект

Style
упаковывается как объектный ресурс. Подобно любому объектному ресурсу его можно упаковывать на уровне окна или на уровне приложения, а также внутри выделенного словаря ресурсов (что замечательно, поскольку делает объект
Style
легко доступным во всех местах приложения). Вспомните, что цель заключается в определении объекта
Style
, который наполняет (минимум) коллекцию
Setters
набором пар "свойство-значение".

Давайте построим стиль, который фиксирует базовые характеристики шрифта элемента управления в нашем приложении. Начните с создания в Visual Studio нового проекта приложения WPF по имени

WpfStyles
. Откройте файл
App.xaml
и определите в нем следующий именованный стиль:

<Application.Resources>

<Style x:Key="BasicControlStyle">

<Setter Property="Control.FontSize" Value="14"/>

<Setter Property="Control.Height" Value="40"/>

<Setter Property="Control.Cursor" Value="Hand"/>

</Style>

</Application.Resources>

Обратите внимание, что объект

BasicControlStyle
добавляет во внутреннюю коллекцию три объекта
Setter
. Теперь примените получившийся стиль к нескольким элементам управления в главном окне. Из-за того, что стиль является объектным ресурсом, элементы управления, которым он необходим, по-прежнему должны использовать расширение разметки
{StackResource}
или
{DynamicResource}
для нахождения стиля. Когда они находят стиль, то устанавливают элемент ресурса в идентично именованное свойство
Style
. Замените стандартный элемент управления
Grid
следующей разметкой:

<StackPanel>

<Label x:Name="lblInfo" Content="This style is boring..."

Style="{StaticResource BasicControlStyle}" Width="150"/>

<Button x:Name="btnTestButton" Content="Yes, but we are reusing settings!"

Style="{StaticResource BasicControlStyle}" Width="250"/>

</StackPanel>

Если вы просмотрите элемент

Window
в визуальном конструкторе Visual Studio (или запустите приложение), то обнаружите, что оба элемента управления поддерживают те же самые курсор, высоту и размер шрифта.

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

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Вадбольский

Никитин Юрий Александрович
1. Вадбольский
Фантастика:
попаданцы
5.00
рейтинг книги
Вадбольский

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Таня Гроттер и магический контрабас

Емец Дмитрий Александрович
1. Таня Гроттер
Фантастика:
фэнтези
8.52
рейтинг книги
Таня Гроттер и магический контрабас

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Кодекс Крови. Книга ХI

Борзых М.
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХI

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Потусторонний. Книга 1

Погуляй Юрий Александрович
1. Господин Артемьев
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Потусторонний. Книга 1