Язык программирования C#9 и платформа .NET5
Добавьте в программу еще одну анимацию, которая заставит кнопку после щелчка плавно становиться невидимой. Для начала создайте обработчик события
кнопкиClickс приведенным ниже кодом:btnSpinnerprivate void btnSpinner_OnClick(object sender, RoutedEventArgs e){var dblAnim=new DoubleAnimation{From=1.0,To=0.0};btnSpinner.BeginAnimation(Button.OpacityProperty, dblAnim);}В коде обработчика события
изменяется свойствоbtnSpinner_Click(), чтобы постепенно скрыть кнопку из виду. Однако в настоящий момент это затруднительно, потому что кнопка вращается слишком быстро. Как можно управлять ходом анимации? Ответ на вопрос ищите ниже.OpacityУправление темпом анимации
По умолчанию анимация будет занимать приблизительно одну секунду для перехода между значениями, которые присвоены свойствам
иFrom. Следовательно, кнопка располагает одной секундой, чтобы повернуться на 360 градусов, и в то же время в течение одной секунды она постепенно скроется из виду (после щелчка на ней).ТоОпределить другой период времени для перехода анимации можно посредством свойства
объекта анимации, которому присваивается объектDuration. Обычно промежуток времени устанавливается путем передачи объектаDurationконструктору классаTimeSpan. Взгляните на показанное далее изменение, в результате которого кнопке будет выделено четыре секунды на вращение:Durationprivate void btnSpinner_MouseEnter(object sender, MouseEventArgs e){if (!_isSpinning){_isSpinning=true;// Создать объект DoubleAnimation и зарегистрировать// его с событием Completed.var dblAnim=new DoubleAnimation();dblAnim.Completed +=(o, s)=> { _isSpinning=false; };<b> // На завершение поворота кнопке отводится четыре секунды.</b>dblAnim.Duration=new Duration(TimeSpan.FromSeconds(4));...}}Благодаря такой модификации у вас должен появиться шанс щелкнуть на кнопке во время ее вращения, после чего она плавно исчезнет.
На заметку! Свойство
классаBeginTimeтакже принимает объектAnimation. Вспомните, что данное свойство можно устанавливать для указания времени ожидания перед запуском анимационной последовательности.TimeSpanЗапуск в обратном порядке и циклическое выполнение анимации
За счет установки в
свойстваtrueобъектамAutoReverseуказывается о необходимости запуска анимации в обратном порядке по ее завершении. Например, если необходимо, чтобы кнопка снова стала видимой после исчезновения, можно написать следующий код:Animationprivate void btnSpinner_OnClick(object sender, RoutedEventArgs e){DoubleAnimation dblAnim=new DoubleAnimation{From=1.0,To=0.0};<b> // После завершения запустить в обратном порядке.</b>dblAnim.AutoReverse=true;btnSpinner.BeginAnimation(Button.OpacityProperty, dblAnim);}Если нужно, чтобы анимация повторялась несколько раз (или никогда не прекращалась), тогда можно воспользоваться свойством
, общим для всех классовRepeatBehavior. Передавая конструктору простое числовое значение, можно указать жестко закодированное количество повторений. С другой стороны, если передать конструктору объектAnimation, то можно задать время, в течение которого анимация должна повторяться. Наконец, чтобы выполнять анимацию бесконечно, свойствоTimeSpanможно установить вRepeatBehavior. Взгляните на следующие способы изменения поведения повтора одного из двух объектовRepeatBehavior.Forever, применяемых в примере:DoubleAnimation<b>// Повторять бесконечно.</b>dblAnim.RepeatBehavior=RepeatBehavior.Forever;<b>// Повторять три раза.</b>dblAnim.RepeatBehavior=new RepeatBehavior(3);<b>// Повторять в течение 30 секунд.</b>dblAnim.RepeatBehavior=new RepeatBehavior(TimeSpan.FromSeconds(30));Итак, исследование приемов добавления анимации к аспектам какого-то объекта с использованием кода C# и API-интерфейса анимации WPF завершено. Теперь посмотрим, как делать то же самое с помощью разметки XAML.
Реализация анимации в разметке XAML
Реализация анимации в разметке подобна ее реализации в коде, по крайней мере, для простых анимационных последовательностей. Когда необходимо создать более сложную анимацию, которая включает изменение значений множества свойств одновременно, объем разметки может заметно увеличиться. Даже в случае применения какого-то инструмента для генерирования анимации, основанной на разметке XAML, важно знать основы представления анимации в XAML, поскольку тогда облегчается задача модификации и настройки сгенерированного инструментом содержимого.