引子
样式,似乎是一个恒久的话题,要了解样式的来龙去脉,我们得基本熟悉样式的Render呈现过程,还得熟悉视图状态的生命周期和Webcontrol,也可以说成Control特有的状态维护方式...
在这个摸索的过程中,我碰到很多问题,也很迷惑,我会先留下”痕迹“,待以后灵感来了,说不定问题就不是问题了!当然,一切需要使用样式的控件”一般“都是继承自System.Web.UI.WebControls.WebControl,我说的是“一般”,如果你有时间,也可以从Control做起,然后一一维护样式的状态,呵呵!
有点迷惑的地方
看看WebControl状态维护,有点意思,我们来看她的截图,呵呵!
没有实现任何状态维护接口
再看看她的LoadViewState和SaveViewState方法

看到了吗?override修饰,到底重写谁的方法?WebControl不是没有实现IStateManager接口吗?何来重写?
想了N久,突然,发现自己实在笨得不行,儿子的东西不是老子给的嘛?
赶紧去看看Control

MD原来Control也没有实现IStateManager接口,而且LoadViewState方法修饰为virtual,也就是说,这些方法是Control类的,并非IStateManager接口的!
再找找吧,突然,我想起我经常用到的ViewState这个属性,对,就是她,Control以及WebControl都是委托给类型为StateBag的ViewState属性,书上是这么说的,就叫“委托”,呵呵!
先停下来想想,既然StateBag实现了IStateManager接口,我们当然没必要让Control重复做工,让ViewState去管得了!
进入正题(样式的状态)
位于System.Web.UI.WebControls空间下的Style,是所有样式类型的父类,Style实现了IStateManager接口,有点类似StateBag做的事情,呵呵!
WebControl有个类型为Style的属性ControlStyle,类似Control类型里的ViewState属性,WebControl的所有样式的状态维护都又她管,记得对比一下ViewState,相似得惊人!
一点小结
通过剖析,我们发现WebControl的样式状态维护(也可以说是复杂属性)和普通属性状态维护,是分别维护的,也就是普通属性状态维护又ViewState负责,而样式状态是又ControlStyle属性负责维护!
正式发布验证码控件(带独立样式文件的)
4位验证码

8位

带背景图的
show一下她的属性窗口
样式的亮点,就不多说了
http://www.cnblogs.com/wmj/archive/2008/06/11/1217191.html
总结
由于水平有限,难免有不妥当之处,还望大家多多提出宝贵的意见,再加上本人有点狂,所以请大家不要太在意!复合控件的样式的细节在后面的文章会讲到...
验证码控件demo下载
参考
道不远人,google
注意,控件名.Text一定要放在Page.Load方法中,切记