• ASP.NET 轻松实现网站换肤App_Themes的使用


    一、简介
    新建App_Themes文件夹:
    项目 - 右键 - 添加 - 添加ASp.net文件夹 - 主题
    利用Themes我们可以很容易的更改控件、页面的风格,而不需要修改我们的代码和页面文件。Themes文件被单独的放在1个App_Themes文件夹下面,与你的程序是完全分开的。

    二、怎么使用Themes和Skins:
    先看个非常简单的实例:

    App_Themes\default\1.skin文件代码如下:
    <asp:Label Font-Bold="true" ForeColor="Red" runat="server" />
    
    default.aspx:文件代码:
    <%@ Page Language="C#" Theme="default" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://w3.org/1999/xhtml">
    <head id="Head1" runat="server">
    <title>Page with Example Theme Applied</title>
    </head>
    <body>
    <form id="form1" runat="server">
    	<asp:Label ID="Label1" runat="server" Text="Hello 1" /><br />
    	<asp:Label ID="Label2" runat="server" Text="Hello 2" /><br />
    </form>
    </body>
    </html>
    

      可以看到我们在default.aspx并没有写如何的控制style的代码,但运行取发现label上的字都变成了粗体红色了,这就是1个最基本的theme例子。

    三、使用themes

    1、在1个页面中应用Theme:
      如果想在某1个页面中应用Theme,直接在aspx文件中修改<%@ Page Theme="..." %>,比如你想这个页面应用default2 theme,设置<%@ Page Theme="default2" %>就OK

    2、在所有页面应用同1个Theme:
      如果要在所有页面上使用相同的Theme,在web.config中的<system.web>节点下加上句<pages theme="..."/>

    3、让控件不应用Theme:
      第1个例子中我们看到了2个Label的风格都变了,就是说.skin文件中的风格在页面上所有Label都起作用了。但有时我们希望某1个Label不应用.skin中的风格,这时你只需设置Label的EnableTheming属性为false的时候就可以了。

      也许你还想不同的label显示不同的风格,你只需设置label的SkinID属性就可以,见下面的实例:

    	App_Themes\default\1.skin文件代码如下:
    	<asp:label runat="server" SkinID="Blue" font-bold="true" forecolor="blue" />
    
    	deafult.aspx页面代码如下:
    	<%@ Page Language="C#" Theme="default" %>
    	<head>
    	<title>Page with Example Theme Applied</title>
    	</head>
    	<body>
    		<form id="form1" runat="server">
    		<asp:Label ID="Label2" runat="server" Text="Hello 2" SkinID="Blue" /><br />
    		</form>
    	</body>
    

    运行后就会发现label显示的风格不一样了。

    四、其他方法

      前面已经说了在aspx文件头使用 <%@ Page Theme="..." %> 来使用theme,而用这个方法应用theme中的风格将会覆盖你

    写在aspx中的控件属性style。比如:

      App_Themes\default\1.skin
    	<asp:Label Font-Bold="true" ForeColor="Red" runat="server" />
    
      default.aspx
    	<%@ Page Language="C#" Theme="default" %>
    	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w3.org/TR/xhtml1/DTD/xhtml1-
    
    transitional.dtd">
    	<html xmlns="http://w3.org/1999/xhtml">
    
    	<head id="Head1" runat="server">
    	</head>
    	<body>
    	<form id="form1" runat="server">
    		<asp:Label ID="Label1" runat="server" Text="Hello 1" /><br />
    		<asp:Label ID="Label2" runat="server" Text="Hello 2" ForeColor="blue" />
    	</form>
    	</body>
    	</html>
    

      运行结果,所有的label的forecolor都为red。
      而使用<%@ Page StyleSheetTheme="..." %>应用theme就不会覆盖你在aspx文件中写的属性style:
      控件应用style属性的顺序如下:
      a、StyleSheetTheme引用的风格
      b、代码设定的控件属性(覆盖StyleSheetTheme)
      c、Theme引用的风格(覆盖前面2个)

      theme中包含CSS:
      theme中也可以使用.css文件,当你把.css文件放在1个theme目录下后,在用到了这个theme的页面中自动会应用你的.css的

    五、整站换肤

      前面讲的都是在aspx文件或web.config中应用theme,而在blog这样的每个用户都有不同的skin的网站中用上面的方法来

    实现换skin显然是不方便的。
      下面就介绍怎么在后台代码中动态的引用theme来解决上面的情况,theme必须在page被请求的最早期就应用上,所以我们

    必须在Page_PreInit事件中写代码,代码很简单,就1句:
     Page.Theme = "...";
     这里我们只要从数据库中去读取每个用户设置的不同theme名就可以轻松实现每个用户都有不同的skin了。

  • 相关阅读:
    CMD指令
    六种Socket I/O模型幽默讲解
    性格与职业的选择
    为什么主引导记录的内存地址是0x7C00?
    pandas数据分析第二天
    pandas数据结构和介绍第一天
    tornado options
    tornado.web.StaticFileHandler
    mysql多条更新
    pandas
  • 原文地址:https://www.cnblogs.com/cxeye/p/2537587.html
Copyright © 2020-2023  润新知