首页 文章

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

提问于
浏览
0

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

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 回答

  • 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上的后退按钮的默认行为是退出应用程序

相关问题