Обработка кнопки возврата на разных страницах

У меня есть 2 страницы, MainPage и SettingsPage. В MainPage есть кнопка, при нажатии на которую она позволяет перейти на страницу настроек, используя этот код:

Frame.Navigate(typeof(SettingsPage));

Теперь я хочу, чтобы на второй странице, когда пользователь нажимает кнопку «Назад», приложение возвращается на главную страницу.

Я попробовал добавить следующий код:

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, приложение не закроется.

Как я могу использовать кнопку возврата в моем приложении?


person Cristian Cundari    schedule 11.12.2015    source источник
comment
Основная проблема в этом случае - всегда установка Handled = true, даже если вы ничего не делаете. Ответ danyv имеет лучшее решение для всех.   -  person Peter Torr - MSFT    schedule 12.12.2015
comment
используйте SystemNavigationManager stackoverflow.com/ вопросы / 31832309 /   -  person Vineet Choudhary    schedule 08.03.2016


Ответы (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.

person danvy    schedule 11.12.2015