我对WinRT XAML工具包的创建者提出了一个问题,这对我帮助很大 在WinRT中使用富页面的最佳机制是什么?
以下是条件:
AlternativeFrame.Preload()
方法的原因。这就是为什么我在选择不断预加载这些页面(创建,绘制,填充)之前的立场,但是当需要它或创建我自己的页面缓存时会存储它们(也许我是盲目的并且Toolkit已经具有此功能? )。
你能否告诉我们这个问题的最佳实践是什么?是否有第三种方式?
答案 0 :(得分:2)
要添加更多背景知识,WinRT XAML工具包库有两个控件:AlternativeFrame
和AlternativePage
,它们是基本Frame
和Page
类的替代实现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}}中执行的自动生成的代码,该代码允许您轻松访问命名元素,注册事件处理程序等。