我正在尝试使用 C# 创建一个 UWP(通用 Windows 应用程序)应用程序。我的问题是Frame
控件:如果我在没有 的情况下使用它NavigationCacheMode = Required
,则每次用户返回时,页面都不会保存在内存中,而是会重新创建。如果我设置NavigationCacheMode
为Required
or Enabled
,返回可以正常工作(没有新的页面对象),但是如果我从相同类型导航到另一个页面,则前一个页面对象将被回收和重用(没有新的页面实例)。
期望的行为:
有没有办法使原始控件具有以下行为Frame
(例如在 Windows Phone 中):
- 创建新的页面实例
Navigate()
- 保持页面实例开启
GoBack()
我知道的唯一解决方案是创建一个自己的Frame
控件,但这会导致其他问题(例如:缺少SetNavigationState()
方法等......)
示例场景:
具有三个页面的简单应用示例:TvShowListPage
、TvShowDetailsPage
、SeasonDetailsPage
。
TvShowListPage
是入口页面。单击TvShow
导航到后TvShowDetailsPage
。- 现在在
TvShowDetailsPage
列表中选择一个季节并导航到TvShowDetailsPage
. - 如果向后导航,页面应保留在内存中以避免重新加载页面。
- 但是,如果用户返回
TvShowListPage
并选择另一个TvShow
,TvShowDetailsPage
则会被回收并且可能处于错误状态(例如,显示演员枢轴而不是第一个,季节枢轴)
我正在寻找默认的 Windows Phone 7 行为:导航在页面堆栈上创建一个新页面,返回从堆栈中删除顶部页面并显示堆栈中的前一页(存储在内存中)。
解决方案:
因为没有解决这个问题,我不得不重新实现所有与分页相关的类:Page、Frame、SuspensionManager 等...
提供所有这些类的库 MyToolkit可以在这里下载:https ://github.com/MyToolkit/MyToolkit/wiki/Paging-Overview
参考:
- http://www.jayway.com/2012/05/25/clearing-the-windows-8-page-cache/:没有好的解决方案
- http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/88e6d1b3-1fa6-4ab4-a816-e77c86ef236f/:实现自己的 Frame 类不是解决方案,因为它不适用于
SuspensionManager