如何知道FrameworkElement何时被完全呈现?

对于WPF, Window类中有ContentRendered事件,它告诉我们何时呈现可视元素。

有什么能帮助我实现UWP应用的相同结果吗? 我想知道什么时候FrameworkElement已经完全呈现,所以我可以在那之后触发一些动作。 我不认为Loaded事件对此有帮助,因为它在屏幕上有任何内容之前触发了。

我会从Loaded开始。 它可能比你想象的要好。

https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.frameworkelement.loaded

Loaded事件可以用作在来自模板的元素上挂接事件处理程序的点,或者用于调用依赖于应用模板的结果的子元素的存在的逻辑。 Loaded是首选的对象生命周期事件,用于在显示UI的XAML控件之前使用应用程序代码操作元素树结构。 如果在初始布局中没有其他事件也发生(在初始布局上确实发生了SizeChanged),那么从Loaded处理程序调用VisualStateManager.GoToState方法以设置模板中定义的初始视图状态也是合适的。

根据您的使用情况,请考虑LayoutUpdated。

https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.frameworkelement.layoutupdated

LayoutUpdated是控件准备好进行交互之前在XAML加载序列中发生的最后一个对象生存期事件。 但是,LayoutUpdated也可以在对象生存期内的运行时发生,原因有多种:属性更改,窗口大小调整或运行时布局请求(UpdateLayout或更改的控件模板)。 布局序列中的所有SizeChanged事件发生后,将触发LayoutUpdated事件。

此外,您可能会考虑SizeChanged。

https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.frameworkelement.sizechanged

当应用程序首次激活时,SizeChanged在页面上元素的初始布局期间发生,因为UI元素的ActualHeight和ActualWidth值在布局发生之前未定义。 它们仅在初始布局过程中获取值,因此发生SizeChanged事件。 此后,在应用程序的生命周期内,如果ActualHeight和ActualWidth值因其他原因发生更改,则SizeChanged事件可以再次从元素触发。

你的问题确实没有给我太多的帮助,但不管你的用例如何,我敢打赌这会非常接近。 话虽这么说,你也可能要等到渲染完成。 一个众所周知的解决方案是将(在控件的Loaded事件中)一个动作发送给调度程序,该动作将等待执行直到渲染完成。 如果这是您想要的,请尝试以下代码的变体:

 Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle, null); 

祝你好运!

在类似的场景中,这对我来说效果很好:

  ... await Dispatcher.RunAsync(CoreDispatcherPriority.Low, DoYourThing); ... private void DoYourThing() { }