2011-11-14 57 views
1

我希望我的應用程序按字母顯示文本到文本塊,而不是整個文本一次。在文本塊WP7上動畫文本顯示

我試着做到以下幾點:

 textBlock1.Text=""; 
     for (int i = 0; i < s.Length; i++) 
     { 
      DateTime t = DateTime.Now; 
      textBlock1.Text += s[i].ToString(); 
      while (DateTime.Now < t.Add(new TimeSpan(0, 0, 0, 0, 500))) ; 
     } 

的問題是等待的全部時間通,然後顯示整個文本一次。

我認爲有一個自動化的緩衝區或防止這樣做的東西。

我該如何解決這個問題?

回答

2

您需要安排您的UI更新在Dispatcher線程上執行,您注意到的當前更新將作爲一個塊同步執行,它會凍結UI,直到完全更新完成。相反,你可以使用一個DispatcherTimer更新UI通過信函異步字母,即與擴展方法的幫助:

for (int i = 1; i <= s.Length; i++) 
{ 
    string partialText = s.Substring(0, i); 
    Dispatcher.DelayInvoke(TimeSpan.FromMilliseconds(500*i), 
          new Action(() => 
          { 
           textBlock1.Text = partialText; 
          })); 
} 

隨着DelayInvoke()作爲一個擴展方法爲Dispatcher

public static class DispatcherHelper 
{ 
    public static void DelayInvoke(this Dispatcher dispatcher, TimeSpan ts, Action action) 
    { 
     DispatcherTimer delayTimer = new DispatcherTimer(); 
     delayTimer.Interval = ts; 
     delayTimer.Tick += (s, e) => 
     { 
      delayTimer.Stop(); 
      action(); 
     }; 
     delayTimer.Start(); 
    } 
} 
+0

的DispatcherPriority枚舉不支持WP7 – SKandeel

+0

我這樣做,DispatcherTimer delayTimer = new DispatcherTimer(); – SKandeel

+1

@SherifMaherEaid:固定構造函數調用 – BrokenGlass