2) 从Control和WebControl继承的属性
如前面文章所述,如果需要开发没有UI的控件或者组合其他呈现它们自己的UI的控件,则从System.Web.UI.Control基类派生。为此,读者应该了解一些Control类的常见属性。如表1列举了Control基类常用属性,它们在开发服务器控件过程中经常被使用。
属性 |
数据类型 |
说明 |
Controls |
ControlCollection |
获取 ControlCollection 对象,该对象表示 UI 层次结构中指定服务器控件的子控件 |
Adapter |
ControlAdapter |
获取控件的浏览器特定适配器。(asp.net 2.0新增) |
AppRelativeTemplateSourceDirectory |
string |
获取或设置包含该控件的 Page 或 UserControl 对象的应用程序相对虚拟目录。(asp.net 2.0新增) |
EnableTheming |
bool |
获取或设置一个值,该值指示是否对此控件应用主题。(asp.net 2.0新增) |
Page |
Page |
获取对包含服务器控件的 Page 实例的引用。 |
Parent |
Control |
控件属于其Controls集合的控件。(如果控件B是A.Controls的一个元素,则控件A是控件B的父级) |
EnableViewState |
Bool |
指示控件在往返过程中是否维护其视图状态。如果父控件不维护其视图状态,则自动不维护其子控件的视图状态 |
TemplateControl |
TemplateControl |
获取或设置对包含该控件的模板的引用。(asp.net 2.0新增) |
UniqueID |
String |
页框架给控件分配的分层限定的唯一标识符 |
ClientID |
String |
给控件分配的唯一标识符,该唯一标识符在客户端上呈现为HTML ID特性。ClientID与UniqueID是不同的,这是因为UniqueID可以包含冒号字符(:),而在HTML ID特性中该字符无效(并且不允许在客户端脚本的变量名中使用) |
页框架
如前面文章所述,如果创建具有UI的自定义服务器控件,则应该从WebControl或System.Web.UI.WebControls中的任何控件派生,该命名空间为自定义控件提供适当的起点。同样的道理,读者应了解一些来自WebControl类的常见属性,它们可为控件自动继承。表2列举了这些属性。
属性 |
数据类型 |
说明 |
BackColor |
Color |
获取或设置Web服务器控件的背景色。 |
BorderColor |
Color |
获取或设置Web控件的边框颜色。 |
BorderStyle |
BorderStyle |
获取或设置Web服务器控件的边框样式。 |
BorderWidth |
Unit |
获取或设置Web服务器控件的边框宽度。 |
ControlStyle |
Style |
获取Web服务器控件的样式。 |
CssClass |
String |
获取或设置由Web服务器控件在客户端呈现的级联样式表(CSS)类。 |
Enabled |
Bool |
获取或设置一个值,该值指示是否启用Web服务器控件。 |
EnableTheming |
bool |
获取或设置一个值,该值指示是否对此控件应用主题。(asp.net 2.0新增) |
Font |
FontInfo |
获取与Web服务器控件关联的字体属性。 |
ForeColor |
Color |
获取或设置Web服务器控件的前景色(通常是文本颜色)。 |
Height |
Unit |
服务器控件高度 |
Width |
Unit |
服务器控件宽度 |
SkinID |
string |
获取或设置要应用于控件的外观。(asp.net 2.0新增) |
3) 与属性相关的设计时元数据
创建服务器控件是为了提高应用开发效率,每个控件开发者都希望自己创建出的控件能够像.NET框架中的内置标准服务器控件那样功能强大且易于使用。例如,当控件应用者在设计界面点击控件时,可能会希望某些属性能够高亮显示,某些属性能够显示在属性浏览器中等等。如何才能使控件具有这样的功能呢?这就需要在代码中加入相关的设计时支持代码。
实际上,实现设计时元数据是一个比较复杂的内容。然而,作为初学者而言,我们没有必要掌握得过于深入,下面笔者只讲解一些常见的与属性相关的设计时元数据设置。如下所示代码,列举了一些与属性相关的设计时元数据设置和简要说明。
· Bindable
这个特性表示属性是否可以绑定一个有效数据源。通常使用布尔值进行设置,例如:Bindable(true)。如果使用值true标记属性,表示该属性可以绑定一个有效数据源,且应引发该属性的属性更改通知;如果属性值为false,则表示该属性不能绑定数据。
· Browsable
指定属性是否应该在属性浏览器中显示,使用布尔值设置。通常情况下,公用属性和那些希望在属性浏览器中显示的属性被设置为Browsable(true),只读属性和那些不希望在属性浏览器中见到的属性被设置为Browsable(false)。
· Category
指定属性在属性浏览器中进行分组显示的类别。该设计时特性帮助可视化编辑器将属性进行逻辑分组。通常分为:外观(Appearance)、行为(Behavior)、布局(Layout)、数据(Data)、操作(Action)、键盘(Key)、
鼠标(Mouse)等。除此之外,读者还可以自定义分类,例如Category("ItemStyle"),表示该属性在属性浏览器中显示为ItemStyle一组。
· Description
指定显示在属性浏览器下方,属性的文字说明。例如:Description("this is a property")。
以上内容是实现属性过程中最为常见的设计时元数据设置。无论对于简单属性,还是复杂属性都应该根据需要设置。
· DesignerSerializationVisibility
指定属性是否以及如何在代码中序列化,其值为DesignerSerializationVisibility的枚举值。存在三种设置方式:
(1)DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),指定序列化程序不应该序列化属性的值;
(2)DesignerSerializationVisibility(DesignerSerializationVisibility.Visible),指定应该允许序列化程序序列化属性的值;
(3)DesignerSerializationVisibility(DesignerSerializationVisibility.Content),指定序列化程序应该序列化属性的内容,而不是属性本身。此字段为只读。需要注意的是:没有DesignerSerializationVisibility特性的成员将被视为具有值为DesignerSerializationVisibility.Visible的DesignerSerializationVisibility特性。如果可能,序列化程序会将标记为Visible的属性值序列化为该类型。
· NotifyParentProperty
指示当此特性应用到的属性的值被修改时将通知其父属性。换言之,如果属性的父属性应该在该属性值更改时接到通知,则向该属性应用NotifyParentProperty特性。通常使用布尔值进行设置。例如,Size属性具有两个嵌套的子属性:Width和Height。那么属性Width和Height就应标记为NotifyParentPropertyAttribute(true),以便当属性值更改时,它们可以通知父属性来更新其值并显示。
· ParseChildren
使用该特性指示当在页上以声明方式使用控件时,嵌套在服务器控件标记内的XML元素是应该视为属性还是应视为子控件。通常情况下,包含两种声明方式:(1)ParseChildren(true),表示将子XML元素作为服务器控件的属性分析,ParseChildren(false),表示将子XML元素作为服务器控件的子控件分析;(2)ParseChildren(bool childrenasProperty , string defaultProperty),其中childrenasPropety和方式1中的布尔值参数意义相同,defaultProperty定义默认情况下将子控件分析为的服务器控件的集合属性。
· PersistChildren
该特性指示设计时是否应将服务器控件的子控件作为内部嵌套控件保持。如果该特性为PersistChildren(true),则将服务器控件的子控件作为嵌套服务器控件标记保持。如果为PersistChildren(false),则将该控件的属性作为嵌套元素保持。
· PersistenceMode
指定如何将服务器控件属性或事件保持到ASP.NET页的元数据属性。共存在4种枚举设置方式:
(1)PersistenceMode(PersistenceMode.Attribute),指定属性或事件保持为特性;
(2)PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty),指定属性作为服务器控件的唯一内部文本而。属性值是HTML编码的。只能对字符串做这种指定;
(3)PersistenceMode(PersistenceMode.InnerDefaultProperty),指定属性在服务器控件中保持为内部文本。还指示将该属性定义为元素的默认属性。只能指定一个属性为默认属性;
(4)PersistenceMode(PersistenceMode.InnerProperty),指定属性在服务器控件中保持为嵌套标记。这通常用于复杂对象;它们具有自己的持久性属性;
· DefaultProperty
指定服务器控件的默认属性。例如:[DefaultProperty("MyProperty")]。
· TypeConverter
指定用作此特性所绑定到的对象的转换器的类型。用于转换的类必须从TypeConverter继承。使用ConverterTypeName属性来获取为该特性所绑定到的对象提供数据转换的类名。