故事板持续时间切断动画

时间:2009-08-18 18:07:33

标签: c# .net silverlight

我遇到了Silverlight 3的一个非常奇怪的问题。我已经定义了一个扩展方法来创建围绕给定DoubleAnimation的故事板并播放该动画。我知道Silverlight中故事板的默认持续时间是1秒,但我想为我的动画改变它。但是,当我设置不同的持续时间时,动画将在指定的持续时间内播放,而不是改变动画在指定的时间内从头到尾移动,然后停止。例如,如果我将某些东西从0,0移动到0,10并将持续时间设置为.3s,则该项目将仅移动到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);
    }

1 个答案:

答案 0 :(得分: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秒,因此只有三分之一的动画会在停止之前运行。