使用主题对站点进行自定义
原英文地址:http://www.asp.net/QuickStart/aspnet/doc/themes/themes.aspx
上一节演示了通过设置控件自身的样式属性来指定控件样式的各种方式。例如,考虑下面的页,对该页上的单个控件应用了一些样式设置。
C# Page with No Theme Applied
除了指定单个控件的样式外,ASP.NET 2.0 还引入了“主题”,它提供了一种简易方式,可以独立于应用程序的页为站点中的控件和页定义样式设置。多个主题的优点在于,设计站点时可以不考虑样式,以后应用样式时也无需更新页或应用程序代码。此外,还可以从外部源获得自定义主题,以便将样式设置应用于应用程序。一个主题的优点在于,样式设置存储在一个位置,可以独立于应用该主题的应用程序来维护这些设置。
下面的示例演示的页具有同一个主题,应用该主题指定控件样式设置。注意,该页本身并不需要包含任何样式信息。在运行时该主题自动将样式属性应用于该页的控件。
C# Page with Example Theme Applied
App_Themes 文件夹
主题位于应用程序根目录下的 App_Themes 文件夹中。主题由此文件夹下的命名子目录组成,该子目录包含一个或多个具有 .skin 扩展名的外观文件的集合。主题还可以包含一个 CSS 文件和/或图像等静态文件的子目录。下图演示定义了两个主题的 App_Themes 目录,这两个主题分别命名为“Default”和“White”,每个主题都有一个外观文件和一个 CSS 文件。
从上一个示例中可以注意到,外观文件的内容只不过是控件定义(如果这些定义出现在页面中)。一个外观文件可以包含多个控件定义,例如,每种控件类型一个定义。在主题中定义的控件属性自动重写应用了主题的目标页中同一类型的控件的本地属性值。例如,外观文件中的 <asp:Calendar Font-Name="Verdana" runat="server"/> 控件定义将使应用了主题的页中的所有 Calendar 控件都使用 Verdana 字体。主题将重写该控件这一属性的本地值。请注意,在外观文件中为控件定义指定 ID 属性值是错误的。
全局主题和应用程序主题
主题可位于应用程序级或计算机级(全局适用于所有应用程序)。如上所述,应用程序级主题放在应用程序根目录下的 App_Themes 目录中。全局主题放在 ASP.NET 安装目录下 ASP.NETClientFiles 文件夹下的“Themes”目录中,例如 %WINDIR%\Microsoft.NET\Framework\<version>\ASP.NETClientFiles\Themes。对于 IIS 网站,全局主题的位置是 Inetpub\wwwroot\aspnet_client\system_web\<version>\Themes。
为页指定主题
通过将 <%@ Page Theme="..." %> 指令设置为全局主题或应用程序级主题的名称(Themes 或 App_Themes 目录下的文件夹的名称),可为单个页指定主题。一页只能应用一个主题,但该主题中可以有多个外观文件,用于将样式设置应用于该页中的控件。
在配置中指定主题
通过在 Web.config 中指定 <pages theme="..."/> 节,也可以为应用程序中的所有页定义应用的主题。若要对特定页取消设置此主题,可以将 Page 指令的 Theme 属性设置为空字符串 ("")。请注意,母版页不能应用主题;而应在内容页或配置(如下所述)中设置主题。
C# Assigning a Theme in Web.config
对控件禁用主题
通过将 EnableTheming 属性设置为 false,可将特定控件排除在外,使其属性不会被主题重写。
C# Disabling Themes for a Control