可以在主题和皮肤中可以定义的绝不仅仅是CSS样式而已。QuickStart中称之为服务器的端的样式,这样会更合适一点。在主题和皮肤中,绝大部分的内容都是可以使用定义的,当然不包括Id。
所有的主题和皮肤都必须放在一个叫App_Themes的目录下,这个目录可以是应用程序级的(把它放在你的站点目录下)或者是全局的(放在.net的目录下,或者放在IIS的一个目录下,具体参见帮助)。主题实际上就是多个皮肤的集合,在App_Themes下的子目录名就是主题名。而主题名下的后缀名为.skin的文件就是皮肤文件。
皮肤文件的写法更是傻瓜式的,其实就是把原先写在控件下的属性移至.skin下。写法和.aspx文件基本上是一样的,只不过没有Id属性,却多了一个SkinId的属性。不用怀疑,在页面中使用同样的SkinId就可以使用这个皮肤定义的样式了。而在皮肤文件中没有使用SkinId属性的控件,将是默认应用到页面中所有没有指定SkinId的同类控件上。
在Page指令或者程序代码中要显示指定Theme属性,属性的取值就是App_Themes下子文件夹的名字。另外还有一个StyleSheetTheme属性,也是同样的取值范围。
EnableTheming可以控制skin是否对控件起作用
StyleSheetTheme的工作和应用方式与普通主题相似。只不过当使用StyleSheetTheme时,控件皮肤的设置可以被页面中声明的同一类型控件的相同属性所替代。
在皮肤文件中甚至可以出现数据绑定表达式!当然这个是很有限的,仅在数据显示控件,如DataList,DataGrid,Repeater,GridView等(VS2005工具栏中它们被放置在一个单独的组里)。并且必须使用新的Eval或Bind表达式,并且不能在皮肤里执行绑定。
在皮肤文件中也可以使用CSS或者图片等资源,不用担心路径问题,M$已经帮我们解决了,当然,CSS使用起来得小心了,因为它可以影响到全局。
最后,如果要在整个站点使用同一个主题的话,那么在Web.Config中指定吧。在System.Web下增加这样的东东<pages theme="ExampleTheme"/>
——————————————————————————————————————————
为应用程序指定
web.config
<system.web>
<page Theme="主题名" | StyleSheetTheme="主题名">
</system.web>
禁用主题
<system.web>
<page Theme="" | StyleSheetTheme="">
</system.web>
——————————————————————————————————————————
动态加载主题
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
this.TextBox1.SkinID = "Red";
}