探索.NET 10中的WinForms暗黑模式:來自Tim Corey的見解
[[academy-video-youtube({"vid": "iVroFsF-h-8", "start_time": "0", "title": "Dark Mode in WinForms in .NET 10 - But It's Not Perfect", "creator": "Tim Corey", "length": "9m 07s"})]]
WinForms 長久以來一直是一個可靠的架構,用於構建 Windows 桌面應用程式。 隨著 .NET 10 的發布,微軟為 WinForms 引入了官方的深色模式支援,為傳統的 Windows Forms 專案帶來現代化外觀。
在他關於 "Dark Mode in WinForms in .NET 10 - But It's Not Perfect" 的影片中,Tim Corey 提供了一個實用的操作示範,向開發者展示如何啟用深色模式,同時指出目前的限制和需要考慮的事項。 跟隨他的示範能夠清楚地理解哪些是可能的以及哪些仍在初步支援階段。
在 WinForms 中引入深色模式
Tim 首先指出,雖然深色模式現在已在 WinForms 中正式實現,但仍存在一些限制。 他將自己的 10 分鐘培訓系列介紹為一種簡潔的方法,適合那些想要快速答案而不是冗長理論解釋的開發者。 using Visual Studio 2026,Tim 開啟了一個簡單的 Windows Forms 專案文件,目標是 .NET 10。該應用程式是一個基本的表單,顯示一個 "Hello World" 訊息,並有一個文字框和按鈕。 為了確保在不同機器間的一致性,他將 DPI 設定為 200%,並標記設計師為不考慮 DPI,這對於避免應用程式在不同 Windows 系統上運行時出現錯誤非常重要。 這一初始設置使他能夠專注於 WinForms 中的深色模式功能。
透過 Program.cs 啟用深色模式
Tim 解釋說,WinForms 應用程式的主要進入點在於內部的靜態類別 Program 與靜態方法 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 所解釋,微軟正逐步轉換函式庫以支持深色模式,但在某些方面這項功能仍然屬於實驗性。 需要在所有控制項間提供一致主題支持的開發者可能需要使用第三方函式庫或建立自訂控制項。
限制:僅支援 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 的 影片,開發者可以自信地設置顏色模式,測試其表單,並決定如何為使用者最好地實施深色模式。

