<b>第一步:建立ThemeDemo項目</b>
<b>第二步:添加基類SkinnedWebControl.cs</b>
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
namespace WebUC.ThemeDemo.Controls
{
[
ParseChildren(true)
]
/// <summary>
/// 換皮膚控件基類
/// </summary>
public abstract class SkinnedWebControl : WebControl, INamingContainer
{
string skinFilename = null;
protected override void CreateChildControls()
Control skin;
// 裝載使用者控件檔案
skin = LoadSkin();
// 初始化控件和對控件綁定
InitializeSkin(skin);
Controls.Add(skin);
}
/// 裝載使用者控件檔案
/// <returns></returns>
protected Control LoadSkin()
// 使用者控件檔案預設放在Themes目錄下
string skinPath = "Themes/" + SkinFilename;
// 是否定義了使用者控件檔案?
if (SkinFilename == null)
throw new Exception("必須定義SkinFilename屬性,指定使用者控件檔案路徑");
// 通過Page.LoadControl(defaultSkinPath)方法,從使用者控件檔案中擷取 UserControl 對象
try
{
skin = Page.LoadControl(skinPath);
}
catch (FileNotFoundException)
throw new Exception("使用者控件檔案未找到!");
return skin;
/// 初始化控件,并綁定控件資料
/// <param name="skin"></param>
protected abstract void InitializeSkin(Control skin);
/// 使用者控件檔案路徑
public string SkinFilename
get { return skinFilename;}
set { skinFilename = value; }
}
<b>第三步:建立Themes目錄,并建立兩個使用者控件檔案Login.ascx和Login1.ascx</b>。布局樣式不同,但是都必須包含以下控件:
TextBox Username
TextBox Password
Button LoginButton
Label Result
Login.ascx
<P>登陸頁的預設皮膚樣式</P>
<P>使用者名:<asp:TextBox id="Username" runat="server"></asp:TextBox></P>
<P>密 碼:<asp:TextBox id="Password" runat="server" TextMode="Password"/></P>
<P><asp:Button id="LoginButton" runat="server" Text="登陸"/></P>
<P><asp:Label id="Result" runat="server"/></P>
Login1.ascx
<P>登陸頁的皮膚樣式1</P>
使用者名:<asp:TextBox id="Username" runat="server"/>
密 碼:<asp:TextBox id="Password" runat="server" TextMode="Password"/>
<asp:Button id="LoginButton" runat="server" Text="登陸"/><asp:Label id="Result" runat="server"/>
<b>第四步:建立Login控件Login.cs</b>
/// 登陸控件,繼承自SkinnedWebControl
public class Login : SkinnedWebControl
string skinFilename = "Login.ascx"; // 指定預設皮膚樣式
TextBox username; // 帳号輸入框
TextBox password; // 密碼輸入框
Button loginButton; // 登陸按鈕
Label result; // 顯示登陸結果
public Login()
{
if (SkinFilename == null)
SkinFilename = skinFilename;
}
/// <summary>
/// 重寫InitializeSkin,初始化控件和對控件進行綁定
/// </summary>
/// <param name="skin"></param>
protected override void InitializeSkin(System.Web.UI.Control skin)
// 查找ascx頁中ID是username的textbox控件
username = (TextBox) skin.FindControl("Username");
// 綁定資料
username.Text = "demo";
// 查找ascx頁中ID是password的textbox控件
password = (TextBox) skin.FindControl("Password");
password.Attributes.Add("value","demo");
// 初始化Result控件
result = (Label) skin.FindControl("Result");
// 找到登陸按鈕
loginButton = (Button) skin.FindControl("LoginButton");
loginButton.Click += new System.EventHandler(LoginButton_Click); // 綁定登陸按鈕的Click事件
/// 響應登陸按鈕事件
/// <param name="sender"></param>
/// <param name="e"></param>
public void LoginButton_Click(Object sender, EventArgs e)
if (username.Text == "demo" && password.Text == "demo")
result.Text = "<font color='blue'>登陸成功!";
else
result.Text = "<font color='red'>登陸失敗,使用者名密碼不比對!";
<b>第五步:建立兩個aspx頁,分别把兩種風格的登陸控件加入。</b>
Login.aspx
Login1.aspx
<b>最後,分别運作看看效果:)</b>
<a href="http://webuc.net/download/ThemeDemo.rar">源碼下載下傳</a>
本文轉自高海東部落格園部落格,原文連結:http://www.cnblogs.com/ghd258/archive/2005/12/18/299444.html,如需轉載請自行聯系原作者