Как отменить навигацию назад на кнопку назад, нажатую в 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 Как я могу сделать эту же логику.
Я пробовал это, но это не работает.
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;
}
}
Для аппаратной кнопки Назад вы можете использовать BackPressed
событие:
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
e.Handled = true;
}
Или очистите стек, если другие элементы в стеке не важны:
this.Frame.BackStack.Clear();
Или же:
var frame = Window.Current.Content as Frame;
frame.BackStack.Clear();