2014-09-03 61 views
0

這是我的動畫倒計時代碼。當bandera_countdown == false時,定時器應停止並重置。它重置,但它繼續在後臺工作,因爲即使重置後,countdownStoryboard.Completed + = CountdownTimer_Completed也會觸發。重置倒計時動畫c#WPF

private void StartCountdown(FrameworkElement target) 
    { 
     var countdownAnimation = new StringAnimationUsingKeyFrames(); 
     var countdownStoryboard = new Storyboard(); 
     if (bandera_countdown == true) 
     { 
      for (var i = 10; i > 0; i--) 
      { 
       var keyTime = TimeSpan.FromSeconds(10 - i); 
       var frame = new DiscreteStringKeyFrame(i.ToString(), KeyTime.FromTimeSpan(keyTime)); 
       countdownAnimation.KeyFrames.Add(frame); 
      } 
      countdownAnimation.KeyFrames.Add(new DiscreteStringKeyFrame(" ", KeyTime.FromTimeSpan(TimeSpan.FromSeconds(11)))); 
      Storyboard.SetTargetName(countdownAnimation, target.Name); 
      Storyboard.SetTargetProperty(countdownAnimation, new PropertyPath(TextBlock.TextProperty)); 

      countdownStoryboard.Children.Add(countdownAnimation); 
      countdownStoryboard.Completed += CountdownTimer_Completed; 

      countdownStoryboard.Begin(this); 

     } 
     else 
     { 
      countdownStoryboard.Stop(); 
      countdownStoryboard.Remove(); 

     } 

    } 

我能做些什麼來使我的計時器停止並在10秒內再次開始? 謝謝!

回答

0

是否bandera_countdown在任何地方設置爲false?

在for循環中可能有一個if語句,所以如果我== 1,(如果你想如果我== 0)然後將bandera_countdown設置爲false。

您也可以嘗試更改啓動for循環的行中的條件,以便它說i> 0,您可以嘗試將其更改爲i> = 0,因此它應該在i == 0時運行

我想我明白你想要它做什麼,我的意思是從for循環,即時假設keyTime是要從0到10,但它似乎不會回到10?這可能是由於我之前提到的i> 0,因爲我認爲for循環的最後一次迭代將是當我== 1.

我希望這可以幫助,如果不是好運與它...不用擔心,你一定會很快得到另一個響應,這裏的人通常很有幫助... :)

只是我有過的另一個想法,你可以聲明的keyTime varnish循環,並給它的初始值爲10,基本上做同樣的事情發生在for循環,這是減少它的價值,我每次然後可能有一個if語句在for循環當我== 0,重置將keyTime的值設置爲10,將bandera_countdown設置爲false,然後執行其他任何操作。

+0

謝謝! bandera_countdown設置爲false。問題是,當發生這種情況時,計時器重置爲10,但仍繼續運行。例如,倒計時結束時(等於0)會觸發一個事件處理程序,因此可以說當bandera_countdown設置爲false時,我的倒計時時間爲3秒,因此倒計數重置並顯示10秒,然後再次開始倒計時,但在3處理程序觸發的秒數。我不知道我是否自我解釋。 – user3634248 2014-09-04 17:15:42