跳過到頁腳內容
Iron Academy Logo
C#框架

探索.NET 10中的WinForms暗模式:來自Tim Corey的洞見

Tim Corey
9m 07s

WinForms 長期以來是一個可靠的框架用於構建 Windows 桌面應用程式。 隨著 .NET 10 的推出,Microsoft 為 WinForms 引入了官方的深色模式支援,為舊版的 Windows Forms 專案帶來了現代的外觀。

在他的視訊 "Dark Mode in WinForms in .NET 10 - But It's Not Perfect" 中,Tim Corey 提供了一個實用操作指南,展示給開發者如何啟用深色模式,並指出目前的限制及考量。 遵循他的演示可以清楚了解什麼是可能的,什麼是在初步支援階段。

WinForms 中深色模式的介紹

Tim 一開始指出,儘管深色模式現已在 WinForms 中正式實施,但仍存在一些限制。 他介紹了他的 10 分鐘訓練系列,這是一種為希望獲得快速答案而非冗長理論解釋的開發者提供的簡明方法。

使用 Visual Studio 2026,Tim 開啟了一個簡單的 Windows Forms 專案檔,目標是 .NET 10。該應用程式是一個顯示 "Hello World" 訊息的簡單表單,具有文本框和按鈕。 為了確保跨越不同機器的一致性,他將 DPI 設為 200%,並將設計器標記為未感知 DPI,這對於避免應用程式在不同 Windows 系統上運行時出錯非常重要。 這個初始設置讓他可以專注於 WinForms 的深色模式功能。

通過 Program.cs 啟用深色模式

Tim 解釋了 WinForms 應用程式的主要入口點是在內部靜態類 Program 和靜態 void Main 方法中。 在這裡,開發者可以在調用 Application.Run 之前設置顏色模式。 他展示了可以在 Application.Initialize() 之前或剛開始啟動主應用程式之前進行顏色模式更改。

WinForms 在 .NET 10 中提供了三個顏色模式選項:

  • 經典:標準亮模式。

  • 深色:為表單和大多數控制項啟用深色模式。

  • 系統模式:檢測當前的 Windows 系統主題並應用於應用程式。

Tim 強調必須在控制項在構造函數或 Form1.Designer.cs 中創建之前設置此屬性。 不這樣做會導致某些控制項即使在運行時啟用深色模式,也保持在亮模式下。

限制:設計器不反映深色模式

Tim 指出了一個關鍵限制:表單設計器不顯示深色模式的變化。 即使在 Program.cs 檔中設置了顏色模式後,設計器仍然會將所有控制項顯示為亮模式。

檢查 Form1.Designer.cs,Tim 強調控制項,如按鈕、文本框和標籤是在構造函數中初始化的。 顏色模式行必須在創建任何控制項實例之前設置。 儘管如此,WinForms 設計器並不會視覺上更新,這在最終確定 UI 佈局時是一個重要考量。

然而,運行應用程式證實了在運行時正確應用了深色模式,文本變成白色,按鈕對懸停做出回應,輸入欄顯示白色文字在深色背景上。

限制:某些控制項不支援深色模式

Tim 強調的另一個限制是並非所有 Windows Forms 控制項都對深色模式有反應。 例如,MessageBox 對話框總是以亮模式顯示,無視系統模式或深色模式設置。

這是因為 WinForms 建立在 Win32 庫上,最初並未設計為考慮深色主題。 正如 Tim 所解釋的,Microsoft 正在逐漸轉換庫以支援深色模式,但在某些方面這一功能仍然是試驗性的。 需要在所有控制項中保持一致主題支援的開發者可能需要使用第三方庫或創建自定義控制項。

限制:僅支持 Windows 11

Tim 注意到另一個重要限制:WinForms 中的深色模式僅在 Windows 11 上有效。在較舊的版本,包括 Windows 10,不論內部靜態類 Program 中設置了什麼,顏色模式將默認回到經典或亮模式。

這一限制在為廣泛用戶群開發應用程式時非常重要。 開發者需要檢測 Windows 系統版本或設置預設回退為亮模式,以避免意外的 UI 不一致性。

限制:系統模式不自動更新

使用系統模式時,WinForms 在應用程式啟動時檢測系統主題。Tim 指出,如果用戶在應用程式運行時更改了 Windows 主題,應用程式將不會自動調整。需要重啟才能更新主題,這是 Win32 回移的內在限制。

這一行為強調了開發者是否選擇強制使用預設主題或依賴系統模式的重要性,並理解運行時的變更需要重啟。

限制:無障礙和高對比主題

Tim 也警告道,深色模式不適用於無障礙主題,包括高對比設置。 如果用戶啟用了 Windows 無障礙主題,表單和控制項將返回亮模式。

這對於想要支持所有用戶場景,尤其是那些依賴對比設置以提高可讀性的開發者來說很重要。

開發人員的實用建議

儘管有這些限制,Tim 強調了在 WinForms 中啟用深色模式的便捷性。 在 Program.cs 檔中只需一行程式碼,使測試和實現變得簡單。

他建議默認使用系統模式,允許應用程式符合用戶的主題,而不是強制特定模式。 Tim 也鼓勵升級到 .NET 10,從而受益於性能改進和深色模式的最終支持,相較於 .NET 9 的實驗支持。

結論

Tim Corey 結論道,儘管 WinForms .NET 10 中的深色模式是一個官方實施的功能,開發者應考慮一些限制:

  • 設計器不顯示深色模式。

  • 某些控制項,如 MessageBox,保持在亮模式。

  • 僅支持 Windows 11; 較舊的系統回退到經典模式。

  • 系統模式變更需要重啟。

  • 無障礙主題與深色模式不兼容。

即便有這些警告,能夠以最小努力啟用深色模式是 Windows Forms 專案的一個受歡迎的新增功能。 通過遵循 Tim Corey 的 視訊,開發者可以自信地設置顏色模式,測試他們的表單,並決定最佳的深色模式實現方式為其用戶。

Hero Worlddot related to 探索.NET 10中的WinForms暗模式:來自Tim Corey的洞見
Hero Affiliate related to 探索.NET 10中的WinForms暗模式:來自Tim Corey的洞見

通過分享您所愛的東西賺得更多

您是否在為使用.NET、C#、Java、Python或Node.js的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我