ASP.NET2.0新特性:主题和皮肤[转载]
一、概述
利用Themes我们可以很容易的更改控件、页面的风格,而不需要修改我们的代码和页面文件。Themes文件被单独的放在1个App_Themes文件夹下面,与你的程序是完全分开的。
二、组成元素
主题由一个文件组构成,包括皮肤文件(.skin)、CSS样式表,图片文件夹以及其他文件,但至少要包括皮肤文件,它是主题文件的核心。
皮肤文件:它的扩展名为.skin,主要用于定义服务器控件的外观。
CSS样式表:主要用于定义普通HTML控件和页面的样式属性,而对于服务器控件的样式属性则都设置在皮肤文件中。它与一般的CSS文件不同,不需要在页面中指定CSS的链接。
三、主题的应用
先看个非常简单的实例:
App_Themes\default\1.skin文件代码:
<asp:Label Font-Bold="true" ForeColor="Red" runat="server" />
default.aspx:文件代码:
<%@ Page Language="C#" Theme="default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Page with Example Theme Applied</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="Label1" runat="server" Text="Hello 1" /><br />
<asp:Label ID="Label2" runat="server" Text="Hello 2" /><br />
</form>
</body>
</html>
可以看到我们在default.aspx并没有写如何的控制style的代码,但运行取发现label上的字都变成了粗体红色了,这就是1个最基本的theme例子。
四、控件应用style属性的顺序如下:
1.StyleSheetTheme引用的风格
2.代码设定的控件属性(覆盖StyleSheetTheme)
3.Theme引用的风格(覆盖前面2个)
五、其他技巧
以上介绍了为页面指定主题的方法。另外,还可以禁用页面主题,其实现方法很简单。只要在页头<%@ Page%>中设置EnableTheming="false”即可。
为应用程序指定和禁用主题
每个应用程序中都包括多个页面,并且为了保证和谐统一的用户界面,开发人员往往希望所有页面使用同一主题。如果为在每个页头都设置相同的Theme属性值,那么必将繁琐。为了快速地为整个应用程序的所有页面设置相同的主题,可以设置Web.config文件的<pages>配置节内容。
<configuration>
<system.web>
<pages Theme="主题" />
</system.web>
</configuration>
如果需要,也可以将<pages>配置节中的Theme属性更改为StyleSheetTheme属性。需要注意的是,同一应用程序可以包含用于指定主题的多个Web.Config文件。可以将不同的Web.Config文件添加到不同的子文件夹中,每个Web配置文件都可以指定不同的主题。如果需要禁用整个应用程序的主题设置,只要将<pages>配置节中的Theme或者StyleSheetTheme属性值设置为空("")即可。
后台代码轻松为网站换肤
前面讲的都是在aspx文件或web.config中应用theme,而在blog这样的每个用户都有不同的skin的网站中用上面的方法来实现换skin显然是不方便的。
下面就介绍怎么在后台代码中动态的引用theme来解决上面的情况,theme必须在page被请求的最早期就应用上,所以我们必须在Page_PreInit事件中写代码,代码很简单,就1句:
Page.Theme = "...";