2013-11-26 24 views
2

我從後面的代碼創建淡入/淡出動畫。我試圖在特定的眨眼時間停止動畫,並且它工作正常。但我想確保當我的動畫停止時,它應該停止在淡出狀態。以下是我的代碼:如何在特定狀態下停止動畫

public void AddAnimation(long blinkDuration = 0) 
     { 
      var fadeIn = new DoubleAnimation(0.3, 1, TimeSpan.FromSeconds(1), FillBehavior.HoldEnd) 
      { 
       BeginTime = TimeSpan.FromSeconds(0) 
      }; 

      var fadeOut = new DoubleAnimation(1.0, 0.3, TimeSpan.FromSeconds(1), FillBehavior.HoldEnd) 
      { 
       BeginTime = TimeSpan.FromSeconds(0.5) 
      }; 

      storyboard = new Storyboard(); 
      Storyboard.SetTarget(fadeIn, this); 
      Storyboard.SetTarget(fadeOut, this); 
      Storyboard.SetTargetProperty(fadeIn, new PropertyPath("(Opacity)")); 
      Storyboard.SetTargetProperty(fadeOut, new PropertyPath("(Opacity)")); 
      storyboard.RepeatBehavior = blinkDuration == 0 
              ? RepeatBehavior.Forever 
              : new RepeatBehavior(new TimeSpan(0, 0, Convert.ToInt32(blinkDuration))); 
      storyboard.Children.Add(fadeIn); 
      storyboard.Children.Add(fadeOut); 
      storyboard.Begin(); 
     } 

我的問題是我將如何使我的圖標狀態淡入淡出時間間隔後故事板上停止。

回答

3

我修好了。我改變了我的Storyboard.Begin調用和註冊的storyboard.Completed事件,我打電話給storyboard.Stop()。

下面是我改變的代碼:

storyboard.Completed += StoryboardCompleted; 
storyboard.Begin(this, true); 

void StoryboardCompleted(object sender, EventArgs e) 
{ 
    storyboard.Stop(this); 
} 
1

您可以使用HoldEnd一個FillBehaviour property值將保持最後的值(或To值)您在Storyboard設置。這樣,您可以確保最終值將會是什麼。您可能使用此屬性的唯一問題是您可能需要多次運行動畫。

要做到這一點,您可以附加處理程序到Completed Event,並在完成後重新運行Storyboard,如果滿足某些條件(運行次數,秒數或數據到達等):

private void OnStoryboardCompleted(object sender, EventArgs e) 
{ 
    if (someConditionIsTrue) storyboard.Start(); 
}