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

на главную

Жанры

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

Свойства То, From и By

Во всех классах

Animation
определены следующие ключевые свойства, которые управляют начальным и конечным значениями, применяемыми для выполнения анимации:

То
— представляет конечное значение анимации;

From
— представляет начальное значение анимации;

By
— представляет общую величину, на которую анимация изменяет начальное значение.

Несмотря на тот факт, что все классы поддерживают свойства

То
,
From
и
By
, они не получают их через виртуальные члены базового класса. Причина в том, что лежащие в основе типы, упакованные внутри указанных свойств, варьируются в широких пределах (целые числа, цвета, объекты
Thickness
и т.д.), и представление всех возможностей через единственный базовый класс привело бы к очень сложным кодовым конструкциям.

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

Animate<T>
)? Опять-таки, поскольку существует огромное количество типов данных (цвета, векторы, целые числа, строки и т.д.), применяемых для анимации свойств зависимости, решение оказалось бы не настолько ясным, как можно было бы ожидать (не говоря уже о том, что XAML обеспечивает лишь ограниченную поддержку обобщенных типов).

Роль базового класса Timeline

Хотя для определения виртуальных свойств

То
,
From
и
By
не использовался единственный базовый класс, классы
Animation
все же разделяют общий базовый класс —
System.Windows.Media.Animation.Timeline
. Данный тип предлагает набор дополнительных свойств, которые управляют темпом продвижения анимации (табл. 27.1).

Реализация анимации в коде C#

Вы построите окно, содержащее элемент

Button
, который обладает довольно странным поведением: когда на него наводится курсор мыши, он вращается вокруг своего левого верхнего угла. Начните с создания в Visual Studio нового проекта приложения WPF по имени
SpinningButtonAnimationApp
. Модифицируйте начальную разметку, как показано ниже (обратите внимание на обработку события
MouseEnter
кнопки):

<Button x:Name="btnSpinner" Height="50" Width="100" Content="I Spin!"

MouseEnter="btnSpinner_MouseEnter" Click="btnSpinner_OnClick"/>

В файле отделенного кода импортируйте пространство имен

System.Windows.Media.Animation
и добавьте в файл C# следующий код:

private bool _isSpinning=false;

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.From=0;

dblAnim.To=360;

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

// его свойству RenderTransform кнопки.

var rt=new RotateTransform;

btnSpinner.RenderTransform=rt;

// Выполнить анимацию объекта RotateTransform.

rt.BeginAnimation(RotateTransform.AngleProperty, dblAnim);

}

}

private void btnSpinner_OnClick(

object sender, RoutedEventArgs e)

{

}

Первая крупная задача метода

btnSpinner_MouseEnter
связана с конфигурированием объекта
DoubleAnimation
, который будет начинать со значения
0
и заканчивать значением
360
. Обратите внимание, что для этого объекта также обрабатывается событие
Completed
, где переключается булевская переменная уровня класса, которая применяется для того, чтобы выполняющаяся анимация не была сброшена в начало.

Затем создается объект

RotateTransform
, который подключается к свойству
RenderTransform
элемента управления
Button
(
btnSpinner
). Наконец, объект
RenderTransform
информируется о начале анимации его свойства
Angle
с использованием объекта
DoubleAnimation
. Реализация анимации в коде обычно осуществляется путем вызова метода
BeginAnimation
и передачи ему лежащего в основе свойства зависимости, к которому необходимо применить анимацию (вспомните, что по соглашению оно определено как статическое поле класса), и связанного объекта анимации.

Добавьте в программу еще одну анимацию, которая заставит кнопку после щелчка плавно становиться невидимой. Для начала создайте обработчик события

Click
кнопки
btnSpinner
с приведенным ниже кодом:

private void btnSpinner_OnClick(

object sender, RoutedEventArgs e)

{

var dblAnim=new DoubleAnimation

{

From=1.0,

To=0.0

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

Бастард Императора

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

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

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 1

Имя нам Легион. Том 7

Дорничев Дмитрий
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 7

Измена. Вторая жена мужа

Караева Алсу
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Вторая жена мужа

Буря империи

Сай Ярослав
6. Медорфенов
Фантастика:
аниме
фэнтези
фантастика: прочее
эпическая фантастика
5.00
рейтинг книги
Буря империи

Пенсия для морского дьявола

Чиркунов Игорь
1. Первый в касте бездны
Фантастика:
попаданцы
5.29
рейтинг книги
Пенсия для морского дьявола

На изломе чувств

Юнина Наталья
Любовные романы:
современные любовные романы
6.83
рейтинг книги
На изломе чувств

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Сирота

Шмаков Алексей Семенович
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Сирота

Законы Рода. Том 9

Flow Ascold
9. Граф Берестьев
Фантастика:
городское фэнтези
попаданцы
аниме
дорама
фэнтези
фантастика: прочее
5.00
рейтинг книги
Законы Рода. Том 9

Красноармеец

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

Огненный князь 4

Машуков Тимур
4. Багряный восход
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 4

Начальник милиции. Книга 5

Дамиров Рафаэль
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 5

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор