2010-08-07 6 views

ответ

6

OK Я сделал это!

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

0

При использовании пишущей машинки вы имеете в виду строку, отображаемую буквой по букве?

Вы можете добиться аналогичного эффекта с помощью объекта StringAnimationUsingKeyframes, однако вам нужно будет вводить каждое строковое значение вручную.

Для создания этого эффекта автоматически необходимо создать собственный анимационный объект, наиболее вероятно основанный на классе StringAnimationBase.

+0

Спасибо за подсказку! С этим я смог сделать то, что я разместил в качестве ответа. – MemphiZ

+0

Затухание в: Я думаю, что, скорее всего, это невозможно с помощью строк, вам придется принять совершенно новый подход. Создайте WrapPanel и добавьте TextBlock с буквой к ней каждые N миллисекунд (вы можете использовать DispatcherTimer). Затем вы можете использовать класс DoubleAnimation, чтобы просто заставить каждую букву замирать в течение определенного периода времени (анимировать OpacityProperty). Это, однако, не будет очень эффективным на более длинных струнах! –

Смежные вопросы