我遇到了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);
}
答案 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秒,因此只有三分之一的动画会在停止之前运行。