使用視覺化樣式呈現控制項
.NET Framework 使用在支援的作業系統中的視覺化樣式,提供呈現控制項和其他 Windows 使用者介面 (UI) 項目的支援。 這個主題會說明在 .NET Framework 中使用作業系統目前的視覺化樣式來呈現控制項和其他 UI 項目的數種支援層級。
呈現通用控制項的類別
呈現控制項是指繪製控制項的使用者介面。 System.Windows.Forms 命名空間提供呈現一些通用 Windows Form 控制項的 ControlPaint 類別。 然而,此類別會使用傳統的 Windows 樣式繪製控制項,使得在啟用視覺化樣式的應用程式中繪製自訂控制項時,很難維護一致的 UI 經驗。
.NET Framework 2.0 包含使用視覺化樣式呈現常見控制項的部分與狀態的 System.Windows.Forms 命名空間中的類別。 這些類別中每個類別都包含 static 方法,可在使用作業系統目前視覺化樣式的特殊狀態下,繪製控制項或部分的控制項。
不論是否可以使用視覺化樣式,在這些類別中,有一些類別是專門設計來繪製相關的控制項。 如果啟用了視覺化樣式,則類別成員會使用視覺化樣式繪製相關控制項;如果停用了視覺化樣式,類別成員會以傳統的 Windows 樣式繪製控制項。 這些類別包括:
其他類別只能夠在視覺化樣式可用時,繪製相關的控制項,如果停用了視覺化樣式,類別成員便會擲回例外狀況。 這些類別包括:
如需使用這些類別繪製控制項的詳細資訊,請參閱 HOW TO:使用控制項呈現類別。
視覺化樣式項目和呈現類別
System.Windows.Forms.VisualStyles 命名空間所包含的類別可以用來繪製視覺化樣式所支援的任何控制項或 UI 項目,並取得相關的詳細資訊。 支援的控制項包含在 System.Windows.Forms 命名空間 (請參閱前面的章節) 中具有呈現類別的常見控制項,以及其他控制項 (例如索引標籤控制項和 Rebar 控制項)。 其他支援的 UI 項目包含部分的 [開始] 功能表、工具列以及視窗非工作區 (Nonclient Area)。
System.Windows.Forms.VisualStyles 命名空間的主要類別是 VisualStyleElement 和 VisualStyleRenderer。 VisualStyleElement 是基礎類別,可供識別任何控制項或視覺化樣式支援的使用者介面項目。 除了 VisualStyleElement 自身以外,System.Windows.Forms.VisualStyles 命名空間還包含許多具有 static 屬性的 VisualStyleElement 巢狀類別 (Nested Class),該屬性會為視覺化樣式支援的控制項、控制項部分或其他 UI 項目的每個狀態,傳回 VisualStyleElement。
VisualStyleRenderer 提供方法來繪製作業系統目前的視覺化樣式所定義的 VisualStyleElement,並取得每一個項目的詳細資訊。 可以擷取而有關項目的資訊包括其預設大小、背景類型和色彩定義。 VisualStyleRenderer 會包裝 Windows Platform SDK 之 Windows Shell 部分的視覺化樣式 (UxTheme) API 功能。 如需詳細資訊,請參閱 MSDN Library (https://msdn.microsoft.com/zh-tw/library/default.aspx) 中 Platform SDK 部分的<使用 Windows XP 視覺化樣式>。
如需使用 VisualStyleRenderer 和 VisualStyleElement 的詳細資訊,請參閱 HOW TO:呈現視覺化樣式項目。
啟用視覺化樣式
若要在為 .NET Framework 1.0 版撰寫的應用程式中啟用視覺化樣式,程式設計人員必須包含應用程式資訊清單,此清單會指定使用 ComCtl32.dll 6 (含) 以後版本來繪製控制項。 使用 .NET Framework 1.1 (含) 以後版本的應用程式能使用 Application 類別的 Application.EnableVisualStyles 方法。
檢查視覺化樣式支援
Application 類別的 RenderWithVisualStyles 屬性會指出目前的應用程式是否使用視覺化樣式繪製控制項。 在繪製自訂控制項時,您可以檢查 RenderWithVisualStyles 的值,以決定是否應該使用或不使用視覺化樣式呈現控制項。 下表列出四種狀況,這些狀況必須存在才能使得 RenderWithVisualStyles 傳回 true。
狀況 |
備註 |
---|---|
作業系統支援視覺化樣式。 |
若要分別驗證這種狀況,請使用 VisualStyleInformation 類別的 IsSupportedByOS 屬性。 |
使用者已經啟用作業系統中的視覺化樣式。 |
若要分別驗證這種狀況,請使用 VisualStyleInformation 類別的 IsEnabledByUser 屬性。 |
已經啟用應用程式中的視覺化樣式。 |
可以藉由呼叫 Application.EnableVisualStyles 方法或使用應用程式資訊清單 (此清單會指定使用 ComCtl32.dll 6 (含) 以後版本來繪製控制項),啟用應用程式中的視覺化樣式。 |
使用視覺化樣式來繪製應用程式視窗的工作區 (Client Area)。 |
若要分別驗證這種狀況,請使用 Application 類別的 VisualStyleState 屬性,並驗證該屬性具有 VisualStyleState.ClientAreaEnabled 或 VisualStyleState.ClientAndNonClientAreasEnabled 值。 |
若要決定使用者啟用或停用視覺化樣式或在視覺化樣式之間相互切換的時機,請檢查 SystemEvents.UserPreferenceChanging 或 SystemEvents.UserPreferenceChanged 事件處理常式中的 UserPreferenceCategory.VisualStyle 值。
重要事項 |
---|
如果您想在使用者啟用或切換視覺化樣式時使用 VisualStyleRenderer 呈現控制項或 UI 項目,請確定您是在處理 UserPreferenceChanged 事件時這麼做,而非處理 UserPreferenceChanging 事件時。 如果您在處理 UserPreferenceChanging 時使用 VisualStyleRenderer 類別,便會擲回例外狀況。 |