一、概述
利用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 = "...";