详解ASP.NET自定义样式属性

开发 后端
本文介绍ASP.NET自定义样式属性发现BackColor属性能够呈现但ImageUrl 无法呈现,那说明我们刚才自定义的类就失去意义了,也说明我们还未重写某个方法。

位于WebControls命名空间的style类为顶级样式类.大部分标准控件都拥有其样式属性.

1.下面为设置样式方法

(1)你可以直接设置控件样式

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

(2)通过获取web控件的样式集合来设置

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

(3)通过设置样式类,利用WebControl类的ApplyStyle方法来复制非空样式,并改写现有样式

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

(4)一直定义样式表属性,不使用控件属性,与定义HTML样式相同.

  1. style="background-color: red" 

下面引出话题,为什么要使用样式?大家知道定义样式可以使用统一风格,定义好的样式,可以重复使用.再回来看上面设置样式方法.

2.了解WebControl.BackColor和Style.BackColor

(1)和(2)是差不多的.但(3)则不同,(3)的定义方法有通用性,你可以定义一种样式,然后利用控件的ApplyStyle方法来引用样式.给样式编程提供了方面

WebControl类定义了通用的样式.(1)和(2)使用的样式属性与(3)不同

3.ASP.NET自定义样式属性

刚开始就讲了style类为通用的顶级样式类,但需求是会发生变化的. 好了,下面真正开始编码了.
下面以改写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已经为我们把工作做好了,从style类派生了很多样式类,扩展了style类的属性,满足不同控件样式的需求.

(4)使用派生样式类,定义控件样式属性.示例四中说过了,没有定义控件样式属性,只改写了CreateControlStyle方法.那就意味了你定义的控件样式属性可以直接使用TableStyle类中的属性,但默认情况下的样式属性为style类中属性,所以需要强行转换.

4.自定义类型化样式属性

如果样式属性无法满足你需求,则你可以通过自定义类型化样式来实现.
什么是自定义类型化样式?就是该类从style类派生,对其进行修改和扩充(书上就这么写了...我就这么理解了-_-)

如Table控件,一方面控件ASP.NET自定义样式属性,另一方面又定义了TableStyle类.你可以在使用控件样式属性和TableStyle类中进行选择.

但TableStyle类具有通用性,具有一定的灵活性.好了下面我们又要开始看代码了.当然从简单开始

(1)简单呈现样式属性

需要说明的注意点如下
1.重写LabelStyle(StateBag viewState)构造函数
2.样式属性需用视图状态来声明
3.Style类的重载的AddAttributesToRender方法需用两个参数的方法
AddAttributesToRender(HtmlTextWriter writer, WebControl owner)

2)使用编程

下面我们以编程方式,给控件添加ASP.NET自定义样式属性。发现BackColor属性能够呈现但ImageUrl 无法呈现,那说明我们刚才自定义的类就失去意义了,也说明我们还未重写某个方法.

  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. 微软发布ASP.NET MVC 2预览版 多项功能更新
  2. ASP.NET服务器自定义控件安全准则
  3. ASP.NET编程规范之编码规范浅析
  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控件开发自定义控件

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-08-12 14:38:05

ASP.NET Dat

2009-07-31 10:23:09

ASP.NET源码DateTimePic

2009-07-22 15:27:39

ASP.NET MVC自定义路由

2009-08-10 16:58:45

ASP.NET安装部署

2009-08-01 12:00:15

ASP.NET服务器自ASP.NET服务器ASP.NET

2009-08-05 17:58:53

自定义集合ASP.NET 2.0

2009-08-06 09:18:01

ASP.NET自定义控ASP.NET控件开发

2009-07-31 14:49:22

asp.net自定义错

2011-09-08 13:56:41

ASP.NET性能

2009-08-07 11:12:58

ASP.NET控件开发

2011-05-19 10:16:27

ASP.NET

2009-08-01 09:21:12

ASP.NET服务器自ASP.NET服务器控ASP.NET
点赞
收藏

51CTO技术栈公众号