【问题标题】:Storyboard duration cutting off animation故事板持续时间切断动画
【发布时间】:2010-11-20 16:49:54
【问题描述】:

我在 Silverlight 3 中遇到了一个非常奇怪的问题。我定义了一个扩展方法来围绕给定的 DoubleAnimation 创建故事板并播放该动画。我知道 Silverlight 中故事板的默认持续时间是 1 秒,但我想为我的动画更改它。但是,当我设置不同的持续时间时,不是将动画更改为在分配的时间内从开始移动到结束,动画只会播放我指定的持续时间然后停止。例如,如果我将某物从 0,0 移动到 0,10 并将持续时间设置为 0.3 秒,则该项目只会移动到 0.3。我无法想象这是设计使然。有什么想法吗?

这是我正在使用的代码。 ConfigureStoryboard 是围绕动画创建情节提要的地方。我删除了一些关于缓动函数的代码,使其更具可读性。

    public static void BeginAnimation(
        this Transform transform,
        DependencyProperty property,
        DoubleAnimation animation,
        EasingFunction function
    )
    {
        var storyboard = new Storyboard();
        ConfigureStoryboard(animation, storyboard, function);
        Storyboard.SetTarget(storyboard, transform);
        Storyboard.SetTargetProperty(
          storyboard,
          new PropertyPath(property));

        storyboard.Begin();
    }

    private static void ConfigureStoryboard(DoubleAnimation animation, Storyboard storyboard, EasingFunction function)
    {
        DoubleAnimation myAnimation = new DoubleAnimation();
        storyboard.Duration = animation.Duration;
        myAnimation.From = animation.From;
        myAnimation.To = animation.To;

        storyboard.Children.Add(myAnimation);
    }

【问题讨论】:

    标签: c# .net silverlight


    【解决方案1】:
        private static void ConfigureStoryboard(DoubleAnimation animation, Storyboard storyboard, EasingFunction function)
        {
            DoubleAnimation myAnimation = new DoubleAnimation();
            myAnimation.Duration = animation.Duration;
            myAnimation.From = animation.From;
            myAnimation.To = animation.To;
    
            storyboard.Children.Add(myAnimation);
        }
    

    动画需要有一个持续时间,否则它会获得默认值,并且由于故事板只会运行 0.3 秒,因此在停止之前只有三分之一的动画会运行。

    【讨论】:

    • 动画确实设置了持续时间。如果我忘记设置,情节提要只会运行 1 秒。将持续时间设置为
    • 您需要同时设置动画的持续时间和故事板的持续时间。如果您有一个 0.3 秒长的故事板,其中包含一个 1 秒长的动画,则只会播放动画的前 0.3 秒。
    • 完美!非常感谢!
    猜你喜欢
    • 2017-06-05
    • 2012-02-21
    • 2018-06-15
    • 2021-05-05
    • 2020-05-19
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多