上一篇文章對控件樣式屬性的基本概念進行了介紹,同時,還通過示例說明了重寫樣式屬性的方法。本文重點對類型化樣式屬性的創建方法進行講解。
實現類型化樣式屬性的方法
繼承自Style類的類稱為類型化樣式。Style類可以由控件開發人員來擴展,創建一個自定義類型化樣式,它重寫或者添加Style類的屬性。服務器控件也可以把自定義類型化樣式作為ControlStyle屬性的類型。例如,Table控件的ControlStyle屬性就是TableStyle類型,該類型是擴展的Style,添加了例如CellPadding、CellSpacing和GridLines屬性等。在初步了解類型化樣式屬性的基本概念之後,下面列舉了實現類型化樣式屬性的方法要點。
(1)創建一個派生自System.Web.UI.WebControls.Style的類;
(2)定義樣式將為控件提供的屬性。在Style的ViewState字典中保存該屬性;
(3)重寫CopyFrom和MergeWith方法,從定義的屬性中復制或者將定義的屬性和一個給定樣式的屬性合並;
(4)重寫Reset方法,刪除添加到ViewState中的屬性;
(5)重寫AddAttributesToRender方法,產生HTML和CSS特性,作為控件呈現過程的一部分。
實際上,創建類型化樣式屬性並不是一個簡單的過程。為此,下面我們將通過典型應用示例來說明創建的具體方法,以便讀者加深對於實現要點的理解。
典型應用
本節通過創建一個MyPanel控件以及相關聯的類型化樣式MyPanelStyle,來講解如何實現並使用自定義類型化樣式。就功能而言,MyPanel與ASP.NET 2.0內置的Panel控件是一致。開發人員可以通過把需要添加的控件嵌套在控件的標簽中,向Controls集合中添加控件。在可視化設計器中,把所需添加的控件拖放到Panel的設計界面上,就可以把控件添加到Controls集合中。然而,MyPanel並不是從Panel類繼承而來,而是自定義實現的結果,同時,該控件還提供了類型化樣式屬性MyPanelStyle,其中設置了3個樣式屬性:
(1)BackImageUrl,用於指定背景圖片的URL;
(2)HorizontalAlign,用於指定所添加內容的水平對其方式;
(3)Wrap,用於指定是否允許對所添加的內容換行。
下面列舉了示例效果圖。
圖1
如圖1所示,圖中顯示了一個MyPanel控件,其中包括一行文字,文字的背景圖像已經定義,並且文字處於居中位置。