如何在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中我怎么能做同样的逻辑。
我已经尝试过但它不起作用。
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
对于硬件后退按钮,您可以使用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();