. Обратите внимание, что для этого объекта также обрабатывается событие
Completed
, где переключается булевская переменная уровня класса, которая применяется для того, чтобы выполняющаяся анимация не была сброшена в начало.
Затем создается объект
RotateTransform
, который подключается к свойству
RenderTransform
элемента управления
Button
(
btnSpinner
). Наконец, объект
RenderTransform
информируется о начале анимации его свойства
Angle
с использованием объекта
DoubleAnimation
. Реализация анимации в коде обычно осуществляется путем вызова метода
BeginAnimation
и передачи ему лежащего в основе свойства зависимости, к которому необходимо применить анимацию (вспомните, что по соглашению оно определено как статическое поле класса), и связанного объекта анимации.
Добавьте в программу еще одну анимацию, которая заставит кнопку после щелчка плавно становиться невидимой. Для начала создайте обработчик события
, чтобы постепенно скрыть кнопку из виду. Однако в настоящий момент это затруднительно, потому что кнопка вращается слишком быстро. Как можно управлять ходом анимации? Ответ на вопрос ищите ниже.
Управление темпом анимации
По умолчанию анимация будет занимать приблизительно одну секунду для перехода между значениями, которые присвоены свойствам
From
и
То
. Следовательно, кнопка располагает одной секундой, чтобы повернуться на 360 градусов, и в то же время в течение одной секунды она постепенно скроется из виду (после щелчка на ней).
Определить другой период времени для перехода анимации можно посредством свойства
Duration
объекта анимации, которому присваивается объект
Duration
. Обычно промежуток времени устанавливается путем передачи объекта
TimeSpan
конструктору класса
Duration
. Взгляните на показанное далее изменение, в результате которого кнопке будет выделено четыре секунды на вращение:
private void btnSpinner_MouseEnter(
object sender, MouseEventArgs e)
{
if (!_isSpinning)
{
_isSpinning=true;
//
Создать объект DoubleAnimation и зарегистрировать
Благодаря такой модификации у вас должен появиться шанс щелкнуть на кнопке во время ее вращения, после чего она плавно исчезнет.
На заметку! Свойство
BeginTime
класса
Animation
также принимает объект
TimeSpan
. Вспомните, что данное свойство можно устанавливать для указания времени ожидания перед запуском анимационной последовательности.
Запуск в обратном порядке и циклическое выполнение анимации
За счет установки в
true
свойства
AutoReverse
объектам
Animation
указывается о необходимости запуска анимации в обратном порядке по ее завершении. Например, если необходимо, чтобы кнопка снова стала видимой после исчезновения, можно написать следующий код:
Если нужно, чтобы анимация повторялась несколько раз (или никогда не прекращалась), тогда можно воспользоваться свойством
RepeatBehavior
, общим для всех классов
Animation
. Передавая конструктору простое числовое значение, можно указать жестко закодированное количество повторений. С другой стороны, если передать конструктору объект
TimeSpan
, то можно задать время, в течение которого анимация должна повторяться. Наконец, чтобы выполнять анимацию бесконечно, свойство
RepeatBehavior
можно установить в
RepeatBehavior.Forever
. Взгляните на следующие способы изменения поведения повтора одного из двух объектов
Итак, исследование приемов добавления анимации к аспектам какого-то объекта с использованием кода C# и API-интерфейса анимации WPF завершено. Теперь посмотрим, как делать то же самое с помощью разметки XAML.