自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解ASP.NET自定義樣式屬性

開發(fā) 后端
本文介紹ASP.NET自定義樣式屬性發(fā)現(xiàn)BackColor屬性能夠呈現(xiàn)但ImageUrl 無法呈現(xiàn),那說明我們剛才自定義的類就失去意義了,也說明我們還未重寫某個方法。

位于WebControls命名空間的style類為頂級樣式類.大部分標準控件都擁有其樣式屬性.

1.下面為設置樣式方法

(1)你可以直接設置控件樣式

  1. Button1.BackColor = System.Drawing.Color.Red; 

(2)通過獲取web控件的樣式集合來設置

  1. Button1.ControlStyle.BackColor = System.Drawing.Color.Red; 

(3)通過設置樣式類,利用WebControl類的ApplyStyle方法來復制非空樣式,并改寫現(xiàn)有樣式

  1. myStyle.BackColor = System.Drawing.Color.Red;  
  2. Button1.ApplyStyle(myStyle); 

(4)一直定義樣式表屬性,不使用控件屬性,與定義HTML樣式相同.

  1. style="background-color: red" 

下面引出話題,為什么要使用樣式?大家知道定義樣式可以使用統(tǒng)一風格,定義好的樣式,可以重復使用.再回來看上面設置樣式方法.

2.了解WebControl.BackColor和Style.BackColor

(1)和(2)是差不多的.但(3)則不同,(3)的定義方法有通用性,你可以定義一種樣式,然后利用控件的ApplyStyle方法來引用樣式.給樣式編程提供了方面

WebControl類定義了通用的樣式.(1)和(2)使用的樣式屬性與(3)不同

3.ASP.NET自定義樣式屬性

剛開始就講了style類為通用的頂級樣式類,但需求是會發(fā)生變化的. 好了,下面真正開始編碼了.
下面以改寫label控件為例子

(1)改寫樣式屬性,讓其默認背景為紅色,相信大家一定看的懂

  1. namespaceCustomComponents  
  2. {  
  3. [ToolboxData(@"<{0}:ImageLabel1  
  4. BackColor='Red' 
  5. runat='server'></{0}:ImageLabel1>")  
  6. ]  
  7. publicclassImageLabel1:Label  
  8. {  
  9. publicoverridestringText  
  10. {  
  11. get{returnViewState["Text"]!=null?(string)ViewState["Text"]:base.ID;}  
  12. set{ViewState["Text"]=value;}  
  13. }  
  14.  
  15. publicoverrideSystem.Drawing.ColorBackColor  
  16. {  
  17. get  
  18. {  
  19. returnbase.BackColor=System.Drawing.Color.Red;  
  20. }  
  21. set  
  22. {  
  23. base.BackColor=value;  
  24. }  
  25. }  
  26. }  

(2)為label新增一個背景圖片的屬性,重寫了一下AddAttributesToRender方法,添加一個樣式屬性,AddAttributesToRender方法以前為大家講過,這里不多講了.

  1. namespaceCustomComponents  
  2. {  
  3. publicclassImageLabel2:Label  
  4. {  
  5. [BrowsableAttribute(true)]  
  6. [DescriptionAttribute("背景")]  
  7. [CategoryAttribute("Appearance")]  
  8. publicvirtualStringImageUrl  
  9. {  
  10. get{returnViewState["imageUrl"]!=null?(string)ViewState["imageUrl"]:"";}  
  11. set{ViewState["imageUrl"]=value;}  
  12. }  
  13. overrideprotectedvoidAddAttributesToRender(HtmlTextWriterwriter)  
  14. {  
  15. writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundImage,ImageUrl);  
  16. base.AddAttributesToRender(writer);  
  17. }  
  18. }  

(3)上面示例二中我們定義了背景樣式,其實.net已經(jīng)為我們把工作做好了,從style類派生了很多樣式類,擴展了style類的屬性,滿足不同控件樣式的需求.

(4)使用派生樣式類,定義控件樣式屬性.示例四中說過了,沒有定義控件樣式屬性,只改寫了CreateControlStyle方法.那就意味了你定義的控件樣式屬性可以直接使用TableStyle類中的屬性,但默認情況下的樣式屬性為style類中屬性,所以需要強行轉(zhuǎn)換.

4.自定義類型化樣式屬性

如果樣式屬性無法滿足你需求,則你可以通過自定義類型化樣式來實現(xiàn).
什么是自定義類型化樣式?就是該類從style類派生,對其進行修改和擴充(書上就這么寫了...我就這么理解了-_-)

如Table控件,一方面控件ASP.NET自定義樣式屬性,另一方面又定義了TableStyle類.你可以在使用控件樣式屬性和TableStyle類中進行選擇.

但TableStyle類具有通用性,具有一定的靈活性.好了下面我們又要開始看代碼了.當然從簡單開始

(1)簡單呈現(xiàn)樣式屬性

需要說明的注意點如下
1.重寫LabelStyle(StateBag viewState)構造函數(shù)
2.樣式屬性需用視圖狀態(tài)來聲明
3.Style類的重載的AddAttributesToRender方法需用兩個參數(shù)的方法
AddAttributesToRender(HtmlTextWriter writer, WebControl owner)

2)使用編程

下面我們以編程方式,給控件添加ASP.NET自定義樣式屬性。發(fā)現(xiàn)BackColor屬性能夠呈現(xiàn)但ImageUrl 無法呈現(xiàn),那說明我們剛才自定義的類就失去意義了,也說明我們還未重寫某個方法.

  1. protectedvoidPage_Load(objectsender,EventArgse)  
  2. {  
  3. //默認label控件  
  4. TableStylea=newTableStyle();  
  5. a.BackImageUrl="images4.bmp";  
  6. a.BackColor=System.Drawing.Color.Red;  
  7. Label1.ApplyStyle(a);  
  8. //自定義控件  
  9. ImageLabel3_1.ApplyStyle(a);  

【編輯推薦】

  1. 微軟發(fā)布ASP.NET MVC 2預覽版 多項功能更新
  2. ASP.NET服務器自定義控件安全準則
  3. ASP.NET編程規(guī)范之編碼規(guī)范淺析
  4. 關于ASP.NET Session的一點認識
  5. ASP.NET編程工具ASP.NET Web Matrix詳細介紹
責任編輯:佚名 來源: 博客園
相關推薦

2009-08-06 17:13:56

ASP.NET自定義控

2009-08-06 17:52:45

ASP.NET控件開發(fā)自定義控件

2011-04-19 10:33:16

ASP.NET自定義控

2009-11-24 15:11:21

ASP.NET MVC

2010-04-30 09:32:49

ASP.NET MVC

2009-07-28 09:32:41

ASP.NET自定義控

2009-08-10 14:16:59

ASP.NET自定義控

2009-04-09 09:51:09

ASP.NETSQL Server 自定義分頁

2009-07-31 10:23:09

ASP.NET源碼DateTimePic

2009-08-12 14:38:05

ASP.NET Dat

2009-08-10 16:58:45

ASP.NET安裝部署

2009-07-22 15:27:39

ASP.NET MVC自定義路由

2011-09-08 13:56:41

ASP.NET性能

2009-07-31 14:49:22

asp.net自定義錯

2009-08-05 17:58:53

自定義集合ASP.NET 2.0

2009-08-01 12:00:15

ASP.NET服務器自ASP.NET服務器ASP.NET

2009-08-06 09:18:01

ASP.NET自定義控ASP.NET控件開發(fā)

2011-05-19 10:16:27

ASP.NET

2009-07-29 16:08:07

ASP和ASP.NET

2009-08-07 11:12:58

ASP.NET控件開發(fā)
點贊
收藏

51CTO技術棧公眾號