WinRT XAML工具包预加载页面

WinRT XAML工具包预加载页面,xaml,windows-8,windows-runtime,winrt-xaml,winrt-xaml-toolkit,Xaml,Windows 8,Windows Runtime,Winrt Xaml,Winrt Xaml Toolkit,我想问WinRT XAML工具包的创建者一个问题,这个工具包对我帮助很大。 在WinRT中使用富页面的最佳机制是什么 这些是条件: 大约有2个页面有很多元素,背景中有一些高分辨率的图像。显然,他们需要花费时间来加载内容。这就是为什么我使用工具箱中的方法 这些页面也是最常用的 这就是为什么我会选择在需要时不断预加载这些页面(创建、绘制、填充),或者创建自己的页面缓存来存储它们(可能我是盲人,工具包已经有了这个功能?。 您能告诉我这个问题的最佳实践是什么,是否有第三种方法吗?要添加更多的背景信息,W

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

这些是条件:

  • 大约有2个页面有很多元素,背景中有一些高分辨率的图像。显然,他们需要花费时间来加载内容。这就是为什么我使用工具箱中的方法
  • 这些页面也是最常用的
  • 这就是为什么我会选择在需要时不断预加载这些页面(创建、绘制、填充),或者创建自己的页面缓存来存储它们(可能我是盲人,工具包已经有了这个功能?。

    您能告诉我这个问题的最佳实践是什么,是否有第三种方法吗?

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

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

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

    非常感谢。我将继续使用
    Preload()
    ,并等待您实现
    NavigationCacheMode=“Required”
    ,因为它是可以等待的。然后比较它们。我还将考虑其他可能性。这比我预期的时间要长一些,但源代码更新已签入。使用
    AlternativePage
    NavigationCacheMode
    属性来控制缓存。默认情况下它是关闭的,就像在
    Page
    类中一样。哇,当时我在AlternativeFrame中做了一个小修改,在预加载的缓存旁边添加了我自己的持久缓存。而且效果很好。但您需要为它更改框架的行为。我非常感激,当然我会试试的。此外,我们现在正在尝试在xaml上从png过渡到整个设计。