控件属性、事件持久化

  1. 我们知道,在VS2003中,自定义控件要得到Intellisense的支持,必须手工编写(后来也有人写了生成工具)Schema,但是在VS2005中,Schema是由IDE自动生成的,就是说,你可以自动获得所有public属性和事件的Intellisence。
  2. 如果,public的属性不需要在Intellisence得到支持,而只在后台代码中使用,则可以为属性应用[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]标签(但是如果属性同时应用了[Bindable(true)],则属性仍在SourceView中获得智能感知)。
  3. 如果属性应用了[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)],则属性类型的信息也会映射到Schema中,比如Style属性,属性类型的子属性也会得到智能感知的支持。
  4. BindableAttribute决定属性和事件是否显示在属性窗口中。
  5. PersistenceMode决定持久化属性的方式,默认为[PersistenceMode(PersistenceMode.Attribute)],表示持久化属性为主标签的属性,如果属性包含子属性,则子属性持久化成破折号连接的样式,比如Font的子属性,Font-Name代表Font.Name子属性;
  6. [PersistenceMode(PersistenceMode.InnerProperty)]表示用嵌套标签表示复杂属性,比如DataList的ItemStyle属性,就使用嵌套的子标签的形式来持久化。
  7. [PersistenceMode(PersistenceMode.InnerDefaultProperty)]与[PersistenceMode(PersistenceMode.InnerProperty)]的区别在于,主标签中的内容分析成此Attribute装饰的Property,比如,上例中的ItemStyle的值需要序列化在一对<ItemStyle></ItemStyle>标签中,而InnerDefaultProperty的属性则可省掉表示属性名的标签对,InnerDefaultProperty在一个类中只能应用一次。
  8. [PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)]和InnerDefaultProperty不同的是,它会对内容进行HTML Encoding,比如把<div>变成&lt;div&gt;,就是说它的里面将不允许存在子控件和HTML标签。比如TextBox.Text。
  9. ParseChildrenAttribute决定标签对中的内容是其它的子控件还是嵌套标签表示的属性。
  10. [ParseChildren(false)]表示把内容分析成子控件或HTML标签(和关联的ControlBuilder协同工作)。
  11. [ParseChildren(true)]表示把内容分析成属性,比如DataList中的<ItemStype>等内容。
  12. ParseChildren属性也可以指定默认属性,比如DropDownList使用[ParseChildren(true, "Items") ]将它的内容默认分析为Items属性的值(DropDownList控件同时在Items属性上装饰了[PersistenceMode(PersistenceMode.InnerDefaultProperty)])。
  13. 如果内容中的标签不能分析成控件类型,则会分析成属性。
  14. [PersistChildren]用来装饰一个类,决定这个类把内容分析成控件的子控件,还是控件的元素。[PersistChildren(false,true)]后一个true表示使用自定义的持久化,意味着Schema生成器将不生成也不验证这种控件的内容,比如Xml控件使用内容表示它的xml文档。
  15. [ToolboxItem(false)]意味着控件不会显示在工具箱中,它也不是能独立显示自己内容的控件。比如TableRow,TableCell。
  16. 对于Color和枚举类型,Intellisence会自动提供Picker,对于表示Url的string类型属性,可以对它们应用[UrlProperty]
posted @ 2006-12-10 22:49  Think  阅读(3581)  评论(2编辑  收藏  举报