按例,老周今天要講一個故事,這個故事以前老周在微博上分享過。大夥知道在8.1的時候,有一個擴展類庫——NotificationExtensions,能夠真TMD輕鬆生成通知XML模板,其實,這個類庫也支持UWP的自適應通知模板,要是你須要的話,能夠握緊鼠標,拼命點這裏:https://github.com/WindowsNotifications/NotificationsExtensionsgit
這是Github上的開源組件,至於說github是什麼,不要問我,老周也不知道是什麼。github
================================================瀏覽器
好了,簡單的開場白說完了,要是不談正事的話,老周擔憂有人會扔磚頭了。你若是要扔的話,請不要扔普通的磚頭,普通磚頭老周不要,你最好扔幾塊新出土的,魏晉時期的,上面刻有「永和九年」字樣的磚頭,你扔這種磚頭,老週會接的。app
以往,在Windows Phone 8.1應用中,咱們能夠處理硬件按鈕事件來處理「回退」鍵,就是手機下方,一個向左箭頭的鍵,按它能夠後退的。this
在UWP中,也確實很海納百川地兼容這種作法,然而,UWP是徹底通用的,不似8.1時候那樣劃分共享代碼實爲兩個項目,UWP是單應用通用,因此,處理這個回退鍵,總得考慮一下PC/平板、xBox上的情形。故老周不推薦使用老方法。spa
SDK 開發團隊也不是傻子,既然要通了,就要一通到底,否則怎麼叫「全球通」呢,固然了,不是某移動的全球通。爲了能讓這一事件處理可以在N + 105種設備上都能兼容,UWP 運行時公開了一個類叫SystemNavigationManager,你若是不知道這類在哪,老周說過上千遍了,打開「對象瀏覽器」窗口進行搜索就好了。code
哦,對了,若是你安裝了多個版本的SDK,可能你會看到1.0,2.0之類的東東,好比這樣。對象
老週記得曾經給你們用最不專業的語言介紹過,UWP API(配置中叫 UAP)是經過一系列XML文件進行版本配置,不一樣版本之間能夠友好相處。此處1.0是10240時的API集,2.0是10586時的API集。而經過XML配置版本的形式靈活在這裏,1.0和2.0的API不是徹底獨立,有的API是共用的,因此,若是你有10240和10586的SDK,不用去卸載舊版本的,由於裏面有共享的內容,之後微軟會繼續增長功能,只要把新的.wimd融合進去就好了,再更新一下XML文件便可,沒必要作大的改動,這樣方便擴展。blog
好,沒要緊的屁話說完了,爲何說那麼多F話呢,由於這個SystemNavigationManager類用起來很簡單,因此,老周不用花太多的時間去說。繼承
手機上的回退鍵就很少說了,那,PC/平板上的呢。其實,你若是細心的話,早就發現了,在好比「應用商店」等內置應用中就看到了。
在桌面模式下,這個後退按鈕顯示在窗口標題欄的左邊。
在平板模式下,因爲窗口標題欄會隱藏,因此會在系統的任務欄上(「開始」按鈕右邊)顯示一個向左的箭頭,這個就是回退鍵。
發現這些不須要天賦,只要你細心,什麼都逃不過你的法眼。
使用SystemNavigationManager類時應調用靜態方法GetForCurrentView,這樣你就能獲得該類的一個實例。在桌面模式下,默認狀況回退鍵是不會顯示的,要讓它顯示,就在App類重寫的OnLaunch方法中加上這些代碼:
SystemNavigationManager navmgr = SystemNavigationManager.GetForCurrentView();
navmgr.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
修改AppViewBackButtonVisibility屬性就能夠控制這個按鈕是否顯示了。
而後,咱們還得處理BackRequested事件,這個好理解,就是回退鍵被按後,就會發生這個事件,在手機和平板模式下,系統行爲是返回上一個應用或回到開始屏幕;在桌面模式下沒反應。
若是你但願這個回退鍵被按後,不是直接執行系統行爲,而是先讓應用程序在Frame導航堆棧中後退,等到「無路可退」時,你有兩種措施:一種是跟隨系統默認行爲;另外一種是退出應用程序。
事件處理參數有一個Handled屬性,把它設置爲 true ,就能夠屏蔽系統行爲,而後你自行處理。好比我這個例子,有三個頁——主頁、第二頁、第三頁,從主頁能夠分別導航到第二頁或第三頁,而後按回退鍵後退回主頁;到了主頁後,不能再退,再次按下回退鍵就直接退出程序。
好,看代碼。
Frame root = Window.Current.Content as Frame; if (root != null) { if (root.CanGoBack) { e.Handled = true; root.GoBack(); } else { this.Exit(); } }
退出應用程序的方法是調用從 Application 類繼承的 Exit 方法。上面代碼不復雜,相信能理解。
最終效果以下圖。
運行後,進入其餘頁面,而後點擊回退按鈕退回主頁,再點一次,就退出。
OK,今天的節目就到這裏,劇組缺錢,不能再加時了。歡迎繼續關注火星電視臺的節目更新。