1

我正在尝试创建一个执行以下操作的多部分计时器...

  • 向下滑动画布对象。
  • 在屏幕外更改对象。
  • 向上滑动画布对象(到原始位置)。

这将由 Dispatcher 计时器每5秒触发一次,但我不确定如何让对象向上/向下滑动,因为我尝试为此使用循环导致应用程序锁定。

任何关于如何做到这一点的想法都会对我有很大的帮助,谢谢。

4

1 回答 1

1

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>
于 2012-11-28T01:11:01.957 回答