Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
故事板作为WPF中的计时器_Wpf_Animation_Storyboard_Smooth - Fatal编程技术网

故事板作为WPF中的计时器

故事板作为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

我正在尝试用程序代码制作平滑动画。为此(至少在Silverlight中),建议使用故事板计时器而不是调度程序。 所以我用了这样的方法:

    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中再次开火。可能是因为故事板上没有孩子?这里讨论了这个问题