UWP后退功能处理有三个要点:一是响应系统后退键,二是在桌面系统上显示后退键,三是在全平台上实现后退时的确认。
响应系统后退键
在App.xaml.cs中重载OnWindowCreated函数,在其中绑定SystemNavigationManager.GetForCurrentView().BackRequested
函数。完整代码:
protected override void OnWindowCreated(WindowCreatedEventArgs args)
{
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
}
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
else
{
e.Handled = false;
}
}
这样可以实现点击设备上的后退键、桌面系统窗口左上角的后退键或者按下Windows+Backspace键能够后退,或者在无法后退时回到上一个应用。
在桌面系统上显示后退键
桌面版Windows 10可以在窗口左上角显示一个后退键。我们如果想要仅在可以后退时才显示后退键,可以在创建Frame时绑定Navigated事件,并在事件发生时刷新后退键的可见性。
在App.xaml.cs中所有新建Frame的位置将新Frame的Navigated事件绑定到下面描述得OnNavigated函数:
private void OnNavigated(object sender, NavigationEventArgs e)
{
Frame frame = sender as Frame;
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
frame.CanGoBack ?
AppViewBackButtonVisibility.Visible :
AppViewBackButtonVisibility.Collapsed;
}
这样就能在能够后退时在窗口上显示后退按钮了。
后退时提示确认
在不希望随意后退的页面中重载OnNavigatingFrom函数,并在其中取消导航:
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
e.Cancel = true;
// TODO: 提示用户确认是否后退
// Frame.GoBack();
base.OnNavigatingFrom(e);
}
留言
有想法?请给我们留言!您的留言不会直接显示在网站内。