2011-04-05 53 views
8

WPF中的動畫提供布爾參數AutoReverse。是否可以調用AutoReverse = "true"實現的功能?WPF可以顯式調用動畫嗎?

我的目標是騰出一些麻煩的逆向動畫,尤其是備用的很多代碼。動畫結束後不能直接發生逆轉。


使用自動翻轉和真實的動畫只有反向動畫的例子,但根據需要,這並不工作 - 它仍然動畫的實際動畫和反向動畫。

 TranslateTransform transform = new TranslateTransform(0.0, 0.0); 
     myBox.RenderTransform = transform; 

     sb = new Storyboard(); 
     Duration dur = new Duration(TimeSpan.FromSeconds(0.5)); 
     DoubleAnimation shiftAnimation = new DoubleAnimation(100.0, dur); 
     shiftAnimation.AutoReverse = true; 
     sb.Children.Add(shiftAnimation); 
     Storyboard.SetTarget(shiftAnimation, myBox); 
     Storyboard.SetTargetProperty(shiftAnimation, new PropertyPath("RenderTransform.X")); 

     sb.Seek(TimeSpan.FromSeconds(0.5)); 
     sb.Begin(); 
+0

嘗試sb.Begin(this,true); 也許暫停它,然後尋找它,然後發送! 類似 'sb.Begin(this,true); sb.Pause(); sb.Seek(sb.Duration.TimeSpan); sb.Resume();' – Kerwindena 2011-04-05 15:12:02

回答

5

您可以將時鐘設置爲animationduration的100%,所以當動畫開始時,它會跳過非反轉部分!

編輯: 如果持續時間設置爲0:0:1.5,則將新的時間軸應用於您的動畫設置爲0:0:1.5。 Autoreverse必須設置爲開啓,然後您必須開始動畫。

編輯2:

TranslateTransform transform = new TranslateTransform(0.0, 0.0); 
myBox.RenderTransform = transform; 

sb = new Storyboard(); 
Duration dur = new Duration(TimeSpan.FromSeconds(0.5)); 
DoubleAnimation shiftAnimation = new DoubleAnimation(100.0, dur); 
shiftAnimation.AutoReverse = true; 
sb.Children.Add(shiftAnimation); 
Storyboard.SetTarget(shiftAnimation, myBox); 
Storyboard.SetTargetProperty(shiftAnimation, new PropertyPath("RenderTransform.X")); 

sb.Begin(); 
sb.Pause(); 
sb.Seek(sb.Duration.TimeSpan); 
sb.Resume(); 
+0

@Kerwindena:聽起來很合理。所以動作的路徑是:定義我自己的reverse()函數,它應用剛剛定義的動畫,但將AutoReverse和Timeclock設置爲100%? – 2011-04-05 13:09:11

+0

@platzhirsch:通常這應該工作。但是您不能將時鐘設置爲100%,只需將時鐘設置爲與動畫持續時間相同的值即可。祝您好運! – Kerwindena 2011-04-05 13:59:49

+0

@Kerwindena:你如何申請一個新的時間表?動畫是時間線,但我找不到聲明動畫時鐘的成員字段。 – 2011-04-05 14:01:37

1

我已經發現,下面的代碼很好地工作:

   private bool reverse=false; 
       TimeSpan animationDuration = TimeSpan.FromMilliseconds(500); 
       Storyboard storyboard1 = new Storyboard();      

       private void prepareStoryBoard(Button btn) 
       { 
       btn.RenderTransform = new CompositeTransform(); 
       DoubleAnimation animationShrink = new DoubleAnimation() { To = 0, 
        Duration =animationDuration , FillBehavior = FillBehavior.HoldEnd }; 
       storyboard1.Children.Add(animationShrink); 
       Storyboard.SetTarget(animationShrink, btn); 
       Storyboard.SetTargetProperty(animationShrink, 
        "(Button.RenderTransform).(CompositeTransform.ScaleX)"); 
       } 

       private void toggleAnimate() 
       { 
        if(reverse==false) 
        { 
         storyboard1.AutoReverse = false; 
         storyboard1.Begin(); 
         reverse=true; 
        } 
        else 
        { 
         storyboard1.AutoReverse = true; 
         storyboard1.Seek(animationDuration); 
         storyboard1.Resume(); 
         reverse = false; 
        } 
       } 

第一次toggleAnimate()被調用時,將動畫在法線方向執行時,所述第二次調用toggleAnimate()時,動畫被反轉。