如何修改Metro应用中的SuspensionManager
对象,SaveState
仅修改MainPage
并丢弃状态和导航对于任何子页面?
E.g。我有一个MainPage
,可让您导航到ChildPage
。如果Metro App为Closed
或Suspended
,我希望ChildPage
覆盖MainPage
州值。
现在,用户下次打开应用时,MainPage
应该会打开,而不是ChildPage
。另外,MainPage
应该显示状态,即ChildPage
在应用之前更新为Closed
或Suspended
。
有关如何安全地修改SuspensionManager
对象以实现此目的的任何想法?
答案 0 :(得分:1)
为什么不直接将ChildPage中的数据添加到SessionState dictionatry并在应用程序恢复时将其填入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" );
}
答案 1 :(得分:0)
使用 Danielovich (不完整)的建议,解决方案分为两部分:
<强>首先强>
pageState
对象中的状态,而是保存状态
使用SessionState
对象。为什么?这样所有Pages
都可以共享相同的State
信息。的其次:强>
为了确保NavigationState
未保存,以便MainPage
始终是默认页面,我们需要更改SaveFrameNavigationState
中的SuspensionManager
,如下所示:
private static void SaveFrameNavigationState(Frame frame)
{
var frameState = SessionStateForFrame(frame);
frame.GetNavigationState();
frameState["Navigation"] = "1,1,0,15,Skycap.MainPage,12,0";
}