DoubleAnimation / Storyboard完成两次并重置动画值

时间:2009-11-24 10:01:21

标签: c# wpf animation

使用缩放变换缩放面板时,应用程序需要将面板重置回原始大小。为此,重置按钮启动一个双动画,动画缩放比例从它的起始值变为1,这意味着面板将具有原始值。

视觉上面板缩小到原始尺寸,但在动画结束后,故事板的完整事件被引发两次,并且一旦这两个事件都被提升,比例变换的值将被设置回它具有的值。在动画之前。

private void ResetButton_Click(object sender, RoutedEventArgs e)
{
    if (!isReseting)
    {
        isReseting = true;

        this.doubleAnimation = new DoubleAnimation(1, new Duration(new TimeSpan(0,0,0, 1)), FillBehavior.Stop);
        this.resetStoryboard = new Storyboard();
        resetStoryboard.Children.Add(doubleAnimation);
        Storyboard.SetTarget(doubleAnimation, zoomSliderControl);
        Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath(RangeBase.ValueProperty));

        resetStoryboard.RepeatBehavior = new RepeatBehavior(1);

        resetStoryboard.Completed += new EventHandler(ResetStoryboardCompleted);
        resetStoryboard.Begin();

    }
}

private void ResetStoryboardCompleted(object sender, EventArgs e)
{
    if (resetStoryboard != null)
    {
        //resetStoryboard.Stop(zoomSliderControl);
        //resetStoryboard.Remove(zoomSliderControl);
    }
    resetStoryboard = null;
    doubleAnimation = null;
    isReseting = false;

}

例如,如果Slider控件(名为zoomSliderControl)的值在动画之前为1.5,那么它会按预期动画回到1,但是一旦resetStoryBoard的已完成事件被提升两次,它将再次设置为1.5

我已经尝试调试应用程序,它就在第二个ResetStoryboardCompleted方法确定该值设置为其原始值之后,所以我猜测我没有正确配置故事板或动画。

1 个答案:

答案 0 :(得分:1)

显然,故事板的默认行为是在完成(?)停止后恢复为原始值。因此,解决此问题的方法是在故事板完成时将zoomSliderControl的值设置为所需的值。