我有一种情况,我在动画部分XAML应用程序,我需要等待动画和渲染完成后再继续我的代码。到目前为止,我的函数的尾部看起来像:
ProcExpandCollapse.Begin();
while (ProcExpandCollapse.GetCurrentState() != ClockState.Stopped) { }
}
理论上,这将等到动画结束。但它不会等到渲染完成 - 绘制应用程序的线程可能仍然没有重新绘制动画。
动画正在扩展UIElement,然后我的代码的下一部分使用它的渲染大小来做一些事情。那么我的问题是,如何重新渲染我的UI元素,然后再继续?
答案 0 :(得分:7)
我终于找到了答案(虽然我不得不为咨询服务付费)!基本上我最终要做的就是在控制调度程序队列中使用渲染控件的代码位置具有非常低的优先级,以便在处理该任务之前自然呈现。例如:
mycontrol.Dispatcher.BeginInvoke((Action)delegate{textbox1.Text = "Grazie";});
mycontrol.Dispatcher.Invoke((Action)delegate{GetScreenshot();}, DispatcherPriority.Background);
然后代码将在GetScreenshot被调用并完成后进行,这将在渲染完成后进行(因为渲染的优先级高于背景)。
答案 1 :(得分:0)
Storyboard对象有一个您可以订阅的“已完成”事件。它将在动画完成时调用。这是你在找什么?
基本上我认为你想要“ProcExpandCollapse.Completed + =”(然后按Tab键查看一次,VS会为你生成一个片段)