2010-08-07 8 views

Répondre

6

OK Je l'ai fait fonctionner!

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); 
    } 

Mais y a-t-il un moyen de faire apparaître les caractères?

+0

Pour une question de suivi, commencez une nouvelle question distincte. Plus de gens le verraient et essaieraient de répondre si vous postez le comme une question de son propre chef. – sth

0

Par effets de machine à écrire, vous voulez dire la chaîne affichée lettre par lettre?

Vous pouvez obtenir un effet similaire avec l'objet StringAnimationUsingKeyframes, mais vous devez entrer chaque valeur de chaîne manuellement. Pour créer cet effet automatiquement, vous devez écrire votre propre objet d'animation, probablement un objet basé sur la classe StringAnimationBase.

+0

Merci pour le conseil! Avec cela, j'ai été capable de faire ce que j'ai posté comme réponse. – MemphiZ

+0

Fading in: Je suppose que ce n'est probablement pas possible avec les cordes, vous devriez adopter une approche complètement nouvelle. Créez un WrapPanel et ajoutez un TextBlock avec une lettre toutes les N millisecondes (vous pouvez utiliser DispatcherTimer). Vous pouvez ensuite utiliser la classe DoubleAnimation pour que chaque lettre apparaisse progressivement sur une période donnée (animez la propriété OpacityProperty). Cela ne va cependant pas être très efficace sur des cordes plus longues! –

Questions connexes