WinRT XAML工具包预加载页面

时间:2013-03-12 09:10:28

标签: xaml windows-8 windows-runtime winrt-xaml winrt-xaml-toolkit

我对WinRT XAML工具包的创建者提出了一个问题,这对我帮助很大 在WinRT中使用富页面的最佳机制是什么?

以下是条件:

  1. 大约有2页在背景中有很多元素和一些高分辨率图像。显然,他们消耗时间来加载他们的内容。这就是我使用Toolkit中的AlternativeFrame.Preload()方法的原因。
  2. 这些页面也是最常用的。
  3. 这就是为什么我在选择不断预加载这些页面(创建,绘制,填充)之前的立场,但是当需要它或创建我自己的页面缓存时会存储它们(也许我是盲目的并且Toolkit已经具有此功能? )。
    你能否告诉我们这个问题的最佳实践是什么?是否有第三种方式?

1 个答案:

答案 0 :(得分:2)

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

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

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