【发布时间】:2014-10-24 15:58:55
【问题描述】:
我正在处理的一个项目有一些相当复杂的 XAML,这些 XAML 会明显影响视觉性能。相当多的控件在初始状态下是折叠的;但是,由于他们的 XAML 已被解析并构建了可视/逻辑树,因此显示几乎是空白对象的内容非常缓慢。
看起来(并且希望在此确认)使用初始状态为 Collapsed 的 ContentControl,然后将所需控件作为该 ContentControl 的 DataTemplate 嵌入,将推迟在 DataTemplate 中加载所需控件,直到 ContentControl 被可见。
我已经构建了一个通用的 DeferredContentControl 来侦听主 UI 控件的 LayoutUpdated 事件(通常是我想要快速显示的任何元素),并且当该 UIElement 的第一个 LayoutUpdated 事件触发时,我使用Dispatcher 将 DeferredContentControl 的可见性翻转为 true,这会导致 DeferredContentControl 的 DataTemplate 中的控件实例化。当用户对屏幕的初始视图(现在很快)做出反应时,数据模板中的“加载缓慢”(但仍处于折叠状态)控件已准备就绪。
这看起来是一种合理的方法吗?有什么陷阱吗?它似乎在测试 Silverlight 和 WPF 时效果很好,虽然它不会让事情变得更快,但在我的特定场景中它给人的感觉是快了 50%。
【问题讨论】:
-
我不会依赖 LayoutUpdated,它触发得太频繁了。
-
对,我在第一次触发事件时断开监听器
标签: wpf xaml silverlight