2

我有一个对 WinRT XAML Toolkit 的创建者有很大帮助的问题。
在 WinRT 中处理富页面的最佳机制是什么?

这些是条件:

  1. 大约有 2 页在背景中有很多元素和一些高分辨率图像。显然,他们消耗时间来加载他们的内容。这就是我使用AlternativeFrame.Preload()工具包中的方法的原因。
  2. 这些页面也是最常用的。

这就是为什么我选择在需要时不断地预加载这些页面(创建、绘制、填充)或创建我自己的页面缓存来存储它们(也许我是盲人并且 Toolkit 已经具有此功能?)。
你能告诉我这个问题的最佳实践是什么,是否有第三种方法?

4

1 回答 1

2

添加更多背景信息 - WinRT XAML Toolkit 库有两个控件:它们是Windows 8 SDK 中开箱即用的基类和类的替代实现,用于处理 UI 导航 - 类似于您在 Web 中导航AlternativeFrame页面AlternativePageFrame方式Page浏览器。这些替代控件的 API 与基本控件中的几乎相同,但它增加了对异步开发模型、页面转换动画和在请求之前预加载页面的更多支持。

目前,该Preload()方法在后台预加载给定类型的页面并将其放入缓存中,当Navigate()调用方法以导航到该类型的页面时 - 而不是实例化新页面 - 使用缓存中的页面,所以它可以立即显示,而且 - 缓存被清空,下次您想要导航到同一页面时 - 您需要再次预加载它。如果您不经常返回预加载页面并且该页面使用大量内存,则此方法效果很好,但如果您想将该页面保留在缓存中 - 没有内置支持。原始 Page 类有一个NavigationCacheMode属性,该属性允许将页面配置为在第一次加载后保留在缓存中,这对您来说是一个不错的选择,但是AlternativePage还没有那个支持。由于我有空闲时间,我正在考虑将其添加到那里,因此您可能会决定等我做。其他选项包括

  • 在导航框架顶部显示您的页面,而不是在框架中导航到它 - 然后您可以在需要时简单地显示/隐藏它
  • 或者您可以切换回标准的框架/页面控件并设置NavigationCacheMode="Required"您的Page,以便它永远留在内存中,尽管您确实会失去该Preload()功能。
  • 或者您可以自己修改工具包
  • 或者您可以自己缓存页面的内容 - 只需将页面的内容保存Content在某种缓存中(例如Dictionary<Type,UIElement>,将页面类型映射到内容)并在您离开页面时将其从页面中删除(将 Content 设置为 null)页面,然后在您导航到该页面并在缓存中找到内容时将其添加回页面。在这种情况下,如果您从缓存中检索内容,您可能希望将其Content设为一个单独的UserControl并跳过InitializeComponent()构造函数中的调用,因为您只能拥有一个Content并且将其定义在一个单独的UserControl文件中将允许您获得自动生成的代码在其中执行,InitializeComponent()使您可以轻松访问命名元素、注册事件处理程序等。
于 2013-03-12T21:48:22.257 回答