C# 故事板持续时间切断动画

C# 故事板持续时间切断动画,c#,.net,silverlight,C#,.net,Silverlight,我在Silverlight 3上遇到了一个非常奇怪的问题。我已经定义了一个扩展方法来围绕给定的动画创建故事板并播放该动画。我知道Silverlight中故事板的默认持续时间是1s,但我想更改动画的持续时间。但是,当我设置不同的持续时间时,动画将只在我指定的持续时间内播放,然后停止,而不是更改动画以在分配的时间内从开始移动到结束。例如,如果我将某个项目从0,0移动到0,10,并将持续时间设置为.3s,则该项目将只移动到0.3。我无法想象这是故意的。你知道这是怎么回事吗 这是我正在使用的代码。Con

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

这是我正在使用的代码。ConfigureStoryboard是围绕动画创建故事板的位置。我删除了一些关于easing函数的代码,以使其更具可读性

    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);
    }
动画需要有一个持续时间,否则它将获得默认值,并且由于故事板将仅运行0.3秒,因此在停止之前,只有三分之一的动画将运行


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

动画确实设置了持续时间。如果我忘记设置,故事板将只运行1秒。将“持续时间”设置为时,需要同时设置动画的持续时间和故事板的持续时间。如果你有一个0.3秒长的故事板,其中包含一个1秒长的动画,那么只会播放动画的前0.3秒。完美!非常感谢你!动画确实设置了持续时间。如果我忘记设置,故事板将只运行1秒。将“持续时间”设置为时,需要同时设置动画的持续时间和故事板的持续时间。如果你有一个0.3秒长的故事板,其中包含一个1秒长的动画,那么只会播放动画的前0.3秒。完美!非常感谢你!
    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);
    }