故事板作为WPF中的计时器
我正在尝试用程序代码制作平滑动画。为此(至少在Silverlight中),建议使用故事板计时器而不是调度程序。 所以我用了这样的方法:故事板作为WPF中的计时器,wpf,animation,storyboard,smooth,Wpf,Animation,Storyboard,Smooth,我正在尝试用程序代码制作平滑动画。为此(至少在Silverlight中),建议使用故事板计时器而不是调度程序。 所以我用了这样的方法: Storyboard _LoopTimer = new Storyboard(); public void StartAnimation() { _LoopTimer.Duration = TimeSpan.FromMilliseconds(0); _LoopTimer.Completed += new E
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()一次。将RepeatBehavior设置为Forever也没有帮助。
那么,在WPF中使用故事板的正确方法是什么呢
非常感谢。我认为在Silverlight中使用故事板只是为了弥补早期版本中没有Dispatcher的缺陷
在任何情况下,您都需要在故事板完成后重新启动它。它不会自动重启。不知道它的历史渊源。但是,在一些地方,故事板比DispatcherTimer提供更平滑的动画。(我以前自己也在使用Dispatcher,它确实很不稳定。)正如您所说,要获得重复效果,需要MainLoop()中的_LoopTimer.Begin()。但这只适用于silverlight。在WPF中,它仍然不会循环。那么如何在WPF中使其循环?这是我的问题。我明白了,我不知道为什么它不会在WPF中再次开火。可能是因为故事板上没有孩子?这里讨论了这个问题