簡體   English   中英

DoubleAnimation / Storyboard完成兩次並重置動畫值

[英]DoubleAnimation / Storyboard completes twice and resets animation value

使用比例轉換對面板進行縮放時,應用程序需要將面板重置為其原始大小。 為此,一個重置按鈕將啟動一個雙重動畫,該動畫將比例轉換從其初始值動畫化為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方法確定該值設置為其原始值之后,因此我猜測我沒有正確配置情節提要或動畫。

顯然,情節提要的默認行為是一旦完成 (?)停止,便恢復為原始值。 因此,解決此問題的方法是在情節提要完成時將zoomSliderControl的值設置為所需值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM