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

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

Жанры

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

};

btnSpinner.BeginAnimation(Button.OpacityProperty, dblAnim);

}

В коде обработчика события

btnSpinner_Click
изменяется свойство
Opacity
, чтобы постепенно скрыть кнопку из виду. Однако в настоящий момент это затруднительно, потому что кнопка вращается слишком быстро. Как можно управлять ходом анимации? Ответ на вопрос ищите ниже.

Управление темпом анимации

По умолчанию анимация будет занимать приблизительно одну секунду для перехода

между значениями, которые присвоены свойствам
From
и
То
. Следовательно, кнопка располагает одной секундой, чтобы повернуться на 360 градусов, и в то же время в течение одной секунды она постепенно скроется из виду (после щелчка на ней).

Определить другой период времени для перехода анимации можно посредством свойства

Duration
объекта анимации, которому присваивается объект
Duration
. Обычно промежуток времени устанавливается путем передачи объекта
TimeSpan
конструктору класса
Duration
. Взгляните на показанное далее изменение, в результате которого кнопке будет выделено четыре секунды на вращение:

private void btnSpinner_MouseEnter(

object sender, MouseEventArgs e)

{

if (!_isSpinning)

{

_isSpinning=true;

// Создать объект DoubleAnimation и зарегистрировать

// его с событием Completed.

var dblAnim=new DoubleAnimation;

dblAnim.Completed +=(o, s)=> { _isSpinning=false; };

// На завершение поворота кнопке отводится четыре секунды.

dblAnim.Duration=new Duration(TimeSpan.FromSeconds(4));

...

}

}

Благодаря такой модификации у вас должен появиться шанс щелкнуть на кнопке во время ее вращения, после чего она плавно исчезнет.

На заметку! Свойство

BeginTime
класса
Animation
также принимает объект
TimeSpan
. Вспомните, что данное свойство можно устанавливать для указания времени ожидания перед запуском анимационной последовательности.

Запуск в обратном порядке и циклическое выполнение анимации

За счет установки в

true
свойства
AutoReverse
объектам
Animation
указывается о необходимости запуска анимации в обратном порядке по ее завершении. Например, если необходимо, чтобы кнопка снова стала видимой после исчезновения, можно написать следующий код:

private void btnSpinner_OnClick(object sender, RoutedEventArgs e)

{

DoubleAnimation dblAnim=new DoubleAnimation

{

From=1.0,

To=0.0

};

// После завершения запустить в обратном порядке.

dblAnim.AutoReverse=true;

btnSpinner.BeginAnimation(Button.OpacityProperty, dblAnim);

}

Если

нужно, чтобы анимация повторялась несколько раз (или никогда не прекращалась), тогда можно воспользоваться свойством
RepeatBehavior
, общим для всех классов
Animation
. Передавая конструктору простое числовое значение, можно указать жестко закодированное количество повторений. С другой стороны, если передать конструктору объект
TimeSpan
, то можно задать время, в течение которого анимация должна повторяться. Наконец, чтобы выполнять анимацию бесконечно, свойство
RepeatBehavior
можно установить в
RepeatBehavior.Forever
. Взгляните на следующие способы изменения поведения повтора одного из двух объектов
DoubleAnimation
, применяемых в примере:

// Повторять бесконечно.

dblAnim.RepeatBehavior=RepeatBehavior.Forever;

// Повторять три раза.

dblAnim.RepeatBehavior=new RepeatBehavior(3);

// Повторять в течение 30 секунд.

dblAnim.RepeatBehavior=new RepeatBehavior(TimeSpan.FromSeconds(30));

Итак, исследование приемов добавления анимации к аспектам какого-то объекта с использованием кода C# и API-интерфейса анимации WPF завершено. Теперь посмотрим, как делать то же самое с помощью разметки XAML.

Реализация анимации в разметке XAML

Реализация анимации в разметке подобна ее реализации в коде, по крайней мере, для простых анимационных последовательностей. Когда необходимо создать более сложную анимацию, которая включает изменение значений множества свойств одновременно, объем разметки может заметно увеличиться. Даже в случае применения какого-то инструмента для генерирования анимации, основанной на разметке XAML, важно знать основы представления анимации в XAML, поскольку тогда облегчается задача модификации и настройки сгенерированного инструментом содержимого.

На заметку! В подкаталоге

XamlAnimations
внутри
Chapter_27
есть несколько файлов XAML. Скопируйте их содержимое в редактор Kaxaml, чтобы просмотреть результаты.

Большей частью создание анимации подобно всему тому, что вы уже видели: по-прежнему производится конфигурирование объекта

Animation
, который затем ассоциируется со свойством объекта. Тем не менее, крупное отличие связано с тем, что разметка XAML не является дружественной к вызовам методов. В результате вместо вызова
BeginAnimation
используется раскадровка как промежуточный уровень.

Давайте рассмотрим полный пример анимации, определенной в терминах XAML, и подробно ее проанализируем. Приведенное далее определение XAML будет отображать окно, содержащее единственную метку. После того как объект

Label
загрузился в память, он начинает анимационную последовательность, во время которой размер шрифта увеличивается от 12 до 100 точек за период в четыре секунды. Анимация будет повторяться столько времени, сколько объект остается загруженным в память. Разметка находится в файле
GrowLabelFont.xaml
, так что его содержимое необходимо скопировать в редактор Kaxaml, нажать клавишу <F5> и понаблюдать за поведением.

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

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Чехов. Книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
альтернативная история
5.00
рейтинг книги
Чехов. Книга 3

Последний попаданец 9

Зубов Константин
9. Последний попаданец
Фантастика:
юмористическая фантастика
рпг
5.00
рейтинг книги
Последний попаданец 9

Серые сутки

Сай Ярослав
4. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Серые сутки

Ты нас предал

Безрукова Елена
1. Измены. Кантемировы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты нас предал

Кодекс Охотника. Книга XXIII

Винокуров Юрий
23. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXIII

На границе империй. Том 7. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 7. Часть 4

Нефилим

Демиров Леонид
4. Мания крафта
Фантастика:
фэнтези
боевая фантастика
рпг
7.64
рейтинг книги
Нефилим

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

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

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

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

Солдат Империи

Земляной Андрей Борисович
1. Страж
Фантастика:
попаданцы
альтернативная история
6.67
рейтинг книги
Солдат Империи

Дурашка в столичной академии

Свободина Виктория
Фантастика:
фэнтези
7.80
рейтинг книги
Дурашка в столичной академии

Сиротка

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

Сумеречный стрелок 7

Карелин Сергей Витальевич
7. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок 7