ASP.NET 2.0 里的主题(Themes)


在Visual Web Developer中,最近新发现ASP.NET居然也跑出主题来了。想想在Visual Studio .NET 2003中,统一每个DataGrid的样式、TextBox的BorderStyle等时,得每个页面每个控件设置过去,实在烦得可以。现在有了主题这东西,就象Windows换主题一样简单。此时,再看看其他诸如新增的ImageMap、HiddenField、Pager、Master&Content、SiteMapPath等控件,真的感觉MS在WebForm这块是狠下了工夫了。
 ASP.NET2.0中主题分为全局主题(Global Themes)和页主题(Page Themes)。所谓全局主题其实就是ASP.NET2.0中预定义的一系列主题,这些主题里都为大多数的控件预先定义了一套样式供ASP.NET WEB应用程序使用。而所谓的页主题,也就是我们为自己的Web应用程序,甚至是单独的页面而自定义的主题。另外,还有控件皮肤(Controls Skins)的概念,注意到ASP.NET2.0中很多控件多了个SkinID属性,也就是换皮肤用的了。控件皮肤也分为Default Skins和Named Skins。当你为Calendar控件创建了一个Default Skins,那么应用包含该Skins的主题时,页面里的所有Calendar控件都将“套上该皮肤”;而Named Skins其实就是拥有一个特别ID的控件皮肤,它就是与控件里的SkinID属性结合做换皮肤用的了。换主题其实操作起来很简单:

首先,创建一个ASP.NET Web Site在D:\MyWeb\TestThemes下,然后从工具箱Core选项卡里拉几个Label、Button、GridView到Default.aspx也上。另外,记得看下源代码里的header是否runat=server,应为。特别强调下,所有的页主题都必须放在Web应用程序主目录下的Themes文件夹里的某个自定义文件夹里,例如:D:\MyWeb\TestThemes\Themes\MyTheme。主题文件后缀名必须为.skin。
其次,如果是应用全局主题,就直接往Page指令加属性:

其中BasicBlue就是预定义的一套主题。这是单独一个页面的主题应用。如果想让整个WebSite所有页面都应用该主题,直接在web.config的里加入即可。于是,大部分控件,包括Label、Button和GridView等的样式都变成了以兰色主题。真象Windows主题。
如果是页主题,那就要往第一步的MyTheme目录里加skin文件了。新建一个文本文件,命名为TheThemes.skin,该文件内部定义如下:

好了,类似上面第2步操作,将 BasicBlue 改为MyTheme即可。于是页面里的Label控件都将是上面的样式。
扩展上面的想法,我们完全可以在MyTheme目录里定义自己的一系列Skins,例如GridViews.skin、Buttons.skin等,然后应用主题,总体感觉很清晰也很方便。我弄Skins文件,都是直接先在WebForm页里设置好样式(例如GridView自带里面的样式),然后拷贝里面的样式出来直接粘贴在Skins文件里,最后把控件原有的样式都删除,就可以了。还是需要强调一点,诸如GridView的AllowPaging等非视觉属性的都不能在Skins文件里定义,不然就出错了。

最后,还有个感觉,这里的主题跟CSS真的很象。不过用法却不大一样就是了
posted on 2004-01-31 05:05  ctrl2a  阅读(853)  评论(1编辑  收藏  举报