您的位置:首页 > 其它

控件属性、事件持久化

2006-12-10 22:49 288 查看
我们知道,在VS2003中,自定义控件要得到Intellisense的支持,必须手工编写(后来也有人写了生成工具)Schema,但是在VS2005中,Schema是由IDE自动生成的,就是说,你可以自动获得所有public属性和事件的Intellisence。

如果,public的属性不需要在Intellisence得到支持,而只在后台代码中使用,则可以为属性应用[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]标签(但是如果属性同时应用了[Bindable(true)],则属性仍在SourceView中获得智能感知)。

如果属性应用了[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)],则属性类型的信息也会映射到Schema中,比如Style属性,属性类型的子属性也会得到智能感知的支持。

BindableAttribute决定属性和事件是否显示在属性窗口中。

PersistenceMode决定持久化属性的方式,默认为[PersistenceMode(PersistenceMode.Attribute)],表示持久化属性为主标签的属性,如果属性包含子属性,则子属性持久化成破折号连接的样式,比如Font的子属性,Font-Name代表Font.Name子属性;

[PersistenceMode(PersistenceMode.InnerProperty)]表示用嵌套标签表示复杂属性,比如DataList的ItemStyle属性,就使用嵌套的子标签的形式来持久化。

[PersistenceMode(PersistenceMode.InnerDefaultProperty)]与[PersistenceMode(PersistenceMode.InnerProperty)]的区别在于,主标签中的内容分析成此Attribute装饰的Property,比如,上例中的ItemStyle的值需要序列化在一对<ItemStyle></ItemStyle>标签中,而InnerDefaultProperty的属性则可省掉表示属性名的标签对,InnerDefaultProperty在一个类中只能应用一次。

[PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)]和InnerDefaultProperty不同的是,它会对内容进行HTML Encoding,比如把<div>变成<div>,就是说它的里面将不允许存在子控件和HTML标签。比如TextBox.Text。

ParseChildrenAttribute决定标签对中的内容是其它的子控件还是嵌套标签表示的属性。

[ParseChildren(false)]表示把内容分析成子控件或HTML标签(和关联的ControlBuilder协同工作)。

[ParseChildren(true)]表示把内容分析成属性,比如DataList中的<ItemStype>等内容。

ParseChildren属性也可以指定默认属性,比如DropDownList使用[ParseChildren(true, "Items") ]将它的内容默认分析为Items属性的值(DropDownList控件同时在Items属性上装饰了[PersistenceMode(PersistenceMode.InnerDefaultProperty)])。

如果内容中的标签不能分析成控件类型,则会分析成属性。

[PersistChildren]用来装饰一个类,决定这个类把内容分析成控件的子控件,还是控件的元素。[PersistChildren(false,true)]后一个true表示使用自定义的持久化,意味着Schema生成器将不生成也不验证这种控件的内容,比如Xml控件使用内容表示它的xml文档。

[ToolboxItem(false)]意味着控件不会显示在工具箱中,它也不是能独立显示自己内容的控件。比如TableRow,TableCell。

对于Color和枚举类型,Intellisence会自动提供Picker,对于表示Url的string类型属性,可以对它们应用[UrlProperty]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: