当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何知道FrameworkElement何时被完全呈现?》经验,为你挑选了1个好方法。

对于WPF ContentRendered,Window类中有一个事件让我们知道何时渲染了可视元素.

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



1> Jerry Nixon..:

我会从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);

祝你好运!

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有