Чтобы проиллюстрировать применение типа дискретного ключевого кадра, предположим, что необходимо построить элемент управления Button
, который выполняет анимацию своего содержимого так, что на протяжении трех секунд появляется значение ОК!
по одному символу за раз. Представленная далее разметка находится в файле StringAnimation.xaml
. Ее можно скопировать в редактор Kaxaml и просмотреть результаты.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="100" Width="300"
WindowStartupLocation="CenterScreen" Title="Animate String Data!">
FontSize="16pt" FontFamily="Verdana" Width="100">
Storyboard.TargetProperty="Content"
Duration="0:0:3">
Первым делом обратите внимание, что для кнопки определяется триггер события, который обеспечивает запуск раскадровки при загрузке кнопки в память. Класс 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
и определите в нем следующий именованный стиль:
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT