大家追了上來,NullReferenceException異常的解決方案在一個連續的循環
與大多數的應用程序,如果設置了密碼,IM中需要包含一個登錄頁面,我的應用程序。應用程序的預期行爲是,只有在設置了密碼的情況下,它才能導航到passwordpage.xaml,並輸入正確的密碼時,它應該導航到mainpage.xaml。如果密碼沒有設置,它應該直接導航到mainpage.xaml。
以下博客建議需要重新導航,以便在app.xaml.cs中包含一項檢查,以確定應用需要導航到哪個頁面。
但現在的問題是,密碼頁面的進一步導航沒有發生。它在設置密碼時導航到密碼頁面,但是在簽入密碼匹配後,它不會在mainpage.xaml上移動,而是會返回到rootframe_navigating事件處理程序並執行循環。
http://blogs.msdn.com/b/ptorr/archive/2010/08/28/redirecting-an-initial-navigation.aspx
這是app.xaml.cs
void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
{
//throw new NotImplementedException();
if (e.Uri.ToString().Contains("/MainPage.xaml") != true)
return;
CycleManager pCycMan = CycleManager.instance;
bool checkOk = false;
pCycMan.ReadFromIsolatedStorage();
if (pCycMan.GetPasswordEnabled())
{
checkOk = true;
}
e.Cancel = true;
RootFrame.Dispatcher.BeginInvoke(delegate
{
if (checkOk)
RootFrame.Navigate(new Uri("/PasswordPage.xaml", UriKind.Relative));
else
RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
});
}
的功能,這是在passwordpage.xaml
private void OnClick(object sender, RoutedEventArgs e)
{
CycleManager pCycMan = CycleManager.instance;
if (pCycMan.GetPassword() == passwordBox1.Password)
{
NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
}
else
{
MessageBox.Show("Incorrect Password");
}
}
任何書面上的按鈕點擊功能建議?
Alfah
+1這裏。廢棄您當前的方法,並在主頁的'Loaded'或'OnNavigatedTo'方法中執行check/redirect to passwordpage。然後在設置密碼時使用'GoBack()'。 –
@adam GoBack()不能被使用,因爲在後端堆棧中沒有條目,即它還沒有導航到mainpage.xaml。它檢查app.xaml中的條件,然後轉到密碼頁面,然後移動到主頁面。xaml但它不會移動到mainpage.xaml – alfah
@alfah這很可能是因爲您試圖取消導航事件並在同一代碼塊中啓動新事件。嘗試將密碼頁面設置爲開始頁面,以便您不需要劫持導航處理程序......用戶第一眼看到的只是一個登錄頁面。然後,您可以向前導航並彈出後備堆棧中的密碼頁面,從此以後的所有內容都應該是正常行爲。 –