ASP.NET2.0中themes、Skins轻松实现网站换肤!

简介:

可能有些朋友还不是很清楚themes、skins。下面先介绍下themes、skins.。

一、简介:
一看Themes、Skins这2名字就都知道是用来做什么的了吧,下面就说下它是做什么的(怎么都知道了还说,~_~),利用Themes我们可以很容易的更改控件、页面的风格,而不需要修改我们的代码和页面文件。
Themes文件被单独的放在1个App_Themes文件夹下面,与你的程序是完全分开的。

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

App_Themes\default\1.skin文件代码:

None.gif < asp:Label  Font-Bold ="true"  ForeColor ="Red"  runat ="server"   />

default.aspx:文件代码:

ExpandedBlockStart.gif <% @ Page Language="C#" Theme="default"  %>
None.gif <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
None.gif < html  xmlns ="http://www.w3.org/1999/xhtml" >
None.gif < head  id ="Head1"  runat ="server" >
None.gif   < title >Page with Example Theme Applied </ title >
None.gif </ head >
None.gif < body >
None.gif   < form  id ="form1"  runat ="server" >
None.gif       < asp:Label  ID ="Label1"  runat ="server"  Text ="Hello 1"   />< br  />
None.gif       < asp:Label  ID ="Label2"  runat ="server"  Text ="Hello 2"   />< br  />
None.gif   </ form >
None.gif </ body >
None.gif </ html >
None.gif

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

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

使用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

None.gif < asp:label  runat ="server"  font-bold ="true"  forecolor ="Red"   />
None.gif < asp:label  runat ="server"  SkinID ="Blue"  font-bold ="true"  forecolor ="blue"   />

deafult.aspx

ExpandedBlockStart.gif <% @ Page Language="C#" Theme="default"  %>
None.gif <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
None.gif < html  xmlns ="http://www.w3.org/1999/xhtml" >
None.gif < head  id ="Head1"  runat ="server" >
None.gif   < title >Page with Example Theme Applied </ title >
None.gif </ head >
None.gif < body >
None.gif   < form  id ="form1"  runat ="server" >
None.gif       < asp:Label  ID ="Label2"  runat ="server"  Text ="Hello 2"  SkinID ="Blue"   />< br  />
None.gif       < asp:Label  ID ="Label3"  runat ="server"  Text ="Hello 3"   />< br  />
None.gif   </ form >
None.gif </ body >
None.gif </ html >

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

4、其他方法:
前面已经说了在aspx文件头使用 <%@ Page Theme="..." %> 来使用theme,而用这个方法应用theme中的风格将会覆盖你写在aspx中的控件属性style。比如:
 App_Themes\default\1.skin

None.gif < asp:Label  Font-Bold ="true"  ForeColor ="Red"  runat ="server"   />

default.aspx

ExpandedBlockStart.gif <% @ Page Language="C#" Theme="default"  %>
None.gif <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
None.gif
None.gif < html  xmlns ="http://www.w3.org/1999/xhtml" >
None.gif < head  id ="Head1"  runat ="server" >
None.gif </ head >
None.gif < body >
None.gif   < form  id ="form1"  runat ="server" >
None.gif       < asp:Label  ID ="Label1"  runat ="server"  Text ="Hello 1"   />< br  />
None.gif       < asp:Label  ID ="Label2"  runat ="server"  Text ="Hello 2"  ForeColor ="blue"   />
None.gif   </ form >
None.gif </ body >
None.gif </ 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了。

------------------------------------------
以上都是个人的看法和体会,如有不妥处,还请大家多多指点,谢谢!












本文转自BearRui(AK-47)博客园博客,原文链接:http://www.cnblogs.com/BearsTaR/archive/2006/04/10/Theme.html    ,如需转载请自行联系原作者



相关文章
|
7月前
|
存储 C# 数据库
.NET开源的在Windows上统计软件使用时长和网站浏览时长工具 - Tai
.NET开源的在Windows上统计软件使用时长和网站浏览时长工具 - Tai
|
3月前
|
Java PHP 开发工具
支付宝记---电脑网站支付(.NET)
支付宝记---电脑网站支付(.NET)
40 1
|
Docker 容器
.NET Core 网站项目在Docker中运行无法访问问题处理
.NET Core 网站项目在Docker中运行无法访问问题处理
264 0
|
10月前
|
开发框架 供应链 前端开发
net基于asp.net的社区团购网站
社区团购系统依托社区团购系统和社区门店,是现在的一个重大市场和发展方向,通过研究企业在社区团购系统环境下的营销模式创新,对于普通的零售业和传统社区团购系统的转型发展具有重要的理论意义。随着互联网行业的发展,人们的生活方式发生着重大变化,人们越来越倾向于网络购物,这对传统企业来说如何把客户留下是一个重大挑战。就现在而言,由于社区团购的竞争已经进入最紧张激烈的阶段,有些团购平台甚至已经彼此之间打起了价格战,其中不乏有平台因为利润变少或资金链断裂而半途败亡。企业在实际的商业活动中,往往会面临许多等待优化的问题。因此,要在竞争激烈的市场中拔得头筹,必须重视提升对新商业模式的全面认知,科学于实际贴合的分
|
11月前
|
开发框架 安全 .NET
教你如何在WINDOWS Server2003上部署一个Asp.Net的网站
教你如何在WINDOWS Server2003上部署一个Asp.Net的网站
302 0
|
前端开发 NoSQL 关系型数据库
一个基于.Net Core开源个人博客网站
一个基于.Net 6开发的个人博客网站,功能完备。非常使用用来搭建个人博客、资源分享。
128 0
一个基于.Net Core开源个人博客网站
|
开发框架 .NET C#
ASP.NET Core 返回文件、用户 下载文件,从网站下载文件,动态下载文件
ASP.NET Core 返回文件、用户 下载文件,从网站下载文件,动态下载文件
496 0
|
SQL 开发框架 前端开发
Asp.net core项目实战 新闻网站+后台 源码、设计原理、视频教程
Asp.net core项目实战 新闻网站+后台 源码、设计原理、视频教程
304 0
Asp.net core项目实战 新闻网站+后台 源码、设计原理、视频教程
|
SQL 弹性计算 安全
阿里云ECS云服务器部署.NET网站
阿里云ECS云服务器使用的小技巧,以及一些问题的解决方案。
阿里云ECS云服务器部署.NET网站
|
开发框架 安全 前端开发
网站漏洞修复之UEditor漏洞 任意文件上传漏洞 2018 .net新版
UEditor于近日被曝出高危漏洞,包括目前官方UEditor 1.4.3.3 最新版本,都受到此漏洞的影响,ueditor是百度官方技术团队开发的一套前端编辑器,可以上传图片,写文字,支持自定义的html编写,移动端以及电脑端都可以无缝对接,自适应页面,图片也可以自动适应当前的上传路径与页面比例大小,一些视频文件的上传,开源,高效,稳定,安全,一直深受站长们的喜欢。
846 0
网站漏洞修复之UEditor漏洞 任意文件上传漏洞 2018 .net新版

相关实验场景

更多