2010-08-07 64 views

回答

6

好吧,我做到了!

private void TypewriteTextblock(string textToAnimate, TextBlock txt, TimeSpan timeSpan) 
    { 
     Storyboard story = new Storyboard(); 
     story.FillBehavior = FillBehavior.HoldEnd; 
     story.RepeatBehavior = RepeatBehavior.Forever; 

     DiscreteStringKeyFrame discreteStringKeyFrame; 
     StringAnimationUsingKeyFrames stringAnimationUsingKeyFrames = new StringAnimationUsingKeyFrames(); 
     stringAnimationUsingKeyFrames.Duration = new Duration(timeSpan); 

     string tmp = string.Empty; 
     foreach(char c in textToAnimate) 
     { 
      discreteStringKeyFrame = new DiscreteStringKeyFrame(); 
      discreteStringKeyFrame.KeyTime = KeyTime.Paced; 
      tmp += c; 
      discreteStringKeyFrame.Value = tmp; 
      stringAnimationUsingKeyFrames.KeyFrames.Add(discreteStringKeyFrame); 
     } 
     Storyboard.SetTargetName(stringAnimationUsingKeyFrames, txt.Name); 
     Storyboard.SetTargetProperty(stringAnimationUsingKeyFrames, new PropertyPath(TextBlock.TextProperty)); 
     story.Children.Add(stringAnimationUsingKeyFrames); 

     story.Begin(txt); 
    } 

但是有沒有辦法讓人物淡入?

+0

對於後續問題,最好開始一個新的單獨問題。更多的人會看到它,並試圖回答,如果你發佈它自己的問題作爲 。 – sth 2010-08-15 01:43:59

0

通過打字機效果你的意思是字符串顯示的字母?

您可以使用StringAnimationUsingKeyframes對象實現類似效果,但是,您必須手動輸入每個字符串值。

要自動創建此效果,您必須編寫自己的動畫對象,最有可能是基於StringAnimationBase類的動畫對象。

+0

感謝您的提示!有了這個,我可以做我發佈的答案。 – MemphiZ 2010-08-07 19:59:53

+0

淡入淡出:我想這很可能不可能用字符串,你必須採取全新的方法。製作一個WrapPanel並每隔N毫秒添加一個帶有字母的TextBlock(可以使用DispatcherTimer)。然後,您可以使用DoubleAnimation類簡化每個字母在一段時間內的淡入淡出效果(爲OpacityProperty設置動畫效果)。然而,這對於更長的琴絃不會很有效! – 2010-08-07 20:18:36