关于Windows 8:WinRT XAML Toolkit预加载的页面

WinRT XAML Toolkit preloaded pages

我有一个问题要问WinrtXaml工具包的创建者,这个工具包帮助了我很多。在WinRT中使用富页面的最佳机制是什么?

这些是条件:

  • 大约有两个页面的背景中有很多元素和一些高分辨率的图像。很明显,它们需要花费时间加载内容。这就是为什么我使用工具包中的AlternativeFrame.Preload()方法。
  • 这些页面也是最常用的。
  • 这就是为什么我站在选择不断地预加载这些页面(创建、绘制、填充)之前,但是当需要时,或者创建自己的页面缓存来存储它们(也许我是盲人,工具箱已经有了这个功能?).你能告诉我这个问题的最佳实践是什么,是否有第三种方法?


    要添加更多背景,winrt xaml工具包库有两个控件:AlternativeFrameAlternativePage,它们是处理用户界面导航的基础FramePage类的替代实现,类似于Web浏览器中页面的导航方式。这些可选控件的API几乎与基本控件的API相同,但它增加了对异步开发模型、页面转换动画和请求前预加载页面的更多支持。

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

    • 在导航框架的顶部显示页面,而不是在框架中导航到它-然后您可以在需要时简单地显示/隐藏它。
    • 或者,您可以切换回标准的帧/页控件,并在您的Page上设置NavigationCacheMode="Required",这样它将永远留在内存中,尽管您当时确实丢失了Preload()功能。
    • 或者你可以自己修改工具箱
    • 或者,您可以自己缓存页面的内容-只需将页面的Content保存在某种缓存中(例如,将页面类型映射为内容的Dictionary)并在离开页面时将其从页面中删除(将内容设置为空),然后在导航到页面时将其添加回页面,内容在隐藏物。在这种情况下,如果您从缓存中检索内容,您可能希望使Content成为单独的UserControl,并且跳过在构造函数中调用InitializeComponent(),因为您只能有一个Content,并且在单独的UserControl中定义它,将允许您获得在edoc中执行的自动生成的代码。x1〔14〕允许您轻松访问命名元素、寄存器事件处理程序等。