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


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

     

    一、呈现方法

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

    复制代码
     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) 方法中扩展了三个呈现方法,增加一个属性呈现方法。

    复制代码
     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),增加了设计时支持以创建子控件

    复制代码
    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中注册

    复制代码
     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> 
  • 相关阅读:
    40个GitHub上最受欢迎的iOS开源项目
    Swift应用开源项目推荐
    swift在github上开源的地址
    必须Mark!43个优秀的Swift开源项目推荐
    Swift中编写单例的正确方式
    Android提高第十一篇之模拟信号示波器
    Android平台音频信号FFT的实现
    ios UINavigationController
    工作记录8:iOS 传值问题总结(7种传值完美介绍)
    利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
  • 原文地址:https://www.cnblogs.com/Jeely/p/11157144.html
Copyright © 2020-2023  润新知