当前位置:首页 > Windows程序 > 正文

SystemNavigationManager

2021-03-25 Windows程序

Win10系统为确保所有应用中的一致导航体验,提供后退导航功能。当你的应用在手机、平板电脑上或者在支持系统后退功能的电脑或笔记本电脑上运行时,系统会在"后退"按钮被按下时通知你的应用。 由你来决定要将哪些导航操作添加到导航历史记录以及应用如何响应后退按钮按下操作。参阅 UWP 应用的导航设计基础知识 以获取有关导航历史记录和后退行为的建议。

下面是每个通用 Windows 平台 (UWP) 设备类型提供的后退功能的分解情况:

电话

 

技术分享

 

始终存在。

显示在屏幕底部。

提供应用内和应用间的后退导航。

 

平板电脑

 

技术分享

 

始终存在(当 Windows 处于平板电脑模式时)。(平板电脑用户可在平板电脑模式下运行与在桌面模式下运行之间切换)。

显示在屏幕底部。

提供应用内和应用间的后退导航。

 

电脑、笔记本电脑和 Surface Hub

 

技术分享

 

默认处于禁用状态。开发人员可以选择启用它。

显示在应用的标题栏中。

仅在应用内提供后退导航。不提供应用间的导航。

 

我们接下来要做的事情就是当设备类型为电脑、笔记本或Surface Hub的时候,开启系统后退导航按钮并响应系统后退导航事件。

首先我们新建一个UWP通用App项目,暂且起名为:NavBackButtonSample

订阅后退导航按钮点击事件

打开App.cs文件,在OnLaunched事件中Frame对象初始化完毕后订阅SystemNavigationManager的BackRequested事件:

SystemNavigationManager.GetForCurrentView().BackRequested += App_BackRequested;

通过SystemNavigationManager.GetForCurrentView()方法我们能得到SystemNavigationManager对象,然后订阅对象的BackRequested事件,我们就可以在点击后退导航按钮时捕捉到该动作,从而在事件方法内部实现自己的逻辑。

响应后退导航按钮

1 private void App_BackRequested(object sender, BackRequestedEventArgs e) 2 { 3 // 这里面可以任意选择控制哪个Frame 4 // 如果MainPage.xaml中使用了另外的Frame标签进行导航 可在此处获取需要GoBack的Frame 5 var rootFrame = Window.Current.Content as Frame; 6 7 // ReSharper disable once PossibleNullReferenceException 8 if (!rootFrame.CanGoBack) return; 9 rootFrame.GoBack(); 10 }

首先我们需要获取到需要GoBack的Frame对象,注意,如果我们在App的页面中又使用了另外的Frame元素进行导航的话需要获取实际进行导航的Frame对象来进行操作。然后判断是否可以goback后进行goback。

完成上面这些操作后,系统的导航按钮就具备了响应我们的点击事件,但是还有一件事情,PC、笔记本、Surface Hub的系统导航按钮默认是隐藏的,我们还需要使其显示出来,需要注意的是,在程序刚刚打开导航到首页或者从其他深层页面GoBack到首页时,我们需要隐藏系统导航按钮。

开启显示导航按钮

在App的OnLaunched事件中,我们订阅Frame的Navigated事件,Frame在每次做导航后,我们需要判断系统后退按钮是否显示(后退到首页时,,系统后退按钮应该处于隐藏状态)。

//订阅导航完成时事件 rootFrame.Navigated += RootFrame_Navigated;

在Frame的Navigated事件中,判断App的Frame的导航堆栈中是否存在元素,如果存在元素就显示后退导航按钮,如果不存在元素则说明App目前处于首级Page,我们隐藏按钮:

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67326.html