2010-08-19 79 views
2

我正在開發一個應用程序在Windows Phone 7上。所以我的着陸頁是一個自定義的初始屏幕頁面(我沒有使用默認的方式顯示一個閃屏即。有一個PNG文件,因爲我需要基於用戶配置文件在運行時啓動畫面中添加數據)。所以我創建了一個splashscreen頁面。延遲一段時間(5秒)後,我導航到我的主頁面。使用如何跳過一個頁面在Windows Phone 7中的後退導航

PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame; 
root.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); 

現在,如果用戶按下手機的返回按鈕,默認情況下進入到閃屏,但我希望應用程序退出。

我如何實現這一點。 。

回答

4

我有一個類似的情況,這裏是我使用的修復。

對於我在瀏覽時跳過的頁面,我添加了一個bool成員變量,用於確定我們是否加載頁面內容或導航回到上一頁。此方法可行,似乎對應用程序沒有任何不利影響,但可能有更好的解決方案。歡迎提出更好方法的建議。

public partial class LoginPage : PhoneApplicationPage 
{ 
    private bool _navigateBack; 

    public LoginPage() 
    { 
     InitializeComponent(); 

     _navigateBack = false; 
    } 

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     if (_navigateBack) 
     { 
      this.NavigationService.GoBack(); 
     } 
     else 
     { 
      _navigateBack = true; 
      base.OnNavigatedTo(e); 
     } 
    } 
} 
0

該解決方案通過在退出應用程序之前隱藏您的啓動畫面來創建一個清潔出口。我使用此代碼跳過導航回到特定頁面。

步驟1:LayoutRoot的設置默認爲隱藏

Visibility="Collapsed" 

第3步:

第2步添加jmason的代碼在事件的OnNavigatedTo,顯示LayoutRoot如果_navigateBack標誌是假的。在OnNavigatedFrom事件,再隱藏LayoutRoot

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     if (_navigateBack) 
     { 
      this.NavigationService.GoBack(); 
     } 
     else 
     { 
      LayoutRoot.Visibility = Visibility.Visible; 
      _navigateBack = true; 
      base.OnNavigatedTo(e); 
     } 
    } 
    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     LayoutRoot.Visibility = Visibility.Collapsed; 
    } 
3

不幸的是,jmason的解決方案,因爲你不能強制退出應用程序在Windows Phone 8將無法正常工作,這意味着你不能對寫this.NavigationService.GoBack();閃屏。更好的(和工作)解決方案是在完成啓動屏幕後清理導航堆棧。

在啓動屏幕(通常是主頁)之後的頁面:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    // Calling the base class OnNavigatedTo method 
    base.OnNavigatedTo(e); 

    // Only clear the stack for 'new' (forward) and 'refresh' navigations 
    if (e.NavigationMode == NavigationMode.New || e.NavigationMode == NavigationMode.Refresh) 
     // For UI consistency, clear the entire page stack 
     while (this.NavigationService.RemoveBackEntry() != null) 
      // Do nothing 
      ; 
} 
+0

工程就像一個魅力! – christoph 2014-06-13 14:03:21

0

啓動畫面即在很簡單隻需添加此頁面,您的第一頁

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     NavigationService.RemoveBackEntry(); 
    } 

在這裏你刪除後面的條目以啓動屏幕。點擊後退你的應用程序將被殺害,而不是回來飛濺。 快樂編碼。

相關問題