UWP在手机和台式机/笔记本电脑中的不同导航行为

时间:2017-06-14 12:51:06

标签: c# xaml uwp

在我的UWP应用程序中,我有2帧。在默认框架中,我有SplitViewSplitView.Content中,我有一个名为Mainframe的自定义框架。我的应用程序有大约5页,所有这些都加载到MainFrameMainPage是默认框架中唯一的页面。这是我用于导航的代码:

 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上。

1 个答案:

答案 0 :(得分: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上的后退按钮的默认行为是退出应用程序