处理不同页面上的后退按钮

Handling back button on different pages

我有 2 个页面,MainPage 和 SettingsPage。在 MainPage 中有一个按钮,单击它可以使用以下代码进入 SettingsPage:

Frame.Navigate(typeof(SettingsPage));

现在我希望在第二页上当用户单击后退按钮时应用程序返回到 MainPage。

我尝试添加以下代码:

public SettingsPage()
{
    this.InitializeComponent();
    SystemNavigationManager.GetForCurrentView().BackRequested += SettingsPage_BackRequested;
}

private void SettingsPage_BackRequested(object sender, BackRequestedEventArgs e)
{
    if (this.Frame.CanGoBack)
    {
        this.Frame.GoBack();
    }

    e.Handled = true;
}

应用程序返回到 MainPage,但 SettingsPage_BackRequested 事件继续工作,所以如果我单击 MainPage 上的后退按钮,应用程序不会关闭。

如何处理应用程序中的后退按钮?

我建议您将导航代码移至 App 对象。 SystemNavigationManager 的好消息是您可以集中您的代码并使默认导航过程非常容易完成。 这是一个简化版本

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    ...
    rootFrame.Navigated += OnNavigated;
    SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
    ...
}

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

private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;

    if (rootFrame.CanGoBack)
    {
        e.Handled = true;
        rootFrame.GoBack();
    }
}

有关更多详细信息,请查看这个很棒的教程

http://www.wintellect.com/devcenter/jprosise/handling-the-back-button-in-windows-10-uwp-apps