就像文章標題說的我是打算寫一篇從UWP移植到WinUI的帖子,本來打算是想寫一篇WinUI的學習帖子,可是覺得市面上UWP的教程WPF的教程都是很多了,所以干脆就直接硬懟項目吧,先聲明我不是來挖UWP的墳墓的。
話不多說,我是拿第三方的嗶哩作為練手項目的,之所以選這個,大家也應該知道,雲之幻做的UWP應用顏值也算是上層了,而且他的項目都做了很多的自定義的樣式,剛好可以測試WinUI的兼容程度,看微軟現在的意思好像對桌面版情有獨鍾,於是我就先用WinUI桌面版練手了,先上項目地址。
雲之幻的原倉庫
我移植的倉庫
我主要做了哪些事情呢,首先我將uwp涉及的很多的訪問網絡的服務改成了接口,然后通過.net 自帶的DI容器進行管理,用了asp.net core的同志肯定對自帶的依賴注入不陌生。本來想把實現也改掉的,想着用.net的api寫一遍,但是發現涉及的服務太多了,就放棄了。服務對應的接口如下圖所示:
然后通過依賴注入管理服務,繼續上圖:
整體的首頁對比圖:
說說一些注意事項:
-
第一 應用啟動默認是采用像WPF那樣的窗口,而不是像UWP那樣的Page,於是我就通過改造啟動方法,將第一個頁面換成了Page,然后就可以愉快的像用UWP那樣操作了,具體的如下圖所示:
-
第二 如果你的UWP應用樣式里使用了很多的CustomResource,請記得在WinUI里面進行刪掉,因為我在測試的時候如果不刪掉,會提示xaml格式錯誤,所以大家一定要記得刪掉,或者說大家如果找出解決辦法,也可以分享下,還有就是比如xaml里的color和font相關的一些結構體,目前好像還沒遷移到Microsoft命名空間下,所以有時候需要單獨引一下命名空間。
-
第三 關於應用的彈出層,目前我遇到的彈出層主要包括Content dialog 和那個popup,這個彈出的時候都要設置XamlRoot才能正常彈出,我理解的意思大概就是可能需要設置從誰那開始彈出的吧,需要一個引用關系吧,如圖。