WinUI 3 踩坑記:前言

2022-09-16 06:01:16

WinUI 3 (Windows App SDK 於 2021 年 11 月釋出了第一個正式版 v1.0.0 [1],最新版本是 v1.1.5 [2]。我的基於 WinUI 3 的個人專案 尋空 從年初開始開發 [3],完整經歷了 WinUI 3 的各個版本,見證了從 Bug 滿天飛到逐漸完善的全過程。

現在 WinUI 3 趨於穩定,處於可以一用的狀態,我也想把開發尋空過程中遇到的有趣的內容分享給大家,系列名就叫 WinUI 3 踩坑記 好了。個人水平有限,文章中難免會出現錯誤,請各位讀者批評指正。

WinUI 3 是什麼

WinUI 3 是 Windows App SDK 內的本機 UI 平臺元件,那這個 Windows App SDK 又是什麼東西,和 Windows SDK 有什麼關係,是不是改名部的新操作?

按照微軟的檔案所說,Windows App SDK 是一組新的開發人員元件和工具,它們代表著 Windows 應用開發平臺的下一步發展方向,Windows App SDK 不會代替 Windows SDK 或現有桌面 Windows 應用型別(比如 WinForm、WPF、Win32),而是使用一組通用 API 來補充這些現有工具和應用型別,開發人員可以在這些平臺上依賴這些 API 來執行操作 [4]

微軟的檔案真不講人話, 簡單來說,WinUI 3 是 Windows 平臺最新一代本機應用開發框架,繼承了 UWP 的設計語言和 Win32 的執行方式,同時結合了兩者的優點,但是也帶來了只能跑在 Windows 10 1809 (17763) 及以上版本的限制。

WinUI 3 的優缺點

以下內容總結自我個人的開發體驗,僅為一家之言。

優點

  • 顏值高。 我選擇 WinUI 3 的最重要的原因就是外觀,WinUI 3 使用了和 UWP 相同的 UI 框架,完美實現了 Fluent Design 設計語言,控制元件自帶動畫效果,也能夠使用亞克力和雲母材質,適合我這種沒有 UI 設計能力的。
  • 效能好。 .NET 6 的效能毋庸置疑。
  • 許可權高。 WinUI 3 本質上是一個 Win32 應用,沒有了 UWP 中嚴格的許可權限制,可以放開手腳隨便來。

缺點

  • 開發體驗差。 到現在還沒有設計器,只能對著一個 XAML 檔案空寫,為此我已經練就了一套腦內渲染本領。其次是編譯速度慢,真的非常慢。
  • 安裝包體積大。 釋出 WinUI 3 專案必須包含 .NET 執行時,並且暫時還不支援剪裁,一個禁用 ReadyToRun 編譯的 WinUI 3 空專案安裝包就有 40.6 MB,啟用 ReadyToRun 後更是膨脹到 51.5 MB。(Windows App SDK v1.1.4 x64)
  • 互操作效能差。 .NET 6 的效能確實毋庸置疑,但是 WinUI 是一個 Native 框架,對控制元件依賴屬性的讀寫需要通過 CsWinRT 互操作,經過測試要比 WPF 要慢很多 [5]
  • 生態差。 WinUI 3 正式釋出不到一年,第三方控制元件還很少,大部分情況下需要自己寫控制元件。

安裝包體積大和互操作效能差僅對於 C# 而言,C++ 開發的 WinUI 3 應用沒有這些問題。

總的來說,WinUI 3 是一個未來可期的框架,既有顏值也有體驗(當然不是指開發體驗)。但是 WinUI 3 本身很難開發高效能的生產力軟體,這注定了它不太可能在大型商業軟體領域有所作為。而在更廣闊的娛樂或工具應用中,WinUI 3 可能會成為一部分新專案的選擇,比如 愛奇藝 Preview 。WinUI 3 的未來到底如何,我們拭目以待。

關於本系列

  • WinUI 3 踩坑記 不是完整的系列教學,只是和 WinUI 3 相關隨筆的合集
  • 本系列預設讀者瞭解
    • C# 11 和 XAML 的語法
    • .NET 6 Runtime API
    • WinUI 控制元件和 WinRT API
    • Win32 視窗相關知識
  • 若無特殊說明,本系列文章中程式碼依賴的環境為 Windows 11 22H2 (22621) x64, C# 11 (.NET 6), Windows App SDK v1.1.5
  • 系列的所有文章和程式碼都存檔於 GitHub@Scighost/WinUI3Keng,若內容出現衝突以 GitHub 上的為準

開發工具

除了在 Visual Studio 中必裝的負載以外,推薦幾個提升效率的工具。

Microsoft UI Xaml
WinUI 控制元件樣式原始碼,這算是必看內容之一。開發中遇到的一些問題,比如 NavigationView 的背景色怎麼修改, CheckBox 為什麼這麼寬, 怎麼去掉 ListView 選中時的效果 這些問題都可以通過修改控制元件樣式來解決。

Windows Community Toolkit Sample App
社群工具箱,開發 WinUI 基本離不開這個東西。

WinUI Gallery
這是官方的控制元件展示,WinUI 的所有自帶的控制元件都能在裡面找到用法。有 WinUI 2WinUI 3 兩個版本,內容差不多,我覺得 WinUI 2 版的比較好用。

Character Map UWP
字元對映表,一個檢視和搜尋字型字元的工具。開發過程中經常要查詢一些字型圖示,在這個應用中都能很方便地找到,還能直接複製生成的程式碼。

參考