2010-05-13 2 views
0

Я пытаюсь сделать гладкую анимацию в процедурном коде. Для этого (по крайней мере, в Silverlight) рекомендуется использовать таймер раскадровки, а не DispatcherTimer. Поэтому я использую что-то вроде этого:Раскадровка как таймер в WPF

Storyboard _LoopTimer = new Storyboard(); 
    public void StartAnimation() 
    { 
     _LoopTimer.Duration = TimeSpan.FromMilliseconds(0); 
     _LoopTimer.Completed += new EventHandler(MainLoop); 
     _LoopTimer.Begin(); 
    } 
    void MainLoop(object sender, EventArgs e) 
    { 
     // Do animation stuff here 

     // Continue storyboard timer 
     _LoopTimer.Begin(); 
    } 

И Silverlight, это работает отлично. Но в WPF я только один раз ударил MainLoop(). Установка RepeatBehaviour навсегда также не помогает. Итак, каков правильный способ сделать это в WPF с помощью раскадровки?

Большое спасибо.

+0

Проблема обсуждается здесь http://stackoverflow.com/questions/315427/wpf-storyboard-death – Amsakanna

ответ

0

Я думал, что использование раскадровки в Silverlight было всего лишь взломом, чтобы компенсировать отсутствие DispatcherTimer в ранних версиях.

В любом случае вам необходимо перезапустить раскадровку после ее завершения. Он не перезапустится автоматически автоматически.

+0

Не знаю об ее историческом происхождении. Но рекомендуется в нескольких местах, что Storyboard дает более плавную анимацию, чем DispatcherTimer. (Я уже сам использовал DispatcherTimer, и это было действительно довольно отрывисто.) Как вы говорите, для получения повторяющегося эффекта вам нужен _LoopTimer.Begin() в MainLoop(). Но это работает только в Silverlight. В WPF он все еще не работает. Итак, как мне сделать цикл в WPF? Это мой вопрос. – Adrian

+0

Я вижу, я не уверен, почему он не запускается снова в WPF. возможно, чтобы с ними не было детей на раскадровку? –

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