2017-06-14 4 views
0

私のUWPアプリケーションでは、2つのフレームがあります。デフォルトフレームではSplitViewSplitView.ContentにはMainframeというカスタムフレームがあります。私のアプリは約5ページあり、それらのすべてはMainFrameにロードされています。 MainPageは、デフォルトフレーム内にある唯一のページです。これは私がナビゲーションに使用するコードです:UWPの電話機とデスクトップ/ラップトップの異なるナビゲーション動作

public MainPage() 
{ 
    this.InitializeComponent();    
    MainFrame.Navigate(typeof(PageX)); 
    MainFrame.Navigated += MainFrame_Navigated;  
    SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested; 
} 

private void MainFrame_Navigated(object sender, NavigationEventArgs e) 
{ 
    SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = 
     ((Frame)sender).CanGoBack ? 
     AppViewBackButtonVisibility.Visible : 
     AppViewBackButtonVisibility.Collapsed; 
} 

private void OnBackRequested(object sender, BackRequestedEventArgs e) 
{ 
    if(MainFrame.CurrentSourcePageType == typeof(PageX)) 
    { 
     MainFrame.BackStack.Clear(); 
     MainFrame.Navigate(typeof(PageY));    
    } 
    else if (MainFrame.CanGoBack) 
    { 
     e.Handled = true; 
     MainFrame.GoBack(); 
    } 
} 

デスクトップで期待どおりにこれは動作します(それは私がpageXの午前と戻るボタンをクリックしたときに、私はpageYに取られています、である)が、携帯電話上では動作しますページXから戻るボタンをクリックした場合を除いて、ほとんどの部分で予想されるように、アプリケーションが終了します。しかし、デバッグ中に、私は最初にページを表示することに気付きました。その後、アプリケーションが終了します(それは非常に高速です)。しかし、それは完全に閉じていない、それは最小化され、私は再びアプリを開いて、それはpageYになります。

答えて

2

前方にナビゲートする場合、e.Handledを設定する必要があります。

private void OnBackRequested(object sender, BackRequestedEventArgs e) 
{ 
    if(MainFrame.CurrentSourcePageType == typeof(PageX)) 
    { 
     MainFrame.BackStack.Clear(); 
     MainFrame.Navigate(typeof(PageY));    
    } 
    else if (MainFrame.CanGoBack) 
    { 
     MainFrame.GoBack(); 
    } 
    e.Handled = true; 
} 

あなたはあなたがアプリケーション(フレームワーク)を意味し、バックボタンを処理しなかったことを言っているPageYに移動

ボタンおよびWindows Mobile上の戻るボタンのデフォルトの動作を処理するには、アプリを終了することです

関連する問題