0

如何修改SuspensionManagerMetro 应用程序中的对象,使其SaveState成为MainPage唯一并丢弃任何子页面的状态导航?

例如,我有一个MainPage允许您导航ChildPage. 如果 Metro App 是ClosedSuspended,我希望ChildPage覆盖MainPage状态值。

现在,下次用户打开应用程序时,MainPage应该打开而不是ChildPage. 还MainPage应该显示状态,ChildPage在应用程序之前更新是ClosedSuspended

SuspensionManager关于如何安全地修改对象以实现此目的的任何想法?

4

2 回答 2

1

为什么不直接将 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" );
}
于 2013-06-04T22:00:35.120 回答
0

使用Danielovich的建议(不完整),解决方案分为两部分:

首先:

  • 不再在pageState对象中保存状态,而是使用SessionState对象保存状态。为什么?这样一来,所有人都Pages可以共享相同的State信息。

第二:

  • 为确保NavigationState不保存,因此始终是默认页面,MainPage我们需要更改如下:SaveFrameNavigationStateSuspensionManager

    private static void SaveFrameNavigationState(Frame frame)
    {
        var frameState = SessionStateForFrame(frame);
        frame.GetNavigationState();
        frameState["Navigation"] = "1,1,0,15,Skycap.MainPage,12,0";
    }
    
于 2013-06-08T11:03:47.550 回答