2011-03-10 118 views
1

我在app.When約3-4個不同的網頁我的應用程序的主頁顯示並按下開始鍵,設備appears.Now時的主屏幕上開始按鈕不同的行爲後退鍵被按下,它帶回我的應用程序的主頁,這是預期的行爲。但如果我進入我的應用程序並打開第二或第三頁,然後執行相同的開始和返回按鈕操作,那麼我的應用程序不是從它離開的頁面恢復。而是,在我的應用程序打開之前打開的應用程序。 我該如何糾正這種行爲?應用顯示了在應用程序的不同頁面

+0

你能告訴你的導航事件處理程序的第二頁(如果您有任何)和PhoneApplicationService激活/停用事件處理程序? – 2011-03-10 11:12:03

+0

未使用電話激活/禁用的事件處理程序,並且導航事件處理程序正在執行特定於該頁面的操作。與base.OnNavigatedTo()和base.OnNaviageetdFrom() – Shaireen 2011-03-10 11:17:13

+1

我的猜測是,你可以有裏面我提到的方法之一引發未處理的異常。如果你沒有使用激活的事件來恢復狀態,那麼你的應用程序重啓後可能會試圖使用一些被破壞的對象,從而導致異常? – 2011-03-10 11:28:29

回答

1

正如Loki Kriasus指出,這種類型的行爲肯定聽起來像你正在嘗試使用恢復您的應用程序時,尚未初始化的對象。查爾斯Petzold的免費電子書Programming Windows 7對這個首發117

頁上的你在做什麼很大的部分,我會猜手機狀態將綽綽有餘。電話狀態與ASP.NET中的會話狀態類似。它只是一個帶有字符串鍵的(可序列化的)對象的字典,並不會在您的應用程序啓動時保留,但當您的應用程序從Back Stack導航到時,它會被恢復。

下面是一個例子的它的使用恢復一些名爲myObject的自定義對象:

private CustomObject myObject; 

protected override void OnNavigatedFrom(NavigationEventArgs args) 
{ 
    //Save to State when leaving the page 
    PhoneApplicationService.Current.State["myObject"] = myObject; 
    base.OnNavigatedFrom(args); 
} 

protected override void OnNavigatedTo(NavigationEventArgs args) 
{ 
    if (PhoneApplicationService.Current.State.ContainsKey("myObject")) 
    { 
     //Restore from State 
     myObject = (CustomObject)PhoneApplicationService.Current.State["myObject"]; 
    } 
    else 
    { 
     //No previous object, so perform initialization 
     myObject = new myObject(); 
    } 
} 

如果你需要存儲的設置在您的應用程序的所有實例,然後看看IsolatedStorageSettings這是爲這個完美的。還有其他選擇取決於您的需求(請查看上面的鏈接書中的示例)。我猜想在第二頁和第三頁中使用如上所示的頁面狀態可以解決您的問題。

+0

感謝名單了很多@ theChrisKent..It真的幫助我理解我要保存完整page.Is它的可能的狀態做到這一點functionality.But? – Shaireen 2011-03-11 04:31:34

相關問題