.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>轉載于:https://www.cnblogs.com/Jeely/p/11157144.html
總結
以上是生活随笔為你收集整理的.net自定义控件Control、WebControl、CompositeControl的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android theme 错误,为什么
- 下一篇: jsonp使用