2017-06-14 36 views
0

在我的UWP應用程序中,我有2個幀。在默認框架中,我有一個SplitViewSplitView.Content,我有一個自定義框架Mainframe。我的應用程序有大約5頁,所有這些都加載在MainFrameMainPage是默認框架中的唯一頁面。這是我使用的導航代碼: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),但在手機上它的工作原理正如大多數部分所預期的那樣,除了當我點擊pageX的後退按鈕時,如果是這種情況,應用程序就會退出。但在調試過程中,我發現我第一次接觸pageY然後關閉應用程序(它發生得非常快)。但它並沒有完全關閉,它最小化了,當我再次打開應用程序時,它將在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上的後退按鈕的默認行爲是退出應用程序

相關問題