.net自定义控件Control、WebControl、CompositeControl

来源:互联网 发布:java输出平行四边形 编辑:程序博客网 时间:2024/05/21 09:33

一、呈现方法

1、Control主要有以下4个方法用于呈现

[csharp] view plain copy
  1. //该方法为入口方法  
  2. public virtual void RenderControl (HtmlTextWriter writer)     
  3. {          
  4.   this.RenderControl(writer,this.xxxAdapter);     
  5. }     
  6.   
  7. protected void RenderControl(HtmlTextWriter writer, ControlAdapter adapter)     
  8. {  
  9.   if (adapter != null)  
  10.   {  
  11.     //调用相关的适配器方法  
  12.   }  
  13.   else  
  14.   {  
  15.     this.Render(writer);  
  16.   }     
  17. }  
  18.   
  19. protected internal virtual void Render(HtmlTextWriter writer)  
  20. {  
  21.   this.RenderChildren();  
  22. }  
  23.   
  24. protected internal virtual void RenderChildren(HtmlTextWriter writer)  
  25. {  
  26.   //呈现子控件    
  27. }  
  28.   
  29. /* 
  30. 整个呈现顺序就是:    
  31. 1.RenderControl(HtmlTextWriter writer)    
  32. 2.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)    
  33. 3.Render(HtmlTextWriter writer)    
  34. 4.RenderChildren(HtmlTextWriter writer) 
  35. */  

2、WebControl在Control的基础上增加了Style,呈现方面就是在Render(HtmlTextWriter writer) 方法中扩展了三个呈现方法,增加一个属性呈现方法。

[csharp] view plain copy
  1. protected override void Render(HtmlTextWriter writer)    
  2. {           
  3.   this.RenderBeginTag(writer);    
  4.   this.RenderContents(writer);    
  5.   this.RenderEndTag(writer);    
  6. }   
  7.   
  8. public virtual void RenderBeginTag  (HtmlTextWriter writer)    
  9. {    
  10.   this.AddAttributesToRender(writer);    
  11.   //呈现Tag开始标记   
  12. }        
  13.     
  14. protected internal virtual void RenderContents  (HtmlTextWriter writer)    
  15. {    
  16.   //调用Control的呈现    
  17.   base.Render(writer);    
  18. }     
  19.     
  20. public virtual void RenderEndTag(HtmlTextWriter writer)    
  21. {    
  22.   //呈现结束标记    
  23. }     
  24.     
  25. protected virtual void AddAttributesToRender  (HtmlTextWriter writer)    
  26. {    
  27.   //呈现Attribute   
  28. }   

3、CompositeControl重写了WebControl的Render (HtmlTextWriterwriter),增加了设计时支持以创建子控件

[csharp] view plain copy
  1. protected internal override void Render(HtmlTextWriterwriter)    
  2. {    
  3.   //如果在设计时,创建子控件,也就是在设计时增加友好体验    
  4.   if(DesignMode)    
  5.     this.EnsureChildControls();    
  6.   base.Render(writer);    
  7. }  


二、自定义控件常用的特性

1、命名控件特性
① [assembly: TagPrefix("Samples.AspNet", "myControls")]   //指定@Register指令中的tagprefix值,Samples.AspNet是命名空间


2、控件特性
① [DefaultProperty("Text")]      //打开IDE属性窗口时默认选中的属性项
② [ToolboxData("<{0}:myCustomControl runat=server></{0}:myCustomControl>")]   //从工具箱拖放控件生成的默认标记,可以加上其它想默认显示的属性


3、属性特性
① [Bindable(true)]                //设置该属性是否支持绑定
② [DefaultValue("")]              //属性的默认值(如果在IDE属性栏里输入的值与该值相同,IDE中的这个值不变黑)。显示的默认值则要在构造函数里赋值。
③ [Localizable(true)]             //属性是否支持本地化
④ [Browsable(true)]               //该项属性是否会显示在控件的“属性”窗口中
⑤ [Description("显示的文本")]     //属性的说明
⑥ [Category("Appearance")]        //属性分组的类别名称,可以是自定义的值
   Action:“操作”组
   Appearance:“外观”组
   Behavior:“行为 ”组
   Data:“数据”组
   Default:“杂项”组
   Design:“设计”组
   DragDrop:“拖放”组
   Focus:“焦点”组
   Format:“格式”组
   Key:“键盘”组
   Layout:“布局”组
   Mouse:“鼠标”组
   WindowStyle:“窗口样式”组
⑦ [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]  //指定属性是否在网页的源代码中显示
    DesignerSerializationVisibility.Hidden   //在代码生成器中不生成属性代码,在aspx的源文件中将看不到此属性
    DesignerSerializationVisibility.Visible  //在代码生成器中生成属性代码
    DesignerSerializationVisibility.Content  //在代码生成器中生成的是属性内容的代码,而不是属性本身的代码。只影响aspx中的代码生成器中显示的属性。
⑧ [TypeConverter(typeof(ExpandableObjectConverter))]  //将类属性在IDE属性窗口显示出折叠
⑨ [NotifyParentProperty(true)]   //是否将属性窗口中对子属性的修改上传到对象模型,并在被修改了的子属性的控件中产生修改通知。

(枚举属性,类属性)



三、自定义控件在web.config中注册

[html] view plain copy
  1. <configuration>  
  2.   <system.web>      
  3.     <pages>  
  4.       <controls>  
  5.         <add tagPrefix="scottgu" src="~/Controls/Header.ascx" tagName="header"/>  
  6.         <add tagPrefix="scottgu" src="~/Controls/Footer.ascx" tagName="footer"/>  
  7.         <add tagPrefix="ControlVendor" assembly="ControlVendorAssembly"/>  
  8.       </controls>  
  9.     </pages>  
  10.   </system.web>  
  11. </configuration>
阅读全文
0 0