UWP后退功能处理

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);
        }

留言

有想法?请给我们留言!您的留言不会直接显示在网站内。