如何将Metro中的SuspensionManager对象修改为仅针对MainPage的SaveState,并对任何子页面丢弃State和导航?
例如,我有一个MainPage,允许您将导航到ChildPage。如果Metro是Closed或Suspended,我希望ChildPage覆盖MainPage状态值。
现在,下次用户打开应用程序时,MainPage应该打开,而不是ChildPage。另外,MainPage应该显示在应用程序之前更新的ChildPage是Closed或Suspended。
对于如何安全地修改SuspensionManager对象以实现这一点,有什么想法吗?
发布于 2013-06-08 11:03:47
使用Danielovich的建议(尚未完成),解决方案分为两部分:
第一:
pageState对象中保存状态,而是使用SessionState对象保存状态。为什么?这样所有的Pages都可以共享相同的State信息。其次:
NavigationState,使MainPage始终是默认页面,我们需要按以下方式更改SuspensionManager中的SaveFrameNavigationState:
私有静态空SaveFrameNavigationState(帧帧){ var frameState =SessionStateForFrame(框架);frame.GetNavigationState();frameState“导航”= "1,1,0,15,Skycap.MainPage,12,0";}发布于 2013-06-04 22:00:35
为什么不直接将ChildPage中的数据添加到SessionState字典中,并在应用程序恢复时将其填充到MainPage中?
您甚至不需要修改SuspensionManager就可以做到这一点!
public BasicPage1() {
this.InitializeComponent();
Application.Current.Suspending += Current_Suspending;
Application.Current.Resuming += Current_Resuming;
}
void Current_Resuming( object sender, object e ) {
var name = SuspensionManager.SessionState["name"].ToString();
}
void Current_Suspending( object sender, Windows.ApplicationModel.SuspendingEventArgs e ) {
SuspensionManager.SessionState.Add( "name", "danielovich" );
}https://stackoverflow.com/questions/16926356
复制相似问题