why主题:为了使页面的风格保持一致,并更容易维护
why皮肤:用来统一修改具有皮肤效果属性的asp.net控件
why CSS:同时修改html元素和asp.net控件(因为asp.net控件最终也是呈现为html元素)
皮肤(skin)和CSS的不同之处:
1)皮肤运行在服务器端,可以设置CSS中不可访问的属性;而CSS运行在客户端
2)css在客户端执行,浏览器会缓存下载的外部css文件,这样运行速度更快;而皮肤要在服务器端进行合并,效率较低
建议不要修改控件的属性来改变控件皮肤。此外,也要避免使用皮肤文件
- 创建主题
在根目录上创建App_Themes文件夹,在其目录上创建的每一个文件夹为一个主题
主题可包含图片和文本文件,也再创建子文件夹来组织主题内容,在主题文件中比较重要的文件类型是:1)皮肤文件 (*.skin) 2)css文件(*.css)
注意:主题的命名方式(文件夹名)。因为主题文件夹内容会自动在后台编译成新的类。所以要注意主题的名称,不要和项目中已有的其他类名冲突。
皮肤定义文件:1)asp.net控件要写runat属性 ,但不能写id属性
使用页:1)<% @page theme="theme" %>
以上为创建默认皮肤,如要创建
命名
皮肤,需同时在皮肤定义文件和使用页加上SkinID属性
不能给用户控件的属性应用皮肤。然而,可以给用户控件中包含的控件应用皮肤
皮肤有两种:1)默认皮肤 2)命名皮肤
注意:在一个主题中,每一个控件只能有一个默认皮肤。但是,可以在主题中包含多个命名皮肤。每一个命名皮肤的名称必须唯一。
替换皮肤
当在页面中应用主题时,主题中的控件属性会重写页面中的已有控件属性。也就是说,皮肤文件中的属性会重写页面中的属性。
如果想让控件属性不被皮肤文件里定义的属性重写,可以在使用页中去掉theme属性,写上StyleSheetTheme属性:
<%@ Page Language="C#" StyleSheetTheme="Simple3" %>
- 禁用主题
每个ASP.NET控件都包含名为EnableTheming的属性。可以使用这个属性来阻止页面中的特定控件应用皮肤。
<asp:Calendar id="Calendar2" EnableTheming="false" Runat="server" />
- 注册主题
是网站所有页面可以使用主题
<configuration>
<system.web>
<pages theme="Site" />
</system.web>
</configuration>
除了可以设置theme,还可以设置StyleSheetTheme,eg:<pages StyleSheetTheme="site" />
启用了主题后,可以在特定页面通过EnableTheming禁用 <% Page Language="C#" EnableTheming="false" %>
- 在主题中添加css
除了使用皮肤文件,也可使用css来控制页面上html元素和asp.net控件的皮肤。如果在主题文件夹中添加css文件,则在页面应用主题也会自动应用css
建议使用css外部样式表来控制html和asp.net外观,而不是使用asp.net控件属性或皮肤文件
使用皮肤文件的优势 1)性能:速度更快,浏览器可以加载缓存外部样式表的内容
2)客户端无法通过查看源文件知道开发人员使用的具体样式,而用控件属性或皮肤通过客户端的html元素的style属性马上就能查看。
使用皮肤文件和修改控件属性没有区别。使用皮肤也会使页面变得臃肿。举例来说,如果给label控件创建一个皮肤,当每个页面的label控件输出时,皮肤文件中的label属性必须和每个页面中的label控件进行合并。