WPF には、このようなものを処理するための優れたアニメーション クラスがあります。
簡単な例を次に示します (コード ビハインドのみ)。このメソッドを複数のアプリケーションで使用して、アニメーションをすばやく作成します。
/// <summary>
/// Creates a double animation.
/// </summary>
/// <param name="from">From position</param>
/// <param name="to">To position</param>
/// <param name="duration">The duration.</param>
/// <param name="delay">The delay.</param>
/// <param name="autoreverse">if set to <c>true</c> [autoreverse].</param>
/// <param name="repeat">The times to repeat.</param>
/// <returns>new double animation</returns>
public static DoubleAnimationUsingKeyFrames GetDoubleAnimation(double from, double to, int duration, int delay, bool autoreverse, int repeat)
{
var doubleanimation = new DoubleAnimationUsingKeyFrames();
doubleanimation.AutoReverse = autoreverse;
doubleanimation.IsAdditive = false;
Storyboard.SetDesiredFrameRate(doubleanimation, 30);
doubleanimation.IsCumulative = false;
doubleanimation.BeginTime = new TimeSpan(0, 0, 0, 0, delay);
doubleanimation.Duration = new Duration(TimeSpan.FromMilliseconds(duration));
doubleanimation.RepeatBehavior = repeat == -1 ? RepeatBehavior.Forever : new RepeatBehavior(repeat);
EasingDoubleKeyFrame start = new EasingDoubleKeyFrame(from, KeyTime.FromPercent(0));
EasingDoubleKeyFrame end = new EasingDoubleKeyFrame(to, KeyTime.FromPercent(1.0));
doubleanimation.KeyFrames.Add(start);
doubleanimation.KeyFrames.Add(end);
return doubleanimation;
}
使用法:
myCanvas.BeginAnimation(Canvas.TopProperty, GetDoubleAnimation(100, 400, 2000,0,false,1));
これにより、キャンバスが 2 秒間で 100 から 400 まで垂直方向にアニメーション化されます。
Xaml:
<Window x:Class="WpfApplication5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas>
<Canvas Name="myCanvas" Margin="77,102,191,102" Background="Black" Height="73" Width="113" />
</Canvas>
</Window>