【问题标题】:how to cancel navigate back on back button pressed in Windows 10 UWP?如何取消在 Windows 10 UWP 中按下的后退按钮导航?
【发布时间】:2023-04-11 06:07:01
【问题描述】:
如何在 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 中,我该如何做同样的逻辑。
我试过了,但是没用。
【问题讨论】:
标签:
windows-phone-8.1
winrt-xaml
windows-10
windows-rt
windows-10-mobile
【解决方案1】:
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;
}
}
Source: MSDN
【解决方案2】:
对于硬件返回按钮,您可以使用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();