ASP.NET Theme

來源:互聯網
上載者:User

theme就是一系列屬性設定,利用它可以定義頁面和空間的外觀。它控制的範圍可以是某些網頁、整個web應用程式,甚至可以是一個伺服器上的所有Web應用。

theme和控制項皮膚
theme由一系列元素組成:皮膚、css、圖片以及其它資源。它至少包含皮膚。theme在web server或web site的特殊目錄中定義。

皮膚
皮膚檔案具有.skin的副檔名,包含諸如:button,label,textbox或calender等空間的屬性設定。空間皮膚設定就像空間自己的化妝,但只包含你要求設定的那些屬性的值。下面是一個button的皮膚設定:
<asp:button runat="server" BackColor="lightblue" ForeColor="black" />
你應該在theme目錄下建立.skin檔案,一個.skin檔案可以包含為一種或種控制項設定的一個或多個皮膚,你可以為每個控制項定義一個單獨的檔案,也可以只定義一個檔案包含所有空間皮膚的設定。

有兩種控制項皮膚預設皮膚和命名皮膚:
在theme應用到一個頁面時,預設皮膚會自動應用到該頁面上的所有同類型的控制項。什麼樣的皮膚是預設皮膚呢?判斷的標準就是他是否有SkinID屬性,如果沒有,就是預設皮膚。舉例來說,假如你為日曆控制項建立了一個預設皮膚,這個皮膚會應用到使用theme的頁面上的所有日曆控制項。(預設皮膚通過控制項類型匹配,這樣,button皮膚會應用到所有的button,但不會應用到LinkButton等繼承button的控制項對象)。

一個命名皮膚具有一個SkinID屬性。命名皮膚不會自動通過類型應用到控制項。你必須通過設定控制項的SkinID屬性來顯式地應用一個命名皮膚。使用命名皮膚允許你為相同控制項的不同執行個體設定不同的皮膚。

層疊樣式表
theme同樣可以包含層疊樣式表(.css)檔案。當你把一個.css檔案放在theme目錄下時,其樣式表會自動成為theme的一部分。你可以通過在與skin檔案相同的目錄下建立.css檔案來定義樣式表。

圖片和其它資源
Theme可以包含圖片和其它資源,如指令檔或音效檔。例如,你的theme的包含了一個TreeView控制項的皮膚,你可以包含一些圖片用來表示其擴充或收合的按鈕。

一般情況下資源檔與skin檔案在同一個目錄下,但他們可以在Web應用的任何地方,例如在theme目錄的一個子目錄。如果引用一個在theme目錄的子目錄下的資源檔,用一個類似下面Image控制項所示的路徑:
<asp:Image runat="server" ImageUrl="ThemeSubfolder/filename.ext" />
你也可以把你的資源檔儲存在theme目錄之外的其他目錄。如果你使用(~)來引用資源檔,web應用會自動找到這些圖片。舉例來說,如果你把資源檔放在你的應用程式的一個子目錄,你可以用這樣的路徑:~/SubFolder/filename.ext 來引用資源檔,就像下面這樣:
<asp:Image runat="server" ImageUrl="~/AppSubfolder/filename.ext" />

Theme的範圍

你可以為一個單獨的Web應用定義theme,也可以為Web Server上的所有應用定義一個全域的theme。在theme定義後,你可以通過@Page設定頁面的Theme或StyleSheetTheme屬性來應用,你也可以通過在應用程式的設定檔案中設定Pages元素來把theme應用到所有的頁面。如果<pages>元素定義在Machine。config檔案,這個theme將會應用到這台伺服器的所有應用程式的所有頁面。

Page Theme
Page Theme是\App_Themes 的一個子目錄,包含控制項皮膚,樣式表,圖片檔案以及其它資源。每個Theme是\App_Themes的一個不同的子目錄。下面的例子代碼是一個典型的Page Theme,定義了兩個Theme,分別命名為BlueTheme和PinkTheme。
MyWebSite
  App_Themes
    BlueTheme
      Controls.skin
      BlueTheme.css
    PinkTheme
      Controls.skin
      PinkTheme.css

Global Theme
    global theme是一個可以應用到伺服器上所有Web site的theme。在你在一台伺服器上維護多個網站時,global theme允許你定義這些網站的總體風格。
    global theme與Page theme很相似,也包含屬性設定,樣式表設定和圖片。但是,global theme儲存在Web Server的全域目錄,命名為\Themes。在這台伺服器上的任何網站,網站中的任何頁面,都可以引用這個global theme。

Theme設定的先後順序
你可以指定theme設定的先後順序,設定theme設定接管本地控制項設定。

如果你設定一個頁面的Theme屬性,在theme中的控制項設定和頁面上的版面設定將合并成為該控制項的最終設定。如果一個控制項屬性在頁面和theme中都進行了設定,theme中的控制項設定將覆蓋頁面上的控制項設定。這樣的策略使得各個頁面能夠保持一致的風格。例如,它可以允許你把theme應用到你在以前版本的ASP.NET中建立的頁面。

另外,你還可以把theme以樣式表的方式應用到頁面,通過設定頁面的StyleSheetTheme屬性。在這種情況下,本地版面設定優先於theme中的設定。這是使用層疊樣式表的模型。如果你想設定單個的控制項屬性,同時應用theme控制整體表現,你就可以把theme作為樣式表來應用。

使用Theme可以設定的屬性
作為一個通用規則,你可以使用theme定義有關page或控制項外表或靜態內容的屬性。你只可以設定那些ThemeableAttribute屬性設定為true的控制項類。
顯式定義空間行為的屬性不接受theme設定的值,例如,你不能通過Theme設定一個Button的CommandName屬性,類似的,你不能使用theme來設定GridView控制項的AllowPaging屬性或DataSource屬性。

Theme和層疊樣式表
theme與層疊樣式表類似,他們都定義了一個通用屬性集,可以應用到任何頁面。但是,theme與樣式表有以下不同:

  • theme可以定義一個控制項或頁面的許多屬性,不僅是style屬性。例如,使用theme,你可以為TreeView控制項設定圖片,為GridView控制項設定模版設計,等等。
  • Theme可以包含圖片
  • Theme與樣式表的覆蓋方式不一樣。例如,確省情況下,屬性值會覆蓋區域屬性值除非你把theme作為樣式表應用。
  • 每個頁面只能應用一個Theme,你不能應用多個theme到一個頁面,不象樣式表那樣,可以應用多個到一個頁面。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.