我遇到了这样一种情况:我正在对XAML应用程序的一部分进行动画处理,并且需要等待动画和渲染完成,然后才能继续编写代码。到目前为止,我的函数的末尾看起来像这样:
ProcExpandCollapse.Begin();
while (ProcExpandCollapse.GetCurrentState() != ClockState.Stopped) { }
}
从理论上讲,它会一直等到动画结束。但它不会等到渲染完成-绘制应用程序的线程可能仍然没有重新绘制动画。
动画正在扩展一个UIElement,然后我的代码的下一部分使用它的渲染大小来做一些事情。我的问题是,如何等到UI元素被重新渲染后再继续?
发布于 2010-06-08 06:11:30
我终于找到了答案(尽管我必须为咨询服务付费)!本质上,我最终所做的是将使用渲染控件的代码以非常低的优先级放在控件调度器的队列上,以便它在处理该任务之前自然地渲染。例如:
mycontrol.Dispatcher.BeginInvoke((Action)delegate{textbox1.Text = "Grazie";});
mycontrol.Dispatcher.Invoke((Action)delegate{GetScreenshot();}, DispatcherPriority.Background);
然后,代码将在调用并完成GetScreenshot之后继续,这将是在渲染完成之后(因为渲染比后台具有更高的优先级)。
发布于 2010-06-07 22:36:40
Storyboard对象有一个您可以订阅的“Completed”事件。它将在动画完成时被调用。这就是你要找的?
基本上,我认为你想要"ProcExpandCollapse.Completed +=“(然后点击tab查看时间,VS将为你生成一个片段)
https://stackoverflow.com/questions/2990373
复制相似问题