在上一篇文章中,曾經提及“復雜屬性”的概念。復雜屬性的最大特征是屬性的類型是本身具有屬性(稱為子屬性)的類。通常情況下,復雜屬性表現為3種形式:連字符形式屬性、內部嵌套形式屬性和內部嵌套形式默認屬性。本文將介紹以上3種形式復雜屬性的具體實現方法。
1. 實現連字符形式復雜屬性
連字符形式屬性是比較常見的復雜屬性。我們常用的Font屬性就是一個復雜屬性,其包括多個子屬性,如Bold、Name等。這種類型屬性具有兩種語法格式:一種是利用連字符語法,在控件的開始標記中保存子屬性,例如,Font-Bold,Font-Name。另外一種格式是在控件的標記中保存子屬性,例如,<font Bold="true" />。后者比前者的可讀性強。
實現連字符形式的復雜屬性,必須對該復雜屬性及其子屬性實現設置指定的設計時元數據。下面首先列舉了復雜屬性實現過程中的相關元數據設置示例。請閱讀下面的源代碼。
public class CustomerControl:WebControl{
[ DesignerSerializationVisibility( DesignerSerializationVisibility.Content), NotifyParentProperty(true) ]
public SizeInfo Size { ...... }
}
如上代碼所示,Size是一個復雜屬性,其屬性類型為SizeInfo(自定義類)。在Size屬性實現前設置了兩個設計時元數據:DesignerSerializationVisibility和NotifyParentProperty。DesignerSerializationVisibility用于指定在設計時序列化組件上的屬性時,所使用的持久性類型。其值設置為DesignerSerializationVisibility.Content枚舉值,用于指定序列化程序應該序列化屬性的內容即子屬性,而不是Size屬性本身,因為序列化Size沒有任何意義。另外,還包括一個NotifyParentProperty(true)設置,它的作用是使得屬性瀏覽器中對子屬性的修改通知一直上傳到對象模型,并在被修改了子屬性的控件中產生修改通知。
在完成了復雜屬性的元數據設置后,開發人員還必須對子屬性設置相關的設計時元數據。例如,Size包括兩個子屬性Height和Width,那么它們的實現代碼應如下所示。
[TypeConverter(typeof(ExpandableObjectConverter))]public class SizeInfo{
[ NotifyParentProperty(true) ]
public UInt32 Height {......}
[ NotifyParentProperty(true) ]
public UInt32 Width {......}
}
如上代碼所示,子屬性Height和Width分別被設置了元數據NotifyParentProperty(true)。這樣,當子屬性發生修改時,.NET框架將自動產生修改通知,并且通知到父屬性Size。另外,還有一個設計時特性TypeConverter(typeof(ExpandableObjectConverter)),它告訴屬性瀏覽器提供擴展和折疊樣式,這樣控件開發者可以在屬性瀏覽器中直接編輯子屬性。
以上介紹了聲明連字符形式屬性的方法。從中可以看出,在聲明連字符屬性過程中需要把握兩個要點:一是復雜屬性的設計時元數據設置;二是子屬性的設計時特性設置。
新聞熱點
疑難解答
圖片精選