App_Themes文件夹
主题位于应用程序根目录的App_Themes文件夹中主题由一个为主题命名的子目录和这个子目录下的一个或多个皮肤文件(带有skin扩展名)组成主题还可以包含CSS文件和/或存放静态文件(例如图像)的子目录下图显示了定义了两个主题的App_Themes目录分别叫做Default和White每个主题包含一个皮肤文件和一个CSS文件
查看前面的例子你会发现皮肤文件的内容就是控件如何显示的简单定义一个皮肤文件可以包含多个控件定义例如为每种控件类型提供一个定义在应用主题的时候主题中定义的控件属性自动地重载相同类型的控件的本地属性值例如皮肤文件中的<asp:Calendar FontName=Verdana runat=server/>控件定义将会引发应用了该主题的页面中的所有Calendar控件都使用Verdana字体该控件的这个属性的本地值都会被主题重载请注意在皮肤文件中给控件定义指定ID属性是错误的
全局的和应用程序的主题
主题可以应用于应用程序层或机器层(用于所有的应用程序)应用程序层的主题放置在应用程序根目录下的App_Themes目录中全局主题放置在ASPNET安装目录下的ASPNETClientFiles文件夹下的Themes目录中例如%WINDIR%\MicrosoftNET\Framework\<version>\ASPNETClientFiles\ThemesIIS Web站点的全局主题的位置是Inetpub\wwwroot\aspnet_client\system_web\<version>\Themes
给页面指定主题
通过把<%@ Page Theme= %>指令设置为全局或应用程序层的主题(Themes或App_Themes目录下的文件夹名称)我们可以为单个页面指定主题一个页面只能应用一个主题但是该主题中的多个皮肤文件可以用于设置页面上的控件的样式信息
在配置文件中指定主题
你也可以在Webconfig文件的<pages theme=/>部分中指定应用在程序的所有页面上的主题如果需要取消某个特定的页面的主题需要把该页面指令的主题属性设置为空字符串()请注意母版页不能应用主题你应该在内容页上或配置文件中设置主题
<configuration xmlns=http://schemasmicrosoftcom/NetConfiguration/v>
<systemweb>
<pages theme=ExampleTheme/>
</systemweb>
</configuration>
禁止某个控件应用主题
你可以通过把控件的EnableTheming属性设置为false把特定的控件排除出主题的应用范围
<%@ Page Language=VB Theme=OrangeTheme %>
……
<asp:Label ID=Label runat=server Text=Hello /><br />
<asp:Label ID=Label runat=server Text=Hello EnableTheming=False /><br />
主题中的命名皮肤(Named Skins)
在默认情况下皮肤文件中的控件定义会应用到页面上的所有相同类型的控件上但是你可能希望应用程序不同部分的同类控件显示为不同的样式例如在某个地方你可能希望文本和标签控件用粗体显示在另一个地方可能希望它用斜体显示你可以使用主题中的命名皮肤来实现这种功能
默认皮肤和命名皮肤
你可以通过为控件建立不同的定义在一个皮肤文件中为同类控件定义多种不同的样式你可以把这些控件定义的SkinID属性设置为任何名称接着在需要应用特定皮肤的控件上设置这个SkinID值如果缺少SkinID属性就应用默认的皮肤(没有设置SkinID属性的皮肤)下面的例子演示了应用不同皮肤的标签和日历控件请注意页面中带有命名SkinID的控件从默认的皮肤中获取了不同的样式集合
<%@ Page Language=VB Theme=OrangeTheme %>
<asp:Label ID=Label runat=server Text=Hello />
<asp:Label ID=Label runat=server Text=Hello SkinID=Blue />
<asp:Label ID=Label runat=server Text=Hello />
<asp:Calendar ID=Calendar runat=server/>
<asp:Calendar ID=Calendar SkinID=Simple runat=server/>
[] [] [] [] [] [] [] [] []