從UWP專案移植到WinUI桌面版你需要做哪些事情

GreenShade發表於2021-05-04

就像文章標題說的我是打算寫一篇從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才能正常彈出,我理解的意思大概就是可能需要設定從誰那開始彈出的吧,需要一個引用關係吧,如圖。

Content dialog的彈出

Content dialog

popup的彈出

popup的彈出

如果你有UWP和WPF的一點基礎,學習WinUI其實只需要看看官方的文件就行了,如果你真的想學WinUI,就看看我的練習倉庫的程式碼吧。

WinUI的學習筆記

相關文章