2012-12-09 47 views
7

所以我試圖改變Windows 8應用程序中的幀。我試着按照教程this page,但我一直得到相同的錯誤。改變幀的ArgumentNullException

我收到就行了ArgumentNullException:

frameState[_pageKey] = pageState; 
在LayoutAwarePage.cs類

,在OnNavigatedFrom方法。

現在我不知道爲什麼我得到這個錯誤,因爲我覺得在我的代碼中沒有任何東西可以導致它。我的按鈕的onclick功能有這樣的代碼:

DateTime chosenDateTime = new DateTime(year, month, day, hours, minutes, seconds); 
this.Frame.Navigate(typeof(MainPage), chosenDateTime.ToString()); 

而在我的的MainPage方法的OnNavigatedTo看起來是這樣的:

protected override void OnNavigatedTo(NavigationEventArgs e) { 
    string parameter = (string)e.Parameter; 
    if (parameter != "") { 
     Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings; 
     roamingSettings.Values["chosenDateTime"] = parameter; 
     chosenDateTime = Convert.ToDateTime(e.Parameter); 
    } else { 
     Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings; 
     if (roamingSettings.Values.ContainsKey("chosenDateTime")) { 
      chosenDateTime = Convert.ToDateTime(roamingSettings.Values["chosenDateTime"].ToString()); 
     } 
     if (roamingSettings.Values.ContainsKey("headline")) { 
      chosenDateTextBlock.Text = roamingSettings.Values["headline"].ToString(); 
     } 
    } 
    SetTime(); 
} 

誰能給我一些信息,我怎麼能解決這個問題?

謝謝。

回答

10

好的,所以我找到了我自己的問題的答案!

在兩個頁面我指的是和我必須有至少實現最小實現的2種方法:

protected override void OnNavigatedTo(NavigationEventArgs e) { 
    base.OnNavigatedTo(e); 
} 

protected override void OnNavigatedFrom(NavigationEventArgs e) { 
    base.OnNavigatedFrom(e); 
} 

而且

base.OnNavigatedFrom(e); 
base.OnNavigatedTo(e); 

是有在非常重要方法。

+1

檢查答案是否正確;) –

0

可能觸發此問題的另一種情況是頁面不再附加到任何框架(例如,由於事件處理程序或其他引用,但其框架已被導航離開頁面,它仍在內存中)。

如果您在事件處理程序中調用Frame.Navigate(),這可能會被多次觸發或附加到事件多次(第一次調用可以工作,但第二次調用將在第更長的有任何幀)。