<span style="font: 12pt verdana; color:orange;font-weight:700" runat="server"> This is some literal text inside a styled span control</span> <p><font face="verdana"><h4>Styled Button</h4></font><p> <button style="font: 8pt verdana;background-color:lightgreen;border-color:black;width:100" runat="server">Click me!</button> |
<style> .spanstyle { font: 12pt verdana; font-weight:700; color:orange; } .buttonstyle { font: 8pt verdana; background-color:lightgreen; border-color:black; width:100 } …… </style> <span class="spanstyle" runat="server"> This is some literal text inside a styled span control </span> <p><font face="verdana"><h4>Styled Button</h4></font><p> <button class="buttonstyle" runat="server">Click me!</button> |
<script language="VB" runat="server" > Sub Page_Load(Sender As Object, E As EventArgs) MyText.Style("width") = "90px" Response.Write(MyText.Style("width")) End Sub </script> <input type="text" id="MyText" runat="server"/> |
<script language="VB" runat="server"> Sub Page_Load(Src As Object, E As EventArgs) Message.InnerHtml &= "<h5>Accessing Styles...</h5>" Message.InnerHtml &= "The color of the span is: " & MySpan.Style("color") & "<br>" Message.InnerHtml &= "The width of the textbox is: " & MyText.Style("width") & "<p>" Message.InnerHtml &= "MySelect's style collection is: <br><br>" Dim Keys As IEnumerator Keys = MySelect.Style.Keys.GetEnumerator() Do While (Keys.MoveNext()) Dim Key As String Key = CStr(Keys.Current) Message.InnerHtml &= "<li> " Message.InnerHtml &= Key & "=" & MySelect.Style(Key) & "<br>" Loop End Sub Sub Submit_Click(Src As Object, E As EventArgs) Message.InnerHtml &= "<h5>Modifying Styles...</h5>" MySpan.Style("color") = ColorSelect.Value MyText.Style("width") = "600" Message.InnerHtml &= "The color of the span is: " & MySpan.Style("color") & "<br>" Message.InnerHtml &= "The width of the textbox is: " & MyText.Style("width") End Sub </script> |
<ASP:Calendar runat="server" BackColor="Beige" ForeColor="Brown" BorderWidth="3" …… /> |
<ASP:Calendar runat="server" …… DayStyle-Width="50px" DayStyle-Height="50px" TodayDayStyle-BorderWidth="3" WeekEndDayStyle-BackColor="palegoldenrod" WeekEndDayStyle-Width="50px" WeekEndDayStyle-Height="50px" SelectedDayStyle-BorderColor="firebrick" SelectedDayStyle-BorderWidth="3" OtherMonthDayStyle-Width="50px" OtherMonthDayStyle-Height="50px" /> |
<ASP:Calendar ... runat="server"> <TitleStyle BorderColor="darkolivegreen" BorderWidth="3" BackColor="olivedrab" Height="50px" /> </ASP:Calendar> |
<ASP:Calendar id="MyCalendar" runat="server" …… > <TitleStyle BorderColor="darkolivegreen" BorderWidth="3" BackColor="olivedrab" Height="50px" /> <DayHeaderStyle BorderColor="darkolivegreen" BorderWidth="3" BackColor="olivedrab" ForeColor="black" Height="20px" /> <WeekEndDayStyle BackColor="palegoldenrod" Width="50px" Height="50px" /> <DayStyle Width="50px" Height="50px" /> <TodayDayStyle BorderWidth="3" /> <SelectedDayStyle BorderColor="firebrick" BorderWidth="3" /> <OtherMonthDayStyle Width="50px" Height="50px" /> </ASP:Calendar> |
<style> .calstyle { font-size:12pt; font-family:Tahoma,Arial; } </style> <ASP:Calendar CssClass="calstyle" runat="server" …… /> |
<ASP:TextBox runat="server" class="beige" style="font-weight:700;"/> <ASP:TextBox TextMode="Password" runat="server" class="beige"/> <ASP:DropDownList class="beige" runat="server"> <ASP:ListItem>Default Desktop</ASP:ListItem> <ASP:ListItem>My Stock Portfolio</ASP:ListItem> <ASP:ListItem>My Contact List</ASP:ListItem> </ASP:DropDownList> <ASP:Button Text="Submit" runat="server" class="beige"/> |
<script language="VB" runat="server"> Sub Page_Load(Src As Object, E As EventArgs) Dim MyStyle As New Style MyStyle.BorderColor = Color.Black MyStyle.BorderStyle = BorderStyle.Dashed MyStyle.BorderWidth = New Unit(1) MyLogin.ApplyStyle (MyStyle) MyPassword.ApplyStyle (MyStyle) MySubmit.ApplyStyle (MyStyle) End Sub </script> Login: <ASP:TextBox id="MyLogin" runat="server" />/<p/> Password: <ASP:TextBox id="MyPassword" TextMode="Password" runat="server" /> View: <ASP:DropDownList id="MySelect" runat="server"> ... </ASP:DropDownList> |
<asp:Label ID="Label1" runat="server" Text="Hello 1" Font-Bold="true" ForeColor="orange" /><br /> <asp:Calendar BackColor="White" BorderColor="Black" BorderStyle="Solid" CellSpacing="1" Font-Names="Verdana" Font-Size="9pt" ForeColor="Black" Height="250px" ID="Calendar1" NextPrevFormat="ShortMonth" runat="server" Width="330px"> <SelectedDayStyle BackColor="#333399" ForeColor="White" /> <OtherMonthDayStyle ForeColor="#999999" /> <TodayDayStyle BackColor="#999999" ForeColor="White" /> <DayStyle BackColor="#CCCCCC" /> <NextPrevStyle Font-Bold="True" Font-Size="8pt" ForeColor="White" /> <DayHeaderStyle Font-Bold="True" Font-Size="8pt" ForeColor="#333333" Height="8pt" /> <TitleStyle BackColor="#333399" BorderStyle="Solid" Font-Bold="True" Font-Size="12pt" ForeColor="White" Height="12pt" /> </asp:Calendar> |
<%@ Page Language="VB" Theme="ExampleTheme" %> <asp:Label ID="Label1" runat="server" Text="Hello 1" /><br /> <asp:Calendar ID="Calendar1" runat="server"/> <asp:GridView ID="GridView1" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="au_id" runat="server"> …… </asp:GridView> <asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Pubs %>" ID="SqlDataSource1" runat="server" SelectCommand="SELECT [au_id], [au_lname], [au_fname], [state] FROM [authors]"> </asp:SqlDataSource> |
全局的和应用程序的主题
主题可以应用于应用程序层或机器层(用于所有的应用程序)。应用程序层的主题放置在应用程序根目录下的App_Themes目录中。全局主题放置在ASP.NET安装目录下的ASP.NETClientFiles文件夹下的"Themes"目录中,例如%WINDIR%/Microsoft.NET/Framework/<version>/ASP.NETClientFiles/Themes。IIS Web站点的全局主题的位置是Inetpub/wwwroot/aspnet_client/system_web/<version>/Themes。
给页面指定主题
通过把<%@ Page Theme="..." %>指令设置为全局或应用程序层的主题(Themes或App_Themes目录下的文件夹名称),我们可以为单个页面指定主题。一个页面只能应用一个主题,但是该主题中的多个皮肤文件可以用于设置页面上的控件的样式信息。
在配置文件中指定主题
你也可以在Web.config文件的<pages theme="..."/>部分中指定应用在程序的所有页面上的主题。如果需要取消某个特定的页面的主题,需要把该页面指令的主题属性设置为空字符串("")。请注意,母版页不能应用主题;你应该在内容页上或配置文件中设置主题。
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.web> <pages theme="ExampleTheme"/> </system.web> </configuration> |
<%@ Page Language="VB" Theme="OrangeTheme" %> …… <asp:Label ID="Label1" runat="server" Text="Hello 1" /><br /> <asp:Label ID="Label2" runat="server" Text="Hello 2" EnableTheming="False" /><br /> |
<%@ Page Language="VB" Theme="OrangeTheme2" %> <asp:Label ID="Label1" runat="server" Text="Hello 1" /> <asp:Label ID="Label2" runat="server" Text="Hello 2" SkinID="Blue" /> <asp:Label ID="Label3" runat="server" Text="Hello 3" /> <asp:Calendar ID="Calendar1" runat="server"/> <asp:Calendar ID="Calendar2" SkinID="Simple" runat="server"/> |
/WebSite1 /App_Themes /MyTheme Default.skin Red.skin Blue.skin |
/WebSite1 /App_Themes /MyTheme GridView.skin Calendar.skin Label.skin |
/WebSite1 /App_Themes /MyTheme HomePage.skin DataReports.skin Forums.skin |
<%@ Page Language="VB" Theme="OrangeTheme" %> <asp:Label ID="Label1" runat="server" Text="Hello 1" /><br /> <asp:Label ID="Label2" runat="server" Text="Hello 2" ForeColor="blue" /> |
<%@ Page Language="VB" StyleSheetTheme="OrangeTheme" %> <asp:Label ID="Label1" runat="server" Text="Hello 1" /><br /> <asp:Label ID="Label2" runat="server" Text="Hello 2" ForeColor="blue" /> |
<%@ Page Language="VB" Theme="OrangeTheme" StyleSheetTheme="GreenTheme" %> <asp:Label ID="Label1" runat="server" Text="Hello 1" /><br /> <asp:Label ID="Label2" runat="server" Text="Hello 2" ForeColor="blue" Font-Italic="false" /> |
|
<%@ Page Language="VB" Theme="MyTheme" %> <asp:Image ID="Image1" SkinID="Warning" runat="server" /> <asp:Label ID="Label1" runat="server" Text="Hello 1" /><br /> <asp:Image ID="Image2" SkinID="Warning" runat="server" /> <asp:Label ID="Label2" runat="server" Text="Hello 2" /><br /> <asp:Image ID="Image3" SkinID="Warning" runat="server" /> <asp:Label ID="Label3" runat="server" Text="Hello 3" /><br /> |
<asp:TreeView runat="server" Font-Names="Verdana" ForeColor="Black" HoverNodeStyle-Font-Underline="true" ShowExpandCollapse="false" NodeIndent="0" > <LevelStyles> <asp:TreeNodeStyle ChildNodesPadding="10" Font-Bold Font-Size="12pt" ForeColor="DarkGreen"/> <asp:TreeNodeStyle ChildNodesPadding="5" Font-Bold Font-Size="10pt" /> <asp:TreeNodeStyle ChildNodesPadding="5" Font-UnderLine Font-Size="10pt" /> <asp:TreeNodeStyle Font-Size="8pt" /> </LevelStyles> </asp:TreeView> |
<asp:Login runat="server"> <LayoutTemplate> <i>Please log in to this site:</i><br /><br /> <asp:Label Font-Bold="true" AssociatedControlID="UserName" ID="UserNameLabel" runat="server">User Name:</asp:Label> <asp:TextBox ID="UserName" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ControlToValidate="UserName" ErrorMessage="User Name is required." ID="UserNameRequired" runat="server" ToolTip="User Name is required." ValidationGroup="Login1">*</asp:RequiredFieldValidator> <asp:Label Font-Bold="true" AssociatedControlID="Password" ID="PasswordLabel" runat="server">Password:</asp:Label> <asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox> <asp:RequiredFieldValidator ControlToValidate="Password" ErrorMessage="Password is required." ID="PasswordRequired" runat="server" ToolTip="Password is required." ValidationGroup="Login1">*</asp:RequiredFieldValidator> <asp:Button CommandName="Login" ID="LoginButton" runat="server" Text="Log In" ValidationGroup="Login1" /> <asp:Literal EnableViewState="False" ID="FailureText" runat="server"></asp:Literal> </LayoutTemplate> </asp:Login> |
<asp:DataList RepeatColumns="2" CellPadding="20" runat="server"> <ItemTemplate> <h3><asp:Label ID="titleLabel" runat="server" Text='<%# Eval("title") %>'/></h3> <asp:Image ImageUrl='<%# Eval("title_id", "Images/{0}.gif") %>' runat="server" /> <b>ID:</b> <asp:Label ID="title_idLabel" runat="server" Text='<%# Eval("title_id") %>'/><br /> <b>Type:</b> <asp:Label ID="typeLabel" runat="server" Text='<%# Eval("type") %>'/><br /> <b>Price:</b> $ <asp:Label ID="priceLabel" runat="server" Text='<%# Eval("price") %>'/><br /> <asp:TextBox TextMode="MultiLine" Rows="5" Columns="40" ID="notesLabel" Text='<%# Eval("notes") %>' runat="server"/><br /> </ItemTemplate> </asp:DataList> |
主题和配置
你可能希望终端用户动态地为应用程序选择和应用主题。通过把活动主题存储在用户配置中,你可以根据用户的喜好动态的应用主题。为了实现这种功能,你需要编写代码来应用主题,而不能使用@Page指令或Web.config中宣告式的方法。
在代码中指定主题
为了在代码中应用主题,你必须在运行时设置Page(页面)对象的Theme属性。在请求的生命周期的早期(在PreInit事件中),你就必须给页面应用主题。在下面的例子中,用户从下拉列表控件中选择主题名称的时候,在PreInit事件中会动态地应用主题。
<script runat="server"> Protected Sub Page_PreInit() Page.Theme = Server.HtmlEncode(Request.QueryString("Theme")) End Sub </script> |
<%@ Page Language="VB" Theme="Default" %> <script runat="server"> Protected Sub Page_PreInit() If Not Profile.FavoriteColor = "" Then Page.Theme = Profile.FavoriteColor End If End Sub </script> <asp:Label ID="Label1" runat="server" Text="Welcome to my page. Please login with User=Test, Password=Test@1234"></asp:Label><br /> <asp:Login ID="Login1" runat="server" /><br /> <asp:LoginView ID="LoginView1" runat="server"> <LoggedInTemplate> <asp:HyperLink ID="HyperLink1" NavigateUrl="Profile_cs.aspx" Text="Edit Profile..." runat="server" /><br /> <asp:LoginStatus ID="LoginStatus1" runat="server"/> </LoggedInTemplate> </asp:LoginView> |
<script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) If Not Page.IsPostBack AndAlso Not Profile.FavoriteColor = "" Then DropDownList1.DataBind() End If End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Profile.FavoriteColor = DropDownList1.SelectedValue Response.Redirect("ProfileTheme_cs.aspx") End Sub </script> <b>Favorite Color:</b> <asp:DropDownList ID="DropDownList1" SelectedValue='<%# Profile.FavoriteColor %>' runat="server"> <asp:ListItem Value="OrangeTheme">Orange</asp:ListItem> <asp:ListItem Value="GreenTheme">Green</asp:ListItem> </asp:DropDownList> <asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" /> |
1、主题是什么
主题由一组元素组成:外观、级联样式表 (CSS)、图像和其他资源。主题将至少包含外观。主题是在网站或 Web 服务器上的特殊目录中定义的。主题是一组Web Control的属性设置的集合,提供一种简单的方法设置控件的样式属性。
· 主题只在Web Control中有效
· 母板页(Master Page)上不能设置主题,但是主题可以在内容页面上设置
· 主题上设置的Web Control的样式覆盖页面上设置的样式
· 如果在页面上设置EnableTheming="false",主题无效
· 要在页面中动态设置主题,必须在页面生命周期Page_Preinit事件之前
· 主题包括.skin和.css文件
2、.skin是什么文件
.skin是外观文件,它包含各个控件(例如,Button、Label、TextBox 或 Calendar 控件)的属性设置。控件外观设置类似于控件标记本身,但只包含您要作为主题的一部分来设置的属性。例如,下面是 Button 控件的控件外观:
<asp:button runat="server" BackColor="lightblue" ForeColor="black" />
在 theme 文件夹中创建 .skin 文件。一个 .skin 文件可以包含一个或多个控件类型的一个或多个控件外观。可以为每个控件在单独的文件中定义外观,也可以在一个文件中定义所有主题的外观。有两种类型的控件外观 -“默认外观”和“已命名外观”:
· 当向页应用主题时,默认外观自动应用于同一类型的所有控件。如果控件外观没有 SkinID 属性,则是默认外观。例如,如果为 Calendar 控件创建一个默认外观,则该控件外观适用于使用本主题的页面上的所有 Calendar 控件。(默认外观严格按控件类型来匹配,因此 Button 控件外观适用于所有 Button 控件,但不适用于 LinkButton 控件或从 Button 对象派生的控件。)
· 已命名外观是设置了 SkinID 属性的控件外观。已命名外观不会自动按类型应用于控件。而应当通过设置控件的 SkinID 属性将已命名外观显式应用于控件。通过创建已命名外观,可以为应用程序中同一控件的不同实例设置不同的外观。
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、如何组织主题文件内容
Theme文件下可以包含多个.Skin文件,所以可以多种方式组织你的主题文件,所有的主题文件在应用于页面之前会合并。
· 一个.skin文件包含所有的控件的外观定义
· 每个控件一个.skin文件
· 相同SkinID的控件放在一个.skin文件中
5、有没有办法定义好的Theme文件在多个程序中共享
服务器上的任何网站以及任何网站中的任何页面都可以引用全局主题,使用全局的主题可以在各个应用程序之间共享,例如你想创建一个全局共享的主题theme1。IIS 服务器上的全局主题放置位置类似于 /Inetpub/wwwroot/aspnet_client/system_web/v2.0.xxxxx/Themes/Theme1
应用程序级别的主题会覆盖全局的主题,例如你在应用程序中也定义了Theme1的主题,那么在应用程序级的Theme1主题将覆盖全局的主题Theme1
6、StyleSheetTheme是什么
主题还可以包含级联样式表(.css 文件)。将 .css 文件放在主题目录中时,样式表自动作为主题的一部分应用。使用文件扩展名 .css 在主题文件夹中定义样式表。设置页面的 StyleSheetTheme 属性将主题作为样式表主题来应用。如果您希望能够设置页面上的各个控件的属性,同时仍然对整体外观应用主题,则可以将主题作为样式表主题来应用。EnableTheming="false"情况下StyleSheetTheme仍然有效。通过重写属性StyleSheetTheme来动态修改页面上的主题样式
public override string StyleSheetTheme
{
get{ retrun "MyStyleSheetTheme"; }
}
7、主题(Theme/Skin)资源
一组相当不错的Theme,可以直接应用的项目开发中
Theme预览:http://www.dotnettreats.com/SampleThemes/Default.aspx
Theme下载:http://www.dotnettreats.com/tools/Default.aspx