65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET 2.0 (C#) 动态主题

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (43投票s)

2006 年 6 月 19 日

CPOL

1分钟阅读

viewsIcon

443642

downloadIcon

5938

一个逐步指南,用于在 ASP.NET 2.0 中创建动态主题。

Sample Image - dynamicThemes.jpg

引言

ASP.NET 2.0 使动态主题变得非常容易。无需羡慕拥有炫酷多主题的人,您可以立即拥有自己的主题!本文为您提供有关如何在 C# 中创建动态主题的逐步说明。您可以使用个人网站启动工具包来尝试此代码。

结果

现场演示可在此处查看 这里。点击左上角logo下方的“更改主题”。

代码

  1. 步骤 1:在 App_Code 文件夹下,添加一个名为 Theme.cs 的类文件
  2. public class Theme
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        public Theme(string name)
        {
            Name = name;
        }
    }
  3. 步骤 2:在 App_Code 文件夹下,添加一个名为 ThemeManager.csThemeManager 类文件。 这将列出 /App_Themes 文件夹下的所有可用主题。
  4. using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    public class ThemeManager
    {
    #region Theme-Related Method
        public static List<Theme> GetThemes()
        {
            DirectoryInfo dInfo = new DirectoryInfo(
              System.Web.HttpContext.Current.Server.MapPath("App_Themes"));
            DirectoryInfo[] dArrInfo = dInfo.GetDirectories();
            List<Theme> list = new List<Theme>();
            foreach (DirectoryInfo sDirectory in dArrInfo)
            {
                Theme temp = new Theme(sDirectory.Name);
                list.Add(temp);
            }
            return list;
        }
    #endregion
    }
  5. 步骤 3:注释掉任何预定义的 themes,例如 web.config 中的 <!--<pages styleSheetTheme="Black"/>-->。 您不需要这样做,因为应用程序级别的默认主题将在步骤 6 中的 BasePage 类中指定。
  6. 步骤 4:在您的母版页中,例如 Default.master,添加一个数据源和一个单选按钮列表。如果您更喜欢,可以使用下拉列表。
  7. <asp:ObjectDataSource ID="ThemeDataSource" runat="server" 
     SelectMethod="GetThemes" TypeName="ThemeManager" ></asp:ObjectDataSource>
    <asp:RadioButtonList ID="strTheme" runat="server" DataTextField=name 
     DataValueField=name OnSelectedIndexChanged="strTheme_SelectedIndexChanged" 
     OnDataBound="strTheme_DataBound" DataSourceID="ThemeDataSource" 
     AutoPostBack=true RepeatDirection=Horizontal />
  8. 步骤 5:在母版页的后台代码中,例如 Default.master.cs,添加这些方法
  9. protected void strTheme_DataBound(object sender, EventArgs e)
    {
        strTheme.SelectedValue = Page.Theme;
    }
    protected void strTheme_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session.Add("MyTheme", strTheme.SelectedValue);
        Server.Transfer(Request.FilePath);
    }
  10. 步骤 6:在 App_Code 下添加 BasePage 类,并指定默认主题。 这里,我们使用“White”。
  11. using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    
    
    public class BasePage : System.Web.UI.Page
    {
        protected override void OnPreInit(EventArgs e)
        {
            base.OnPreInit(e);
            if (Session["MyTheme"] == null)
            {
                Session.Add("MyTheme", "White");
                Page.Theme = ((string)Session["MyTheme"]);
            }
            else
            {
                Page.Theme = ((string)Session["MyTheme"]);
            }
        }
    }
  12. 步骤 7:从 BasePage 继承使用动态主题的所有页面
  13. public partial class Default_aspx : BasePage
    {
    }

编程愉快!

© . All rights reserved.