1. 程式人生 > 其它 >WPF 文字逐字一個個出現的動畫效果

WPF 文字逐字一個個出現的動畫效果

一、效果圖:

二、前臺程式碼:

<Grid>
        <TextBlock Foreground="Transparent" x:Name="text" TextWrapping="Wrap" >
                剛剛想半天都不知道取個什麼標題好,我想了又想,還是想不出來
            與 From/To/By 動畫類似,關鍵幀動畫對目標屬性的值進行動畫處理。 它通過其 Duration 在目標值之間建立過渡。 但是,From/To/By 動畫可以在兩個值之間建立過渡,而單個關鍵幀動畫可以在任意數量的目標值之間建立過渡。 不同於 From/To/By 動畫,關鍵幀動畫沒有設定其目標值所需的 From、To 或 By 屬性。 關鍵幀動畫的目標值使用關鍵幀物件進行描述,因此稱作“關鍵幀動畫”。 若要指定動畫的目標值,請建立關鍵幀物件並將其新增到動畫的 KeyFrames 集合。 動畫執行時,將在指定的幀之間過渡。
某些關鍵幀方法除支援多個目標值外,甚至還支援多個內插方法。 動畫的內插方法定義了從一個值過渡到下一個值的方式。 有三種內插型別:離散、線性和曲線。

若要使用關鍵幀動畫進行動畫處理,需要完成下列步驟。
            
<TextBlock.TextEffects> <TextEffect PositionCount="5" x:Name="MyTextEffect"> <TextEffect.Foreground> <SolidColorBrush Color="Red"/> </TextEffect.Foreground> </TextEffect> </TextBlock.TextEffects> </TextBlock> </Grid>

三、後臺程式碼:

Int32AnimationUsingKeyFrames animationUsingKeyFrames= new Int32AnimationUsingKeyFrames();
            int count=text.Text.Length;
            for (int i = 0; i < count; i++)
            {
                animationUsingKeyFrames.KeyFrames.Add(new DiscreteInt32KeyFrame { Value = i, KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(i*0.03
)) }); } animationUsingKeyFrames.Duration = TimeSpan.FromSeconds(count*0.03); animationUsingKeyFrames.RepeatBehavior = RepeatBehavior.Forever; //animationUsingKeyFrames.AutoReverse= true; //MyTextEffect.BeginAnimation(TextEffect.PositionCountProperty, animationUsingKeyFrames); Storyboard sb=new Storyboard(); Storyboard.SetTarget( animationUsingKeyFrames, text); Storyboard.SetTargetProperty(animationUsingKeyFrames, new PropertyPath("(TextBlock.TextEffects)[0].(TextEffect.PositionCount)")); sb.Children.Add(animationUsingKeyFrames); ColorAnimation colorAnimation = new ColorAnimation(); colorAnimation.From = Colors.Black; colorAnimation.To = Colors.Blue; colorAnimation.Duration = TimeSpan.FromSeconds(1); colorAnimation.RepeatBehavior = RepeatBehavior.Forever; colorAnimation.AutoReverse = true; Storyboard.SetTarget(colorAnimation, text); Storyboard.SetTargetProperty(colorAnimation, new PropertyPath("(TextBlock.TextEffects)[0].(TextEffect.Foreground).(SolidColorBrush.Color)"));//(TextEffect.Foreground).(SolidColorBrush.Color) sb.Children.Add(colorAnimation); sb.Begin();