как отменить переход назад по кнопке «Назад», нажатой в Windows 10 UWP?

Как я могу отменить текущую страницу для перехода назад при нажатии кнопки «Назад» в Windows 10 UWP?

В Windows Phone 8 или 8.1 Silverlight я могу написать этот код и обработать его.

private void PageBackKeyPress(object sender, CancelEventArgs e)
 {
    if (MGMethods.DisplayMessageWithButton(MessageText))
    {
       //Can Navigate Back
    }
    else
    {
      //Stop to Navigate back
      e.Cancel = true;
    }
 }

Но в Windows 10 Как я могу сделать ту же логику.

Я пробовал это, но это не работает.


person Maulik Shah    schedule 16.09.2015    source источник
comment
Возможный дубликат Обработка обратной навигации Windows 10 (UWP)   -  person Vagner Gon    schedule 23.01.2018


Ответы (2)


SystemNavigationManager позволяет вам реагировать на нажатие пользователем кнопки возврата, предоставленной системой, например аппаратной кнопки. Чтобы ваше приложение могло реагировать на системное событие обратной навигации, вызовите GetForCurrentView, чтобы получить объект SystemNavigationManager, связанный с текущим представлением, а затем зарегистрируйте обработчик событий для события BackRequested. Ваше приложение получит событие только для приложения переднего плана. Если вы обрабатываете событие BackRequested, установите для свойства BackRequestedEventArgs.Handled значение true, чтобы пометить событие как обработанное. Если вы не пометите событие как обработанное, система решает, следует ли выйти из приложения (на семействе мобильных устройств) или проигнорировать событие (на семействе настольных устройств):

Windows.UI.Core.SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += (s,a) =>
{
    Debug.WriteLine("BackRequested");
    if (Frame.CanGoBack)
    {
        Frame.GoBack();
        a.Handled = true;
    }
}

Источник: MSDN

person Kristian Vukusic    schedule 16.09.2015

Для аппаратной кнопки «Назад» вы можете использовать событие BackPressed:

HardwareButtons.BackPressed += HardwareButtons_BackPressed;
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
        {
             e.Handled = true;
        }

Или очистите стек, если другие элементы стека не важны:

this.Frame.BackStack.Clear();

Or:

var frame = Window.Current.Content as Frame;
frame.BackStack.Clear();
person n.y    schedule 31.01.2016