位于WebControls命名空间的style类为顶级样式类.大部分标准控件都拥有其样式属性.
1.下面为设置样式方法
(1)你可以直接设置控件样式
Button1.BackColor = System.Drawing.Color.Red;
- 1.
(2)通过获取web控件的样式集合来设置
Button1.ControlStyle.BackColor = System.Drawing.Color.Red;
- 1.
(3)通过设置样式类,利用WebControl类的ApplyStyle方法来复制非空样式,并改写现有样式
myStyle.BackColor = System.Drawing.Color.Red;
Button1.ApplyStyle(myStyle);
- 1.
- 2.
(4)一直定义样式表属性,不使用控件属性,与定义HTML样式相同.
style="background-color: red"
- 1.
下面引出话题,为什么要使用样式?大家知道定义样式可以使用统一风格,定义好的样式,可以重复使用.再回来看上面设置样式方法.
2.了解WebControl.BackColor和Style.BackColor
(1)和(2)是差不多的.但(3)则不同,(3)的定义方法有通用性,你可以定义一种样式,然后利用控件的ApplyStyle方法来引用样式.给样式编程提供了方面
WebControl类定义了通用的样式.(1)和(2)使用的样式属性与(3)不同
3.ASP.NET自定义样式属性
刚开始就讲了style类为通用的顶级样式类,但需求是会发生变化的. 好了,下面真正开始编码了.
下面以改写label控件为例子
(1)改写样式属性,让其默认背景为红色,相信大家一定看的懂
namespaceCustomComponents
{
[ToolboxData(@"<{0}:ImageLabel1
BackColor='Red'
runat='server'></{0}:ImageLabel1>")
]
publicclassImageLabel1:Label
{
publicoverridestringText
{
get{returnViewState["Text"]!=null?(string)ViewState["Text"]:base.ID;}
set{ViewState["Text"]=value;}
}
publicoverrideSystem.Drawing.ColorBackColor
{
get
{
returnbase.BackColor=System.Drawing.Color.Red;
}
set
{
base.BackColor=value;
}
}
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
(2)为label新增一个背景图片的属性,重写了一下AddAttributesToRender方法,添加一个样式属性,AddAttributesToRender方法以前为大家讲过,这里不多讲了.
namespaceCustomComponents
{
publicclassImageLabel2:Label
{
[BrowsableAttribute(true)]
[DescriptionAttribute("背景")]
[CategoryAttribute("Appearance")]
publicvirtualStringImageUrl
{
get{returnViewState["imageUrl"]!=null?(string)ViewState["imageUrl"]:"";}
set{ViewState["imageUrl"]=value;}
}
overrideprotectedvoidAddAttributesToRender(HtmlTextWriterwriter)
{
writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundImage,ImageUrl);
base.AddAttributesToRender(writer);
}
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
(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 无法呈现,那说明我们刚才自定义的类就失去意义了,也说明我们还未重写某个方法.
protectedvoidPage_Load(objectsender,EventArgse)
{
//默认label控件
TableStylea=newTableStyle();
a.BackImageUrl="images4.bmp";
a.BackColor=System.Drawing.Color.Red;
Label1.ApplyStyle(a);
//自定义控件
ImageLabel3_1.ApplyStyle(a);
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
【编辑推荐】