Несмотря на тот факт, что все классы поддерживают свойства То
From и By, они не получают их через виртуальные члены базового класса. Причина в том, что лежащие в основе типы, упакованные внутри указанных свойств, варьируются в широких пределах (целые числа, цвета, объекты Thickness и т.д.), и представление всех возможностей через единственный базовый класс привело бы к очень сложным кодовым конструкциям.В связи со сказанным может возникнуть вопрос: почему не использовались обобщения .NET для определения единственного обобщенного класса анимации с одиночным параметром типа (скажем, Animate
Роль базового класса Timeline
Хотя для определения виртуальных свойств То
From и By не использовался единственный базовый класс, классы Animation все же разделяют общий базовый класс — System.Windows.Media.Animation.Timeline. Данный тип предлагает набор дополнительных свойств, которые управляют темпом продвижения анимации (табл. 27.1).Реализация анимации в коде C#
Вы построите окно, содержащее элемент Button
SpinningButtonAnimationApp. Модифицируйте начальную разметку, как показано ниже (обратите внимание на обработку события MouseEnter кнопки): MouseEnter="btnSpinner_MouseEnter" Click="btnSpinner_OnClick"/>
В файле отделенного кода импортируйте пространство имен System.Windows.Media.Animation
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
};
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT