2011-04-05 16 views
8

WPF'deki animasyonlar, AutoReverse boolean parametresini sağlar. AutoReverse = "true" tarafından uygulanan işlevselliğe bir çağrı yapmak mümkün mü?WPF Animasyon tersine açık bir şekilde çağrılabilir mi?

Amacım, bazı zahmetli ters animasyonlar ve özellikle de bir sürü kod yedeklemektir. Animasyon bittikten sonra, doğrudan ters gerçekleşmemelidir.


sadece ters animasyon animasyon AutoReverse ve doğru kullanım örneği, ancak gerekli olarak çalışmaz - hala mevcut animasyon ve ters animasyon canlandırır.

 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'i deneyin (this, true); ve belki de duraklatmak ve onu aramak ve daha sonra yeniden başlatmak için! 'sb.Begin (bu, true); sb.Pause(); sb.Seek (sb.Duration.TimeSpan); sb.Resume(); ' – Kerwindena

cevap

5

Eğer animasyon başladığında bu yüzden, bu olmayan ters bölümünü atlayacak animationduration% 100'üne timeclock ayarlayabilirsiniz!

Düzenleme: Süre, 0: 0: 1.5 olarak ayarlandığında, animasyonunuza 0: 0: 1.5 olarak ayarlanmış yeni bir zaman çizelgesi uygularsınız. Autoreverse açık olarak ayarlanmalı ve sonra animasyonu başlatmak zorundasınız.

Düzenleme 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: Bu inanılmaz derecede mantıklı geliyor. Bu yüzden eylemin yolu: Tanımlanmış olan animasyonu uygulayan kendi ters() işlevimi tanımla ancak AutoReverse ve Timeclock'u% 100 olarak ayarladı mı? –

+0

@platzhirsch: normalde bu işe yarar. fakat timeclock'u% 100'e ayarlayamazsınız, sadece timeclock'u animasyonun süresiyle aynı değere ayarlayınız ... İyi Şanslar! – Kerwindena

+0

@Kerwindena: Yeni bir zaman çizelgesini nasıl uygularsınız? Animasyon bir zaman çizelgesidir, ancak animasyon saatini bildiren bir üye alanı bulamıyorum. –

1

aşağıdaki kod, güzel bir şekilde çalıştığını bulduk:

   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; 
        } 
       } 

ilk toggleAnimate(), animasyon normal yönde çalıştırılır denir toggleAnimate() ikinci kez çağrıldığında animasyon tersine çevrilir.

İlgili konular