1. 程式人生 > >Asp.net主題(theme)和面板(skin)

Asp.net主題(theme)和面板(skin)

 

asp.net的伺服器端控制元件提供了多種樣式的設計,如果對每個控制元件都單獨設定,是比較繁瑣的事情,所以微軟也提供了針對這些伺服器端控制元件的樣式管理,其實也可以通過css來控制部分伺服器端控制元件的樣式,比如textbox,如果用普css就是對input進行樣式控制,但對於gridview或者日曆控制元件等,css檔案無法靈活的控制,這就需要微軟專門為伺服器端控制元件提供的主題和面板。

 主題和面板的使用方法:
 1、新建外觀檔案(*.skin),然後在檔案裡設定伺服器端控制元件的樣式

在aspx頁面的Page里加入外觀檔案的應用,StylesheetTheme或者Theme(兩者有不同)

 StylesheetTheme和Theme的區別:
 針對預設的樣式(沒有定義SkinID的樣式),在相應的aspx頁面中Theme將採用定義的樣式,在頁面裡再設計同屬性的樣式無效;StylesheetTheme則允許在頁面裡再定義同屬性的樣式並有效。(注意:是同屬性的樣式,比如同是定義Height)
舉例:
 假設我們建立了一個外觀檔案newSkin,定義了一個預設textbox的樣式和一個指定SkinID的textbox的樣式(背景顏色、邊框的顏色、寬度和線條型別)
 <asp:TextBox runat="server" BorderColor="#6699FF" BackColor="#CCFFCC" BorderWidth="1px" BorderStyle="Solid"></asp:TextBox>

 <asp:TextBox runat="server" SkinID="new" BackColor="#FFCC99" BorderColor="#FF6600" BorderStyle="Dotted" BorderWidth="2px"></asp:TextBox>

 示例1:

 在aspx頁面中使用Theme來引入外觀檔案,並且在頁面裡有四個TextBox的控制元件:
 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Skin_Default" Theme="newSkin" %>
 控制元件1:<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
 控制元件2:<asp:TextBox ID="TextBox1" runat="server" BackColor="#009933" BorderColor="#FF6600" BorderStyle="Dotted" BorderWidth="2px"></asp:TextBox>
控制元件3:<asp:TextBox ID="TextBox2" runat="server" Height="40px"></asp:TextBox>
 控制元件4:<asp:TextBox ID="TextBox2" SkinID="new" runat="server" BorderWidth="1px" BorderStyle="Solid"></asp:TextBox>

 結果:
控制元件1和控制元件2的樣式是一樣的,控制元件2在頁面裡設定的樣式無效;
 控制元件3除了自定義的高度之外,和控制元件1、2的樣式一樣。(在外觀檔案裡沒有定義的屬性樣式,可以在頁面裡定義)
 控制元件4的樣式是外觀檔案裡SkinID為new的樣式,頁面裡定義的樣式無效。

 示例2:

在aspx頁面中使用Theme來引入外觀檔案,並且在頁面裡有四個TextBox的控制元件:
 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Skin_Default" StylesheetTheme="newSkin" %>
 控制元件1:<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>

 控制元件2:<asp:TextBox ID="TextBox1" runat="server" BackColor="#009933" BorderColor="#FF6600" BorderStyle="Dotted" BorderWidth="2px"></asp:TextBox>
控制元件3:<asp:TextBox ID="TextBox2" runat="server" Height="40px"></asp:TextBox>
控制元件4:<asp:TextBox ID="TextBox2" SkinID="new" runat="server" BorderWidth="1px" BorderStyle="Solid"></asp:TextBox>

 結果:
 控制元件1是使用外觀檔案裡的預設樣式;
 控制元件2是頁面裡自定義的樣式;
 控制元件3除了自定義的高度之外,和控制元件1的樣式一樣;
 控制元件4的樣式使用了外觀檔案裡SkinID為new的樣式中BackColor="#FFCC99" BorderColor="#FF6600"這兩個屬性,BorderWidth和BorderStyle則是頁面裡定義的樣式。

如果StylesheetTheme或Theme和我們原來設計頁面的css檔案(或者頁面定義style)同時使用會是什麼情況?
 結果:無論是使用StylesheetTheme或Theme,只要是在外觀檔案裡定義的屬性值,均是有效的,沒有定義的屬性值採用css檔案裡的樣式。
 如果同時使用StylesheetTheme或Theme、頁面自定義樣式和css檔案,那又會怎麼樣?
結果:優先順序(優先順序的意思是先採用優先順序高定義的樣式,如果優先順序高的沒有定義,則採用下一優先順序的樣式)
 1、Theme:外觀檔案->頁面控制元件自定義樣式->css檔案
2、StylesheetTheme:頁面控制元件自定義樣式->外觀檔案->css檔案
總之,css檔案的優先順序是最低的。