首页 > 编程 > .NET > 正文

ASP.NET 2.0中轻松实现网站换肤

2024-07-10 13:11:08
字体:
来源:转载
供稿:网友

  一、简介:

  利用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://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.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例子。

  app_themes文件夹:

  app_themes文件夹位于程序的根目录下,app_themes下必须是theme名称的子文件夹,子文件夹中可以包含多个.skin和.css文件。下图中建立2个theme,名称分别为default和default2:

  使用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" font-bold="true" forecolor="red" />
<asp:label runat="server" skinid="blue" font-bold="true" forecolor="blue" />

deafult.aspx

<%@ page language="c#" theme="default" %>
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.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="label2" runat="server" text="hello 2" skinid="blue" /><br />
 <asp:label id="label3" runat="server" text="hello 3" /><br />
 </form>
</body>
</html>

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

  4、其他方法:

  前面已经说了在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://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">

<html xmlns="http://www.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了。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表