我正在尝试创建一个执行以下操作的多部分计时器...
- 向下滑动画布对象。
- 在屏幕外更改对象。
- 向上滑动画布对象(到原始位置)。
这将由 Dispatcher 计时器每5秒触发一次,但我不确定如何让对象向上/向下滑动,因为我尝试为此使用循环导致应用程序锁定。
任何关于如何做到这一点的想法都会对我有很大的帮助,谢谢。
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。
xml:
<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>