2012-11-27 49 views
2

頁比方說,我有一個代碼跳過在WP7導航堆棧

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    var userInfo = SettingsManager.Read<User>(SettingsManager.UserInfoSetting); 

    if (e.NavigationMode == NavigationMode.Back && userInfo == null) 
    { 
     _mainViewModel.NavigationService.GoBack(); 
    } 

    if (e.NavigationMode == NavigationMode.New && userInfo == null) 
    { 
     _mainViewModel.NavigationService.NavigateTo(new Uri(ViewModelLocator.SettingPageUrl, UriKind.Relative)); 
    } 

    base.OnNavigatedTo(e); 
} 

當用戶運行應用程序的第一次,他將被重定向到設置頁面,它現在工作得很好。如果用戶不想提供他的信息,他可以在這種情況下按下後退按鈕,我想跳過應用程序的主頁並退出應用程序。如果我運行我收到的代碼InvalidOperationExceptionCannot go back when CanGoBack is false.

GoBack()方法調用PhoneApplicationFrame.GoBack()方法導航回來。

回答

3

你不能強行退出這種方式。
你可以做什麼,是處理後退按鈕在設置頁面上按下並清除堆棧(允許),然後讓後退按鈕處理 - 因此用戶將退出,因爲後退按鈕,不是因爲你的電話。

4

警告 - Windows Developer指南不建議移除背景條目。因爲你必須堅持後退按鈕的自然行爲。

鏈接 - https://docs.microsoft.com/en-us/windows/uwp/layout/navigation-history-and-backwards-navigation

嘗試刪除回堆棧條目(主頁你的情況),當用戶進入到首次設置頁面。

您可以通過下面的代碼刪除任何剩餘的堆棧中的條目:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 

    while (this.NavigationService.BackStack.Any()) 
    { 
     this.NavigationService.RemoveBackEntry(); 
    } 
} 

因此,當用戶按下後退按鈕有沒有剩餘的堆棧中的條目應用程序應該退出。

0
protected override void OnBackKeyPress(CancelEventArgs e) 
    { 
     while (NavigationService.CanGoBack) 
     { 
      NavigationService.RemoveBackEntry(); 
     } 
     base.OnBackKeyPress(e); 
    }