可能有些朋友還不是很清楚themes、skins。下面先介紹下themes、skins.。
一、簡介:
一看Themes、Skins這2名字就都知道是用來做什么的了吧,下面就說下它是做什么的(怎么都知道了還說,~_~),利用Themes我們可以很容易的更改控件、頁面的風(fēng)格,而不需要修改我們的代碼和頁面文件。
Themes文件被單獨(dú)的放在1個(gè)App_Themes文件夾下面,與你的程序是完全分開的。
二、怎么使用Themes和Skins:
先看個(gè)非常簡單的實(shí)例:
App_Themes\default\1.skin文件代碼:
default.aspx:文件代碼:
可以看到我們在default.aspx并沒有寫如何的控制style的代碼,但運(yùn)行取發(fā)現(xiàn)label上的字都變成了粗體紅色了,這就是1個(gè)最基本的theme例子。
App_Themes文件夾:
App_Themes文件夾位于程序的根目錄下,App_Themes下必須是Theme名稱的子文件夾,子文件夾中可以包含多個(gè).skin和.css文件。下圖中建立2個(gè)Theme,名稱分別為default和default2:
2、在所有頁面應(yīng)用同1個(gè)Theme:
如果要在所有頁面上使用相同的Theme,在web.config中的<system.web>節(jié)點(diǎn)下加上句<pages theme="..."/>
3、讓控件不應(yīng)用Theme:
第1個(gè)例子中我們看到了2個(gè)Label的風(fēng)格都變了,就是說.skin文件中的風(fēng)格在頁面上所有Label都起作用了。但有時(shí)我們希望某1個(gè)Label不應(yīng)用.skin中的風(fēng)格,這時(shí)你只需設(shè)置Label的EnableTheming屬性為false的時(shí)候就可以了。
也許你還想不同的label顯示不同的風(fēng)格,你只需設(shè)置label的SkinID屬性就可以,見下面的實(shí)例:
App_Themes\default\1.skin
deafult.aspx
運(yùn)行后就會發(fā)現(xiàn)2個(gè)label顯示的風(fēng)格不一樣了。
4、其他方法:
前面已經(jīng)說了在aspx文件頭使用 <%@ Page Theme="..." %> 來使用theme,而用這個(gè)方法應(yīng)用theme中的風(fēng)格將會覆蓋你寫在aspx中的控件屬性style。比如:
App_Themes\default\1.skin
default.aspx
運(yùn)行結(jié)果,所有的label的forecolor都為red。
而使用<%@ Page StyleSheetTheme="..." %>應(yīng)用theme就不會覆蓋你在aspx文件中寫的屬性style:
控件應(yīng)用style屬性的順序如下:
a、StyleSheetTheme引用的風(fēng)格
b、代碼設(shè)定的控件屬性(覆蓋StyleSheetTheme)
c、Theme引用的風(fēng)格(覆蓋前面2個(gè))
theme中包含CSS:
theme中也可以使用.css文件,當(dāng)你把.css文件放在1個(gè)theme目錄下后,在用到了這個(gè)theme的頁面中自動會應(yīng)用你的.css的
三、后臺代碼輕松為網(wǎng)站換府膚
前面講的都是在aspx文件或web.config中應(yīng)用theme,而在blog這樣的每個(gè)用戶都有不同的skin的網(wǎng)站中用上面的方法來實(shí)現(xiàn)換skin顯然是不方便的。
下面就介紹怎么在后臺代碼中動態(tài)的引用theme來解決上面的情況,theme必須在page被請求的最早期就應(yīng)用上,所以我們必須在Page_PreInit事件中寫代碼,代碼很簡單,就1句:
Page.Theme = "...";
這里我們只要從數(shù)據(jù)庫中去讀取每個(gè)用戶設(shè)置的不同theme名就可以輕松實(shí)現(xiàn)每個(gè)用戶都有不同的skin了。
------------------------------------------
以上都是個(gè)人的看法和體會,如有不妥處,還請大家多多指點(diǎn),謝謝!
聯(lián)系客服