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

ASP.NET 主题

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013 年 10 月 11 日

CPOL

4分钟阅读

viewsIcon

28282

主题 作者:Prakash Singh Mehra 引言:主题是定义各种控件的格式细节的方式,并且可以被重用

主题

作者:Prakash Singh Mehra

简介:主题是为各种控件定义格式化详细信息的方式,并且可以在多个页面中重用。稍后,通过对主题进行少量修改,就可以在保持一致性的同时更改整个网站的外观。

为什么还需要另一个格式化功能?CSS 是一种非常方便的格式化功能,但它仅限于通用的格式化细节(字体、边框、背景等),有时需要实现控件特定的格式化。Asp.net 2.0 提供了一项新功能,“主题”,以弥补这一不足。

它在多个方面与 CSS 不同
1. 主题是基于控件的,而不是基于 HTML 的。
2. 主题是在服务器端实现的,而在样式表的情况下,客户端会接收页面和 CSS,并在客户端进行合并。
3. 可以通过配置文件应用主题。
4. 主题提供了保留 CSS 功能的灵活性,而不是盲目覆盖它。

创建主题文件夹
在应用程序主目录下的 App_Theme 文件夹下创建一个文件夹(带有特定名称),然后在创建的主题文件夹下添加一个或多个皮肤文件(扩展名为 .skin 的文本文件)。应用程序可能包含多个主题,所有这些主题都应在不同的主题文件夹下定义。但是,一个页面一次只能激活一个主题。

创建皮肤文件
皮肤文件是扩展名为 .skin 的文本文件。它包含一组具有标准化属性的控件标签,例如:
<asp:TextBox runat="server" BackColor="Orange"/>
runat="server" 部分始终是必需的。其他所有内容都是可选的,而 id 属性不允许在主题中使用。

也可以在主题文件夹下放置多个皮肤文件,但 ASP.NET 会将它们全部视为单个主题定义的一部分。如果为复杂控件(日历、网格视图)编写了单独的皮肤文件,以区分它们的格式化与其他简单控件的格式化,这将更有用。

注意:Visual Studio 不提供创建主题的设计时支持,因此最好复制网页中的标签并根据主题定义进行修改。

应用主题:
要在网页中应用主题,需要将 Page 指令的 Theme 属性设置为您的主题文件夹名称。(ASP.NET 会自动扫描该主题中的所有皮肤文件。)
<%@ Page Language="C#" AutoEventWireup="true" ... Theme="MyTheme" %>

一旦将主题应用于页面,ASP.NET 就会考虑该网页上的每个控件,并检查已注册的皮肤文件,看它们是否为该控件定义了任何属性。如果 ASP.NET 在皮肤文件中找到匹配的标签,那么皮肤文件中的信息将覆盖控件的当前属性。

但有时需要用自定义属性覆盖某些主题属性。这可以通过使用 StyleSheetTheme 属性代替 Theme 来实现。它会将主题设置限制在已设置的控件属性上,而其他属性将从主题中获取配置(当应用 CSS 类时也会发生同样的事情)。
<%@ Page Language="C#" AutoEventWireup="true" ... StyleSheetTheme="MyTheme" %>

还有一个选项(EnableTheming = ‘False’)可以为特定控件下的所有属性禁用主题。
<asp: TextBox ID="TextBox1" runat="server" ... EnableTheming="false" />

为同一控件创建多个皮肤
如果为同一控件定义了多个主题,ASP.NET 会报编译错误。但是,可以通过为同一控件的冲突主题提供 SkinID 属性来处理这种情况。
<asp:TextBox runat="server" BackColor="Orange" />
<asp:TextBox runat="server" BackColor="Red" SkinID="Dramatic"/>

相应地,为 Web 控件设置特定的 SkinId。
<asp:TextBox ID=" TextBox 1" runat="server" ... SkinID="Dramatic" />

注意:可以将相同的 skinID 用于与不同控件关联的多个主题。
<asp:TextBox runat="server" BackColor="Red" SkinID="Dramatic"/>
<asp:ListBox runat="server" BackColor="Red" SkinID="Dramatic"/>

在主题中使用 CSS:
可以使用 CSS 类进一步标准化主题。为此,请将 CSS 类放在相应的主题文件夹下。ASP.Net 会搜索此文件夹下的所有 CSS 类,并通过 link 属性动态将它们绑定到 Web 页面(使用此特定主题的页面)(只有当 Web 页面的 <head> 部分设置了 runat=”server” 属性时才可能)。
<head runat="server">

通过配置文件应用主题
可以使用 Web.config 文件将特定主题应用于整个网站。例如:
<Configuration>
<system.web>
<pages theme="MyTheme" />
或者
<pages styleSheetTheme="MyTheme" />
</system.web>
</Configuration>

动态应用主题:
在 Pre_Init 事件中使用 Page.Theme 或 Page.StyleSheet 属性(Page.Theme=”MyTheme”)。因此,如果需要更改主题,则应再次触发 pre_init 事件。这可以通过强制执行页面回发(例如,将页面重定向到同一页面)来实现。

同样,对于命名皮肤,也可以动态设置控件的 SkinID 属性。

动态应用主题的一个限制是,您无法在用户控件或母版页中应用主题,因为它们都没有 Pre_Init 事件。

 

关于 Asp 主题的文章

MSDN 链接

http://msdn.microsoft.com/en-us/magazine/cc163711.aspx

http://msdn.microsoft.com/en-us/library/ykzx33wh.aspx

动态主题加载

https://codeproject.org.cn/KB/aspnet/dynamicThemes.aspx

视频教程

http://download.microsoft.com/download/3/6/0/3604c3d2-0db9-4726-910d-b3b8f93a86e4/hilo_profile-themes_final.wmv

 


 

© . All rights reserved.