WinRT XAML Toolkit preloaded pages
我有一个问题要问WinrtXaml工具包的创建者,这个工具包帮助了我很多。在WinRT中使用富页面的最佳机制是什么?
这些是条件:
大约有两个页面的背景中有很多元素和一些高分辨率的图像。很明显,它们需要花费时间加载内容。这就是为什么我使用工具包中的AlternativeFrame.Preload()方法。
这些页面也是最常用的。
这就是为什么我站在选择不断地预加载这些页面(创建、绘制、填充)之前,但是当需要时,或者创建自己的页面缓存来存储它们(也许我是盲人,工具箱已经有了这个功能?).你能告诉我这个问题的最佳实践是什么,是否有第三种方法?
要添加更多背景,winrt xaml工具包库有两个控件:AlternativeFrame和AlternativePage,它们是处理用户界面导航的基础Frame和Page类的替代实现,类似于Web浏览器中页面的导航方式。这些可选控件的API几乎与基本控件的API相同,但它增加了对异步开发模型、页面转换动画和请求前预加载页面的更多支持。
当前,Preload()方法在后台预加载给定类型的页面并将其放入缓存中,当调用Navigate()方法导航到该类型的页面时(而不是实例化一个新页面),将使用缓存中的页面,以便立即显示该页面,但也会-缓存将被清空,下一次您进行WAN时t导航到同一个页面-您需要再次预加载它。如果您不经常返回到预加载的页面,并且该页面使用大量内存,那么这会很好地工作,但是如果您希望将该页面保存在缓存中,则不存在对此的内置支持。原始的page类有一个navigationcachemode属性,它允许在第一次加载页面时将其配置为保存在缓存中,这对您来说是一个不错的选择,但是AlternativePage还没有这种支持。因为我有一些空闲时间,所以我今天想把它添加到这里,所以你可以决定等我来做。其他选项包括
- 在导航框架的顶部显示页面,而不是在框架中导航到它-然后您可以在需要时简单地显示/隐藏它。
- 或者,您可以切换回标准的帧/页控件,并在您的Page上设置NavigationCacheMode="Required",这样它将永远留在内存中,尽管您当时确实丢失了Preload()功能。
- 或者你可以自己修改工具箱
- 或者,您可以自己缓存页面的内容-只需将页面的Content保存在某种缓存中(例如,将页面类型映射为内容的Dictionary)并在离开页面时将其从页面中删除(将内容设置为空),然后在导航到页面时将其添加回页面,内容在隐藏物。在这种情况下,如果您从缓存中检索内容,您可能希望使Content成为单独的UserControl,并且跳过在构造函数中调用InitializeComponent(),因为您只能有一个Content,并且在单独的UserControl中定义它,将允许您获得在edoc中执行的自动生成的代码。x1〔14〕允许您轻松访问命名元素、寄存器事件处理程序等。
- 非常感谢。我会和Preload()呆在一起,等待你实现NavigationCacheMode="Required"因为它可以等待。然后比较它们。我也会考虑其他可能性。
- 这比我预期的要长一段时间,但源更新已签入。使用AlternativePage的NavigationCacheMode属性控制缓存。它在默认情况下是关闭的,就像在Page类中一样。
- 哇,当时我在AlternativeFrame中做了一个小修改,在预加载缓存旁边添加了我自己的持久缓存。而且工作得很好。但是你改变了你的框架的行为。我非常感谢,因为我会试试的。此外,我们正在尝试从PNG到XAML上的整个设计。