xaml - WinRT XAML 工具包预加载页面

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

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

这些是条件:

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

这就是为什么我选择不断地预加载这些页面(创建、绘制、填充)但在需要时或创建我自己的页面缓存来存储它们(也许我是盲目的并且工具包已经具有此功能? ).
您能否建议解决这个问题的最佳实践是什么?是否还有第三种方法?

最佳答案

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

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

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

关于xaml - WinRT XAML 工具包预加载页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15357151/

相关文章:

xaml - 调整应用程序大小时显示消息

wpf - WPF中带有网格的Treeview

windows-8 - 在 Windows 8 应用程序中禁用 snapview 中的应用栏

c# - 如何发送和接收 Windows Phone 8.1 的推送通知

c# - 重新托管的 WF4 设计器中参数的默认值无法解析

c# - WPF TreeView-添加/删除节点后如何刷新树?

javascript - 如何使用 Windows 8 JSON.parse 将 JSON 文本反序列化为日期类型?

windows-8 - 禁用 ListView 中特定项目的选择和 itemInvoke 事件

c# - ListViewItem IsSelected Binding - 适用于 WPF,但不适用于 WinRT

c# - ScrollViewer 无法在 Canvas 中工作