对于WPF ContentRendered
,Window
类中有一个事件让我们知道何时渲染了可视元素.
有什么能帮助我实现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);
祝你好运!