定制控件模板主題
你還可以在皮膚文件中應用模板屬性
與集合類似
在皮膚文件中定義模板屬性也不會應用在目標控件的模板的單獨項上
而是代替整個模板的內容
這對於使用主題或StyleSheetTheme戲劇化地改變模板控件的布局時有用處的
Template
skin內容
<asp:Login runat=server>
<LayoutTemplate>
<i>Please log in to this site:</i><br /><br />
<asp:Label FontBold=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=Login>*</asp:RequiredFieldValidator>
<asp:Label FontBold=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=Login>*</asp:RequiredFieldValidator>
<asp:Button CommandName=Login ID=LoginButton runat=server Text=Log In ValidationGroup=Login />
<asp:Literal EnableViewState=False ID=FailureText runat=server></asp:Literal>
</LayoutTemplate>
</asp:Login>
在主題中使用數據綁定和表達式
請注意在主題模板中使用<%# Eval %>或<%# Bind %>的數據綁定也是有效的但是不允許使用其它的代碼數據綁定或表達式
Databindingskin內容
<asp:DataList RepeatColumns= CellPadding= runat=server>
<ItemTemplate>
<h><asp:Label ID=titleLabel runat=server Text=<%# Eval(title) %>/></h>
<asp:Image ImageUrl=<%# Eval(title_id Images/{}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= Columns= ID=notesLabel Text=<%# Eval(notes) %> runat=server/><br />
</ItemTemplate>
</asp:DataList>
主題和配置
你可能希望終端用戶動態地為應用程序選擇和應用主題通過把活動主題存儲在用戶配置中你可以根據用戶的喜好動態的應用主題為了實現這種功能你需要編寫代碼來應用主題而不能使用@Page指令或Webconfig中宣告式的方法
在代碼中指定主題
為了在代碼中應用主題你必須在運行時設置Page(頁面)對象的Theme屬性在請求的生命周期的早期(在PreInit事件中)你就必須給頁面應用主題在下面的例子中用戶從下拉列表控件中選擇主題名稱的時候在PreInit事件中會動態地應用主題
<script runat=server>
Protected Sub Page_PreInit()
PageTheme = ServerHtmlEncode(RequestQueryString(Theme))
End Sub
</script>
使用ASPNET 中的配置(Profile)特性你可以把用戶選擇的主題存儲起來並在用戶登陸站點的時候讀取它下面的例子演示了這種技術用戶可以選擇自己喜歡的顏色並存儲配置文件接下來頁面通過檢索Profile對象中的主題名稱應用這種顏色主題請注意如果你登出站點主題就存儲為默認值(無主題)但是如果你返回該站點用戶的選擇就會保留
ProfileTheme_vbaspx的內容
<%@ Page Language=VB Theme=Default %>
<script runat=server>
Protected Sub Page_PreInit()
If Not ProfileFavoriteColor = Then
PageTheme = ProfileFavoriteColor
End If
End Sub
</script>
<asp:Label ID=Label runat=server Text=Welcome to my page Please login with User=Test Password=Test@></asp:Label><br />
<asp:Login ID=Login runat=server /><br />
<asp:LoginView ID=LoginView runat=server>
<LoggedInTemplate>
<asp:HyperLink ID=HyperLink NavigateUrl=Profile_csaspx Text=Edit Profile runat=server /><br />
<asp:LoginStatus ID=LoginStatus runat=server/>
</LoggedInTemplate>
</asp:LoginView>
Profile_vbaspx的內容
<script runat=server>
Protected Sub Page_Load(ByVal sender As Object ByVal e As SystemEventArgs)
If Not PageIsPostBack AndAlso Not ProfileFavoriteColor = Then
DropDownListDataBind()
End If
End Sub
Protected Sub Button_Click(ByVal sender As Object ByVal e As SystemEventArgs)
ProfileFavoriteColor = DropDownListSelectedValue
ResponseRedirect(ProfileTheme_csaspx)
End Sub
</script>
<b>Favorite Color:</b>
<asp:DropDownList ID=DropDownList SelectedValue=<%# ProfileFavoriteColor %> runat=server>
<asp:ListItem Value=OrangeTheme>Orange</asp:ListItem>
<asp:ListItem Value=GreenTheme>Green</asp:ListItem>
</asp:DropDownList>
<asp:Button ID=Button runat=server Text=Submit OnClick=Button_Click />
[] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/net/201311/15067.html