В любой WPF-проект можно добавить анимацию двумя способами: программно, в коде C#, или с помощью XAML. Рассмотрим оба варианта.
Анимация в C#
Создадим простую анимацию для кнопки с именем rectButton.
Подключим необходимую библиотеку:
using System.Windows.Media.Animation;
Создадим объект DoubleAnimation:
DoubleAnimation buttonAnimation = new DoubleAnimation();
Установим параметры: начальное значение (From), конечное (To) и длительность (Duration):
buttonAnimation.From = 0;
buttonAnimation.To = 450; // Ширина кнопки в пикселях
buttonAnimation.Duration = TimeSpan.FromSeconds(3); // Длительность в секундах
Применим анимацию к кнопке методом BeginAnimation:
rectButton.BeginAnimation(Button.WidthProperty, buttonAnimation);
Этот код плавно увеличивает ширину rectButton от 0 до 450 пикселей за 3 секунды.
Анимация в XAML
Создадим аналогичную анимацию в XAML для кнопки «Войти в кабинет» (authButton) в окне AuthWindow.
Добавим анимацию перед элементом Grid:
<Window.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<Storyboard.TargetProperty>
Width
</Storyboard.TargetProperty>
<Storyboard.TargetName>
authButton
</Storyboard.TargetName>
<DoubleAnimation
From="0"
To="450"
AutoReverse="True"
RepeatBehavior="3x"
Duration="0:0:3"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Window.Triggers>
Эта анимация запускается при загрузке окна. AutoReverse="True" обеспечивает обратное воспроизведение, RepeatBehavior="3x" — повторение трижды, а Duration="0:0:3" задаёт длительность в 3 секунды.
RepeatBehavior может принимать значение Forever для бесконечного повтора. Обратите внимание на разницу между указанием числа повторов (например, «3x») и общей длительности в RepeatBehavior. Первое задаёт количество циклов, второе — общее время воспроизведения.
Оба метода позволяют создавать анимации в WPF. Выбор между C# и XAML зависит от сложности анимации и предпочтений разработчика. Простые анимации проще реализовать в C#, а сложные, связанные с дизайном, — в XAML.