1、主題是什么
主題由一組元素組成:外觀、級聯(lián)樣式表 (CSS)、圖像和其他資源。主題將至少包含外觀。主題是在網(wǎng)站或 Web 服務器上的特殊目錄中定義的。主題是一組Web Control的屬性設置的集合,提供一種簡單的方法設置控件的樣式屬性。
· 主題只在Web Control中有效
· 母板頁(Master Page)上不能設置主題,但是主題可以在內(nèi)容頁面上設置
· 主題上設置的Web Control的樣式覆蓋頁面上設置的樣式
· 如果在頁面上設置EnableTheming="false",主題無效
· 要在頁面中動態(tài)設置主題,必須在頁面生命周期Page_Preinit事件之前
· 主題包括.skin和.css文件
2、.skin是什么文件
.skin是外觀文件,它包含各個控件(例如,Button、Label、TextBox 或 Calendar 控件)的屬性設置??丶庥^設置類似于控件標記本身,但只包含您要作為主題的一部分來設置的屬性。例如,下面是 Button 控件的控件外觀:
<asp:button runat="server" BackColor="lightblue" ForeColor="black" />
在 theme 文件夾中創(chuàng)建 .skin 文件。一個 .skin 文件可以包含一個或多個控件類型的一個或多個控件外觀??梢詾槊總€控件在單獨的文件中定義外觀,也可以在一個文件中定義所有主題的外觀。有兩種類型的控件外觀 -“默認外觀”和“已命名外觀”:
· 當向頁應用主題時,默認外觀自動應用于同一類型的所有控件。如果控件外觀沒有 SkinID 屬性,則是默認外觀。例如,如果為 Calendar 控件創(chuàng)建一個默認外觀,則該控件外觀適用于使用本主題的頁面上的所有 Calendar 控件。(默認外觀嚴格按控件類型來匹配,因此 Button 控件外觀適用于所有 Button 控件,但不適用于 LinkButton 控件或從 Button 對象派生的控件。)
· 已命名外觀是設置了 SkinID 屬性的控件外觀。已命名外觀不會自動按類型應用于控件。而應當通過設置控件的 SkinID 屬性將已命名外觀顯式應用于控件。通過創(chuàng)建已命名外觀,可以為應用程序中同一控件的不同實例設置不同的外觀。
3、如何為相同控件定義不同的Skin
使用SkinID為控件定義不同的skin,例如
<asp:Label runat=server Text="ThemedLabel" BackColor="Red" /> -label的缺省外觀 <asp:Label runat=server SkinId="BoldLabel" Text="ThemedLabel_WithSkinId" BackColor="Blue" Font-Bold="true" /> - 命名為BoldLabel 的Label外觀
因此頁面沒有指定SkinId的label自動應用缺省外觀,Label的SkinID設置為BoldLabel的Label控件應用BoldLabel外觀
4、如何組織主題文件內(nèi)容
Theme文件下可以包含多個.Skin文件,所以可以多種方式組織你的主題文件,所有的主題文件在應用于頁面之前會合并。
· 一個.skin文件包含所有的控件的外觀定義
· 每個控件一個.skin文件
· 相同SkinID的控件放在一個.skin文件中
5、有沒有辦法定義好的Theme文件在多個程序中共享
服務器上的任何網(wǎng)站以及任何網(wǎng)站中的任何頁面都可以引用全局主題,使用全局的主題可以在各個應用程序之間共享,例如你想創(chuàng)建一個全局共享的主題theme1。IIS 服務器上的全局主題放置位置類似于 \Inetpub\wwwroot\aspnet_client\system_web\v2.0.xxxxx\Themes\Theme1
應用程序級別的主題會覆蓋全局的主題,例如你在應用程序中也定義了Theme1的主題,那么在應用程序級的Theme1主題將覆蓋全局的主題Theme1
6、StyleSheetTheme是什么
主題還可以包含級聯(lián)樣式表(.css 文件)。將 .css 文件放在主題目錄中時,樣式表自動作為主題的一部分應用。使用文件擴展名 .css 在主題文件夾中定義樣式表。設置頁面的 StyleSheetTheme 屬性將主題作為樣式表主題來應用。如果您希望能夠設置頁面上的各個控件的屬性,同時仍然對整體外觀應用主題,則可以將主題作為樣式表主題來應用。EnableTheming="false"情況下StyleSheetTheme仍然有效。通過重寫屬性StyleSheetTheme來動態(tài)修改頁面上的主題樣式
public override string StyleSheetTheme
{
get{ retrun "MyStyleSheetTheme"; }
}
7、主題(Theme/Skin)資源
一組相當不錯的Theme,可以直接應用的項目開發(fā)中
Theme預覽:http://www.dotnettreats.com/SampleThemes/Default.aspx
Theme下載:http://www.dotnettreats.com/tools/Default.aspx