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

时间:2015-12-11 17:40:54

标签: c# windows-10 uwp back-button windows-10-mobile

我有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上的后退按钮,应用程序不会关闭。

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

1 个答案:

答案 0 :(得分:1)

我建议您将导航代码移动到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