隨著.NET技術的不斷發展和成熟,服務器控件越來越受到廣大開發人員的喜愛。同時,服務器控件的發展也呈現出一些趨勢,例如,功能越來越強大,很多功能逐漸從服務器端轉移到客戶端。另外,服務器控件也越來越美觀。這可能與Windows操作系統越來越講求功能與外觀統一的發展思路有關。本文及其隨後的幾篇文章將重點介紹如何為服務器控件實現漂亮的外觀。實際上,服務器控件的外觀主要由樣式屬性決定。本文重點對實現控件樣式的基本知識進行概括性講解。
服務器控件樣式簡介
對於普通應用開發人員而言,只需要知道服務器控件具有哪些樣式屬性,並了解每一個樣式屬性可能為控件外觀帶來的影響即可。例如,如果需要修改頁面背景顏色,則需要修改樣式屬性BackgroundColor值;如果需要設置表格對象外觀,那麼可能需要設置BorderColor、BorderWidth等樣式屬性。然而,對於一名控件開發人員而言,他們不僅需要掌握應用開發人員所掌握的相關知識,而且還必須了解構建控件樣式屬性的創建方法。
通常,具有樣式屬性的服務器控件均繼承自System.Web.UI.WebControl基類。這樣,控件類可自動繼承基類中的多個樣式屬性。這些樣式屬性包括獲取或者設置控件背景顏色的BackColor、獲取或者設置控件前景顏色的ForeColor、獲取或者設置控件邊框顏色的BorderColor、獲取或者設置控件邊框樣式的BorderStyle等等。如果控件類從WebControl基類繼承,那麼這些樣式屬性可自動得到繼承,並且允許開發人員根據具體情況,對這些樣式屬性進行重寫。另外,如果控件類繼承自其他現有控件類,例如 GridView,那麼自定義控件將自動繼承GridView基類的樣式屬性,如設置交替數據行樣式的AlternatingRowStyle、設置正在編輯的數據行的樣式EditRowStyle等等。很顯然,這些繼承自已有服務器控件的樣式屬性並非此處要討論的重點。然而,讀者應了解樣式屬性允許從基類繼承並無需修改即可直接使用的。下面繼續討論WebControl類中的樣式屬性。
WebControl類的樣式均封裝在ControlStyle屬性中。該屬性值是Style數據類型。為了更好的了解ControlStyle,下面列舉了ControlStyle屬性的定義代碼。
private Style _controlStyle;
//定義ControlStyle屬性
public Style ControlStyle{
get {
if(_controlStyle == null) {
_controlStyle = CreateControlStyle();
if(IsTrackingViewState) {
((IStateManager)_controlStyle).TrackViewState();
}
}
}
}
//定義CreateControlStyle方法
protected virtual Style CreateControlStyle(){ return new Style(ViewState);}
如上代碼所示,ControlStyle是一個只讀屬性,其數據類型為Style。當第一次訪問該屬性的時候被創建,其過程為:首先,判斷_controlStyle是否為空,如果為空,則調用CreateControlStyle方法來創建_controlStyle對象,即一個Style的實例。然後,執行視圖狀態跟蹤任務,其具體過程由Style類所提供的TrackViewState方法來完成。
在初步了解ControlStyle屬性之後,接著我們應了解與該屬性密切相關的Style類。
Style類用於表示服務器控件的樣式,其包括以下幾個屬性:
(1)BackColor,獲取或者設置Web服務器控件的背景色;
(2)BorderColor,獲取或者設置控件的邊框顏色;
(3)BorderStyle,獲取或者設置控件的邊框樣式;
(4)BorderWidth,獲取或者設置控件的邊框寬度;
(5)CssClass,獲取或者設置控件在客戶端呈現的級聯樣式表類;
(6)Font,獲取與控件關聯的字體屬性;
(7)ForeColor,獲取或者設置控件的前景顏色;
(8)Height,獲取或者設置控件的高度;
(9)IsEmpty,獲取一個值,該值指示是否已經在ViewState中定義任何樣式元素;
(10)IsTrackingViewState,返回一個值,該值指示是否正在跟蹤其視圖狀態的更改。
(11)RegisteredCssClass,獲取已向控件注冊的級聯樣式表類;
(11)ViewState,獲取保存樣式元素的視圖狀態。