|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
就安全性而言,Java已经远远低于VB.NET,更无法与安全性著称的C#相比。asp.net ASP.NET2.0的主题和皮肤特征使你可以把款式和结构信息寄存到一组自力的文件中,总称为主题(Theme)。接上去我们能够把这个主题使用就任何站点,用于改动该站点内的页面和控件的表面和感到。经由过程改动主题的内容,而不必改动站点的单个页面,就能够容易地改动站点的款式。主题也能够在开辟者之间共享。
ASP.NET包括了大批的用于定制使用程序的页面和控件的表面和感到的特征。控件撑持利用Style(款式)工具模子来设置格局属性(比方字体、边框、背景和远景色彩、宽度、高度等等)。控件也撑持利用款式表(CSS)来独自设置控件的款式。你能够用控件属性或CSS来界说控件的款式信息,大概把这些界说信息寄存到独自的一组文件中(称为主题),然后把它使用到程序的一切或部分页面上。独自的控件款式是用主题的皮肤(Skin)属性来指定的。
本文用大批的示例演示了在ASP.NET2.0中怎样利用款式、主题和皮肤特征。
给控件使用款式
Web用户界面长短常天真的,分歧的Web站点的表面和感到是一模一样的。今朝普遍接纳的款式表(CSS)在很年夜水平上就是卖力处置Web上碰到的丰厚的计划需求的。ASP.NET的HTML服务器控件和Web服务器控件都被计划成优先撑持CSS款式表。这一部分会商怎样在服务器控件上利用款式,并演示了它们所供应的Web窗体的表面和感到的十分渺小的把持。
给HTML控件使用款式
尺度的HTML标志经由过程style属性来撑持CSS,我们能够用分号断绝的属性/值对(pair)来设置它。一切的ASP.NETHTML服务器控件都能够接纳尺度HTML标志的体例来承受款式。上面的例子演示了大批的使用到HTML服务器控件的款式。在源代码中你能够看到,这些款式都是在控件显现的时分传送给扫瞄器的。
<spanstyle="font:12ptverdana;color:orange;font-weight:700"runat="server">
Thisissomeliteraltextinsideastyledspancontrol</span>
<p><fontface="verdana"><h4>StyledButton</h4></font><p>
<buttonstyle="font:8ptverdana;background-color:lightgreen;border-color:black;width:100"runat="server">Clickme!</button>
CSS还界说了class属性,你能够把它设置为文档中<style>...</style>内包括的CSS款式界说。Class属性使你可以一次界说款式,在多个服务器标志上利用,制止了款式的反复界说。HTML服务器控件的style属性能够用这类体例来设置,以下所示:
<style>
.spanstyle
{
font:12ptverdana;
font-weight:700;
color:orange;
}
.buttonstyle
{
font:8ptverdana;
background-color:lightgreen;
border-color:black;
width:100
}
……
</style>
<spanclass="spanstyle"runat="server">
Thisissomeliteraltextinsideastyledspancontrol
</span>
<p><fontface="verdana"><h4>StyledButton</h4></font><p>
<buttonclass="buttonstyle"runat="server">Clickme!</button>
在剖析ASP.NET页面的时分,在System.Web.UI.HtmlControls.HtmlControl类中,款式信息被添补到CssStyleCollection范例的Style属性。这个属性实质上是一个字典,它把控件的款式表露为每一个款式属性键的按字符串索引的值汇合。比方,你可使用上面的代码设置和检索HtmlInputText服务器控件的width款式属性:
<scriptlanguage="VB"runat="server">
SubPage_Load(SenderAsObject,EAsEventArgs)
MyText.Style("width")="90px"
Response.Write(MyText.Style("width"))
EndSub
</script>
<inputtype="text"id="MyText"runat="server"/>
上面的例子显现了怎样编程利用Style汇合属性来把持HTML服务器控件的款式:
<scriptlanguage="VB"runat="server">
SubPage_Load(SrcAsObject,EAsEventArgs)
Message.InnerHtml&="<h5>AccessingStyles...</h5>"
Message.InnerHtml&="Thecolorofthespanis:"&MySpan.Style("color")&"<br>"
Message.InnerHtml&="Thewidthofthetextboxis:"&MyText.Style("width")&"<p>"
Message.InnerHtml&="MySelectsstylecollectionis:<br><br>"
DimKeysAsIEnumerator
Keys=MySelect.Style.Keys.GetEnumerator()
DoWhile(Keys.MoveNext())
DimKeyAsString
Key=CStr(Keys.Current)
Message.InnerHtml&="<li>"
Message.InnerHtml&=Key&"="&MySelect.Style(Key)&"<br>"
Loop
EndSub
SubSubmit_Click(SrcAsObject,EAsEventArgs)
Message.InnerHtml&="<h5>ModifyingStyles...</h5>"
MySpan.Style("color")=ColorSelect.Value
MyText.Style("width")="600"
Message.InnerHtml&="Thecolorofthespanis:"&MySpan.Style("color")&"<br>"
Message.InnerHtml&="Thewidthofthetextboxis:"&MyText.Style("width")
EndSub
</script> 给Web服务器控件使用款式
Web服务器控件增加了几个用于设置款式的强范例属性(比方背景致、远景色、字体称号和巨细、宽度、高度等等),从而为款式供应了更多条理的撑持。这些款式属性体现了HTML中可用的款式举动的子集,并体现为System.Web.UI.WebControls.WebControl基类间接表露的"立体"属性。利用这些属性的上风在于,在开辟工具(比方微软VisualStudio.NET)中,它们供应了编译时的范例检测和语句编译。
上面的例子显现了一个使用了几种款式的WebCalendar控件。请注重,当设置的属性是类范例(classtype)的时分(比方字体),你必需利用子属性语法PropertyName-SubPropertyName(属性-子属性):
<ASP:Calendarrunat="server"
BackColor="Beige"
ForeColor="Brown"
BorderWidth="3"
……
/>
System.Web.UI.WebControls名字空间包括了Style基类,它封装了公用的款式属性(别的的款式类,比方TableStyle和TableItemStyle都承继自这个基类)。为了指定控件的各个显现元素,年夜多半Web服务器控件都表露了这个范例属性。比方,WebCalendar表露和良多款式属性:DayStyle、WeekendDayStyle、TodayDayStyle、SelectedDayStyle、OtherMonthDayStyle和NextPrevStyle。你可使用子属性语法PropertyName-SubPropertyName来设置这些款式的属性,以下面的例子所示:
<ASP:Calendarrunat="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"
/>
上面的语法有略微的分歧,它同意你把Style属性声明为Web服务器控件标志内嵌套的子元素:
<ASP:Calendar...runat="server">
<TitleStyleBorderColor="darkolivegreen"BorderWidth="3"BackColor="olivedrab"Height="50px"/>
</ASP:Calendar>
上面的例子显现了一种替换语法,可是它的功效与后面的语法是一样的。
<ASP:Calendarid="MyCalendar"runat="server"
……
>
<TitleStyleBorderColor="darkolivegreen"BorderWidth="3"BackColor="olivedrab"Height="50px"/>
<DayHeaderStyleBorderColor="darkolivegreen"BorderWidth="3"BackColor="olivedrab"ForeColor="black"Height="20px"/>
<WeekEndDayStyleBackColor="palegoldenrod"Width="50px"Height="50px"/>
<DayStyleWidth="50px"Height="50px"/>
<TodayDayStyleBorderWidth="3"/>
<SelectedDayStyleBorderColor="firebrick"BorderWidth="3"/>
<OtherMonthDayStyleWidth="50px"Height="50px"/>
</ASP:Calendar>
利用HTML服务器控件的时分,你可使用CSS类界说给Web服务器控件使用款式。WebControl基类表露了一个叫做CssClass的字符串属性,用于设置款式类:
<style>
.calstyle{font-size:12pt;font-family:Tahoma,Arial;}
</style>
<ASP:CalendarCssClass="calstyle"runat="server"
……
/>
假如某个服务器控件上设置的属性没有与该控件的强范例属性绝对应,谁人该属性和值就被添补到控件的Attributes汇合中。在默许情形下,服务器控件会把这些属性不作变动地出现在HTML中,并前往给作出哀求的扫瞄器客户端。这意味着,我们能够间接设置Web服务器控件的款式和类属性,而不用利用强范例的属性。只管它请求我们了解控件的实践显现历程,可是它也是使用款式的一个天真的路子。关于尺度的输出控件,如许的操纵用途很年夜,以下面的例子所示:
<ASP:TextBoxrunat="server"class="beige"style="font-weight:700;"/>
<ASP:TextBoxTextMode="Password"runat="server"class="beige"/>
<ASP:DropDownListclass="beige"runat="server">
<ASP:ListItem>DefaultDesktop</ASP:ListItem>
<ASP:ListItem>MyStockPortfolio</ASP:ListItem>
<ASP:ListItem>MyContactList</ASP:ListItem>
</ASP:DropDownList>
<ASP:ButtonText="Submit"runat="server"class="beige"/>
我们也能够利用WebControl基类的ApplyStyle办法来编程设置Web服务器控件的款式,以下面的代码所示:
<scriptlanguage="VB"runat="server">
SubPage_Load(SrcAsObject,EAsEventArgs)
DimMyStyleAsNewStyle
MyStyle.BorderColor=Color.Black
MyStyle.BorderStyle=BorderStyle.Dashed
MyStyle.BorderWidth=NewUnit(1)
MyLogin.ApplyStyle(MyStyle)
MyPassword.ApplyStyle(MyStyle)
MySubmit.ApplyStyle(MyStyle)
EndSub
</script>
Login:<ASP:TextBoxid="MyLogin"runat="server"/>/<p/>
Password:<ASP:TextBoxid="MyPassword"TextMode="Password"runat="server"/>
View:<ASP:DropDownListid="MySelect"runat="server">...</ASP:DropDownList> 使用主题来定制站点
后面的部分演示了几种经由过程设置控件本身的款式属性来指定控件款式的办法。比方,我们看看以下的页面(代码),在这个页面上的各个控件上都使用了良多款式设置。
<asp:LabelID="Label1"runat="server"Text="Hello1"Font-Bold="true"ForeColor="orange"/><br/>
<asp:CalendarBackColor="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">
<SelectedDayStyleBackColor="#333399"ForeColor="White"/>
<OtherMonthDayStyleForeColor="#999999"/>
<TodayDayStyleBackColor="#999999"ForeColor="White"/>
<DayStyleBackColor="#CCCCCC"/>
<NextPrevStyleFont-Bold="True"Font-Size="8pt"ForeColor="White"/>
<DayHeaderStyleFont-Bold="True"Font-Size="8pt"ForeColor="#333333"Height="8pt"/>
<TitleStyleBackColor="#333399"BorderStyle="Solid"Font-Bold="True"Font-Size="12pt"
ForeColor="White"Height="12pt"/>
</asp:Calendar>
作为在各个控件上指定款式的增补,ASP.NET2.0引进了"主题"的观点,它供应了一种界说站点的控件和页面的款式设置的复杂路子,并且它与使用程序的页面是分别的。主题的上风在于,你在计划站点的时分不必思索它的款式,在未来使用款式的时分,不用更新页面或使用程序代码。你还能够从内部猎取定制的主题,然后使用到本人的使用程序上。主题的上风是,款式设置都存储在一个独自的地位,它的保护与使用程序是分别的。
上面的例子演示了一个带有主题的页面。请注重,这个页面自己没有包括任何款式信息。主题在运转时主动地把款式属性使用到页面的控件上。
<%@PageLanguage="VB"Theme="ExampleTheme"%>
<asp:LabelID="Label1"runat="server"Text="Hello1"/><br/>
<asp:CalendarID="Calendar1"runat="server"/>
<asp:GridViewID="GridView1"AutoGenerateColumns="False"DataSourceID="SqlDataSource1"DataKeyNames="au_id"runat="server">
……
</asp:GridView>
<asp:SqlDataSourceConnectionString="<%$ConnectionStrings:Pubs%>"ID="SqlDataSource1"runat="server"SelectCommand="SELECT[au_id],[au_lname],[au_fname],[state]FROM[authors]">
</asp:SqlDataSource>
App_Themes文件夹
主题位于使用程序根目次的App_Themes文件夹中。主题由一个为主题定名的子目次和这个子目次下的一个或多个皮肤文件(带有.skin扩大名)构成。主题还能够包括CSS文件和/或寄存静态文件(比方图象)的子目次。下图显现了界说了两个主题的App_Themes目次,分离叫做"Default"和"White",每一个主题包括一个皮肤文件和一个CSS文件。
检察后面的例子,你会发明皮肤文件的内容就是控件怎样显现的复杂界说。一个皮肤文件能够包括多个控件界说,比方为每种控件范例供应一个界说。在使用主题的时分,主题中界说的控件属性主动地重载不异范例的控件的当地属性值。比方,皮肤文件中的<asp:CalendarFont-Name="Verdana"runat="server"/>控件界说将会激发使用了该主题的页面中的一切Calendar控件都利用Verdana字体。该控件的这个属性的当地值城市被主题重载。请注重,在皮肤文件中给控件界说指定ID属性是毛病的。
<P> 全局的和使用程序的主题
主题能够使用于使用程序层或呆板层(用于一切的使用程序)。使用程序层的主题安排在使用程序根目次下的App_Themes目次中。全局主题安排在ASP.NET安装目次下的ASP.NETClientFiles文件夹下的"Themes"目次中,比方%WINDIR%Microsoft.NETFramework<version>ASP.NETClientFilesThemes。IISWeb站点的全局主题的地位是Inetpubwwwrootaspnet_clientsystem_web<version>Themes。
给页面指定主题
经由过程把<%@PageTheme="..."%>指令设置为全局或使用程序层的主题(Themes或App_Themes目次下的文件夹称号),我们能够为单个页面指定主题。一个页面只能使用一个主题,可是该主题中的多个皮肤文件能够用于设置页面上的控件的款式信息。
在设置文件中指定主题
你也能够在Web.config文件的<pagestheme="..."/>部分中指定使用在程序的一切页面上的主题。假如必要作废某个特定的页面的主题,必要把该页面指令的主题属性设置为空字符串("")。请注重,母版页不克不及使用主题;你应当在内容页上或设置文件中设置主题。
<configurationxmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<pagestheme="ExampleTheme"/>
</system.web>
</configuration>
克制某个控件使用主题
你能够经由过程把控件的EnableTheming属性设置为false,把特定的控件扫除出主题的使用局限。
<%@PageLanguage="VB"Theme="OrangeTheme"%>
……
<asp:LabelID="Label1"runat="server"Text="Hello1"/><br/>
<asp:LabelID="Label2"runat="server"Text="Hello2"EnableTheming="False"/><br/>
主题中的定名皮肤(NamedSkins)
在默许情形下,皮肤文件中的控件界说会使用到页面上的一切不异范例的控件上。可是,你大概但愿使用程序分歧部分的同类控件显现为分歧的款式。比方,在某个中央你大概但愿文本和标签控件用粗体显现,在另外一个中央大概但愿它用斜体显现。你可使用主题中的定名皮肤来完成这类功效。
默许皮肤和定名皮肤
你能够经由过程为控件创建分歧的界说,在一个皮肤文件中为同类控件界说多种分歧的款式。你能够把这些控件界说的SkinID属性设置为任何称号,接着在必要使用特定皮肤的控件上设置这个SkinID值。假如短少SkinID属性,就使用默许的皮肤(没有设置SkinID属性的皮肤)。上面的例子演示了使用分歧皮肤的标签和日历控件。请注重,页面中带有定名SkinID的控件从默许的皮肤中猎取了分歧的款式汇合。
<%@PageLanguage="VB"Theme="OrangeTheme2"%>
<asp:LabelID="Label1"runat="server"Text="Hello1"/>
<asp:LabelID="Label2"runat="server"Text="Hello2"SkinID="Blue"/>
<asp:LabelID="Label3"runat="server"Text="Hello3"/>
<asp:CalendarID="Calendar1"runat="server"/>
<asp:CalendarID="Calendar2"SkinID="Simple"runat="server"/>
定名皮肤能够在主题的皮肤文件顶用多种体例来构造。因为主题能够包括多个皮肤文件,你大概会把定名皮肤支解到单个文件中,使每一个皮肤文件包括不异SkinID的多个控件界说。比方,在一个主题中,你大概具有三个皮肤文件,它们分离与特定的SkinID值对应:
/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
在一个主标题录下寄存多个皮肤文件的才能使你可以天真地构造它们。它还使你可以容易地与别人共享皮肤界说,大概把皮肤界说从一个主题复制到另外一个主题,而不必要编纂主题中的皮肤文件。
<P> 利用主题的服务器端款式
主题是在使用程序创建以后,乃至于在站点投止在临盆服务器以后才使用到程序上的。给程序使用主题的人多是该使用程序的开辟职员。比方,让使用程序的开辟职员和网站计划职员一同处置站点的表面是很罕见的。在主题使用到程序上以后,主题界说中的款式属性会重载使用程序页面中的方针控件的属性值。
另外一方面,开辟者自力地构建款式信息也很罕见。比方,在自力的文件中,利用级联款式表(CSS)来界说控件和标志款式。在这类情形下,你也能够利用主题,把主题看成是一种服务器真个款式表。经由过程这类体例使用款式表的时分,主题界说中的款式属性会设置使用程序中的控件的默许值,可是能够经由过程别的操纵来从头设置页面中的控件的这些值,从而重载了主题界说。
宣布式的服务器端款式
当我们经由过程在@Page指令或设置文件的<pages/>段中设置Theme属性来使用主题的时分,主题中的皮肤的属性将会重载页面中方针控件的不异属性。上面的例子演示了页面中的一个标签控件,它的ForeColor被设置为蓝色。在使用的主题中,标签皮肤把ForeColor属性设置为橙色。当你运转页面的时分,请注重主题界说重载了当地控件属性,一切的标签都显现为橙色。
<%@PageLanguage="VB"Theme="OrangeTheme"%>
<asp:LabelID="Label1"runat="server"Text="Hello1"/><br/>
<asp:LabelID="Label2"runat="server"Text="Hello2"ForeColor="blue"/>
请注重,这个标签是橙色的(承继自立题)而不是蓝色的(控件设置)
当我们经由过程在@Page指令或设置文件的<pages/>段中设置StyleSheetTheme属性,把主题作为服务器端款式使用的时分,主题的属性是能够被页面中的控件重载的。上面的例子演示了使用StyleSheetTheme的情形(内容与下面一个例子不异)。请注重,页面中界说的ForeColor属性获得了成功,一切的标签都显现为蓝色。
<%@PageLanguage="VB"StyleSheetTheme="OrangeTheme"%>
<asp:LabelID="Label1"runat="server"Text="Hello1"/><br/>
<asp:LabelID="Label2"runat="server"Text="Hello2"ForeColor="blue"/>
请注重,这个标签是蓝色的(控件设置)而不是橙色的(来自StyleSheetTheme)
主题和StyleSheetTheme(款式表主题)的优先成绩
StyleSheetTheme是在使用程序开辟的时分利用的,是一种在页面中构建款式信息的办法,目标是为了包管使用程序的举动与表面的改动有关。你大概必要在已利用了StyleSheetTheme的使用程序中进一步使用主题。假如使用程序同时利用了主题和StyleSheetTheme,那末控件的属性将按上面的序次来使用:
・起首使用StyleSheetTheme属性
・使用页面中控件的属性(重载StyleSheetTheme)
・最初使用主题的属性(同时重载控件属性和StyleSheetTheme)
上面的例子演示了上述内容。
<%@PageLanguage="VB"Theme="OrangeTheme"StyleSheetTheme="GreenTheme"%>
<asp:LabelID="Label1"runat="server"Text="Hello1"/><br/>
<asp:LabelID="Label2"runat="server"Text="Hello2"ForeColor="blue"Font-Italic="false"/>
请注重,页面重载了StyleSheetTheme的斜体属性,可是主题的远景色重载了别的内容
VisualWebDeveloper的撑持
VWD包括了对StyleSheetTheme的计划时(design-time)撑持。当你把StyleSheetTheme使用到一个页面上的时分,VisualStudio中的"计划视图"在控件的显现预览中就反响了使用程序的情况。经由过程选择控件的智能事件面板(只要部分控件撑持它)中的"主动格局化…"选项,你能够从可用的SkinID值列表当选择一个。"主动格局化"对话框显现了StyleSheetTheme中包括的可用SkinID值列表,同时还显现了使用选定的皮肤以后的控件款式预览。当你选中某个值以后,计划器会为该控件保留SkinID属性。
<P> 主题和皮肤的内容
后面的部分已讲过,皮肤文件包括了控件属性值的界说,它能够使用在程序的同品种型的控件上。这一部分会商增加到皮肤文件或主题的哪些内容是无效的。
Themable(可使用主题的)属性
皮肤文件中的控件界说只能包括属性的值,它们都被标志为Themeable(可使用主题)。每一个控件都能够经由过程在属性上利用ThemeableAttribute来界说一组属性。把不成使用主题的属性增加到皮肤文件中会招致毛病呈现。某个控件自己大概被主题扫除了,比方数据源控件就不成使用主题。在默许情形下,任何控件的ID属性是不克不及使用主题的。除非控件有特定的请求,不然在默许情形下,它的一切属性都是能够使用主题的。你能够参照.NET框架组件参考文档来确认控件的属性是不是能够使用主题。
在主题中利用CSS
经由过程把级联款式表(CSS)安排在定名主题的子目次中,你能够给该主题增加CSS。假如页面包括了<headrunat="server"/>控件界说,那末该CSS款式表将使用于一切利用了该主题的页面。你能够依据必要重定名CSS文件,只需它的扩大名是.css。一个主题能够包括多个CSS文件。当页面中包括了CSS文件的援用(在<head/>元素中利用<linkrel="stylesheet"href="..."/>标志)的时分,主题中的CSS文件都在页面的款式表前面使用。
在主题中利用图象
主题中也能够包括图象,它们是皮肤文件中的控件界说援用的。皮肤文件中的图象援用必需利用主标题录下的图象文件夹的绝对路径,如许皮肤文件和图象才干容易地随使用程序迁徙。在运转时,图象的路径会被从头定位,因而,对方针页面中的控件来讲,这个援用是绝对的。上面的例子演示了一个包括图象子目次的主题。
<%@PageLanguage="VB"Theme="MyTheme"%>
<asp:ImageID="Image1"SkinID="Warning"runat="server"/>
<asp:LabelID="Label1"runat="server"Text="Hello1"/><br/>
<asp:ImageID="Image2"SkinID="Warning"runat="server"/>
<asp:LabelID="Label2"runat="server"Text="Hello2"/><br/>
<asp:ImageID="Image3"SkinID="Warning"runat="server"/>
<asp:LabelID="Label3"runat="server"Text="Hello3"/><br/>
定制控件汇合主题
你在皮肤文件中设置的年夜多半属性都是一些复杂的值属性,比方Font-Name、Width和BackColor。可是,你也能够设置皮肤汇合属性。皮肤汇合属性并不是使用在方针控件的汇合项的属性上,而是在利用主题或利用StyleSheetTheme兼并汇合的时分,完整地替换汇合。
这关于某些包括款式汇合的汇合属性是有效处的,比方TreeView控件的LevelStyles(条理款式)属性或Menu控件的LevelMenuItemStyles(菜单项款式)、LevelSubMenuItemStyles(子菜单项款式)或LevelSelectedStyles(选中的款式)属性。
TreeView.skin的内容
<asp:TreeViewrunat="server"
Font-Names="Verdana"
ForeColor="Black"
HoverNodeStyle-Font-Underline="true"
ShowExpandCollapse="false"
NodeIndent="0"
>
<LevelStyles>
<asp:TreeNodeStyleChildNodesPadding="10"Font-BoldFont-Size="12pt"ForeColor="DarkGreen"/>
<asp:TreeNodeStyleChildNodesPadding="5"Font-BoldFont-Size="10pt"/>
<asp:TreeNodeStyleChildNodesPadding="5"Font-UnderLineFont-Size="10pt"/>
<asp:TreeNodeStyleFont-Size="8pt"/>
</LevelStyles>
</asp:TreeView>
定制控件模板主题
你还能够在皮肤文件中使用模板属性。与汇合相似,在皮肤文件中界说模板属性也不会使用在方针控件的模板的独自项上,而是取代全部模板的内容。这关于利用主题或StyleSheetTheme戏剧化地改动模板控件的结构时有效处的。
Template.skin内容
<asp:Loginrunat="server">
<LayoutTemplate>
<i>Pleaselogintothissite:</i><br/><br/>
<asp:LabelFont-Bold="true"AssociatedControlID="UserName"ID="UserNameLabel"runat="server">UserName:</asp:Label>
<asp:TextBoxID="UserName"runat="server"></asp:TextBox>
<asp:RequiredFieldValidatorControlToValidate="UserName"ErrorMessage="UserNameisrequired."ID="UserNameRequired"runat="server"ToolTip="UserNameisrequired."ValidationGroup="Login1">*</asp:RequiredFieldValidator>
<asp:LabelFont-Bold="true"AssociatedControlID="Password"ID="PasswordLabel"runat="server">Password:</asp:Label>
<asp:TextBoxID="Password"runat="server"TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidatorControlToValidate="Password"ErrorMessage="Passwordisrequired."ID="PasswordRequired"runat="server"ToolTip="Passwordisrequired."ValidationGroup="Login1">*</asp:RequiredFieldValidator>
<asp:ButtonCommandName="Login"ID="LoginButton"runat="server"Text="LogIn"ValidationGroup="Login1"/>
<asp:LiteralEnableViewState="False"ID="FailureText"runat="server"></asp:Literal>
</LayoutTemplate>
</asp:Login>
在主题中利用数据绑定和表达式
请注重,在主题模板中利用<%#Eval%>或<%#Bind%>的数据绑定也是无效的,可是不同意利用别的的代码数据绑定或表达式。
Databinding.skin内容
<asp:DataListRepeatColumns="2"CellPadding="20"runat="server">
<ItemTemplate>
<h3><asp:LabelID="titleLabel"runat="server"Text=<%#Eval("title")%>/></h3>
<asp:ImageImageUrl=<%#Eval("title_id","Images/{0}.gif")%>runat="server"/>
<b>ID:</b>
<asp:LabelID="title_idLabel"runat="server"Text=<%#Eval("title_id")%>/><br/>
<b>Type:</b>
<asp:LabelID="typeLabel"runat="server"Text=<%#Eval("type")%>/><br/>
<b>Price:</b>$
<asp:LabelID="priceLabel"runat="server"Text=<%#Eval("price")%>/><br/>
<asp:TextBoxTextMode="MultiLine"Rows="5"Columns="40"ID="notesLabel"Text=<%#Eval("notes")%>runat="server"/><br/>
</ItemTemplate>
</asp:DataList>
主题和设置
你大概但愿终端用户静态地为使用程序选择和使用主题。经由过程把举动主题存储在用户设置中,你能够依据用户的喜欢静态的使用主题。为了完成这类功效,你必要编写代码来使用主题,而不克不及利用@Page指令或Web.config中宣布式的办法。
在代码中指定主题
为了在代码中使用主题,你必需在运转时设置Page(页面)工具的Theme属性。在哀求的性命周期的初期(在PreInit事务中),你就必需给页面使用主题。鄙人面的例子中,用户从下拉列表控件当选择主落款称的时分,在PreInit事务中会静态地使用主题。
<scriptrunat="server">
ProtectedSubPage_PreInit()
Page.Theme=Server.HtmlEncode(Request.QueryString("Theme"))
EndSub
</script>
利用ASP.NET2.0中的设置(Profile)特征,你能够把用户选择的主题存储起来,并在用户上岸站点的时分读取它。上面的例子演示了这类手艺。用户能够选择本人喜好的色彩并存储设置文件,接上去页面经由过程检索Profile工具中的主落款称,使用这类色彩主题。请注重,假如你登出站点,主题就存储为默许值(无主题),可是假如你前往该站点,用户的选择就会保存。
ProfileTheme_vb.aspx的内容
<%@PageLanguage="VB"Theme="Default"%>
<scriptrunat="server">
ProtectedSubPage_PreInit()
IfNotProfile.FavoriteColor=""Then
Page.Theme=Profile.FavoriteColor
EndIf
EndSub
</script>
<asp:LabelID="Label1"runat="server"Text="Welcometomypage.PleaseloginwithUser=Test,Password=Test@1234"></asp:Label><br/>
<asp:LoginID="Login1"runat="server"/><br/>
<asp:LoginViewID="LoginView1"runat="server">
<LoggedInTemplate>
<asp:HyperLinkID="HyperLink1"NavigateUrl="Profile_cs.aspx"Text="EditProfile..."runat="server"/><br/>
<asp:LoginStatusID="LoginStatus1"runat="server"/>
</LoggedInTemplate>
</asp:LoginView>
Profile_vb.aspx的内容
<scriptrunat="server">
ProtectedSubPage_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)
IfNotPage.IsPostBackAndAlsoNotProfile.FavoriteColor=""Then
DropDownList1.DataBind()
EndIf
EndSub
ProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
Profile.FavoriteColor=DropDownList1.SelectedValue
Response.Redirect("ProfileTheme_cs.aspx")
EndSub
</script>
<b>FavoriteColor:</b>
<asp:DropDownListID="DropDownList1"SelectedValue=<%#Profile.FavoriteColor%>runat="server">
<asp:ListItemValue="OrangeTheme">Orange</asp:ListItem>
<asp:ListItemValue="GreenTheme">Green</asp:ListItem>
</asp:DropDownList>
<asp:ButtonID="Button1"runat="server"Text="Submit"/>中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。 |
|