一、加载主题(皮肤、样式表)的多种方式

除了在页面指令中采用Theme或者StylesheetTheme为单个页面加载主题外,还可以通过配置文件为多个页面批量加载主题,另外,还可以通过改变页面的Theme属性值动态加载主题,或者通过改变控件的SkinID属性值动态加载主题中的皮肤,或者通过改变控件的CssClass属性值动态加载主题中的样式表。

1、通过修改配置文件为多个页面批量加载主题

在配置文件里添加Theme或者StyleSheetTheme属性

<configuration>

<system.web>

<!—<pages theme=”Theme_XP”/>-->

<pages styleSheetTheme="Theme_XP"/>

</system.web> </configuration>

此时配置文件目录下的所有页面都会自动加载改主题,但记得去掉Page指令里的Theme或者StyleSheetTheme属性,否则会重写配置文件的里的对应属性。

2、通过改变页面的Theme属性值动态加载主题

在页面的PreInit事件中可以动态加载主题,此时皮肤文件和样式表文件会同时被加载,但在该事件中不能够调用页面的控件,因为在此事件中,页面控件还未初始化。

<%@ Page Language="C#" Theme="DynamicTheme" %>

…… <a href="DynamicTheme.aspx?theme=XP">Theme_XP </a>

<a href="DynamicTheme.aspx?theme=Win7">Theme_Win7 </a>

…… protected void Page_PreInit(object sender, EventArgs e)

{     Theme = "Theme_XP";     if (Request["theme"] != null)

{         switch (Request["theme"])

{             case "XP":

Theme = "Theme_XP";

break;

case "Win7":

Theme = "Theme_Win7";

break;

}

}

}

3、通过改变控件的SkinID属性值动态加载主题中的皮肤

除了在页面的PreInit事件中动态加载主题外,还可以在PreInit事件中选择加载主题中的皮肤,但皮肤只能是命名皮肤。

<%@ Page Language="C#" Theme="DynamicCSS" %>

…… <a href="showdynamicskin.aspx?skin=professional">Professional</a>

<a href="showdynamicskin.aspx?skin=colorful">Colorful</a>

…… protected void Page_PreInit(object sender, EventArgs e)

{     if (Request["skin"] != null)

{         switch (Request["skin"])

{             case "professional":

grdMovies.SkinID = "Professional";

break;

case "colorful":

grdMovies.SkinID = "Colorful";

break;         }

}

}

4、通过改变控件的CssClass属性值动态加载主题中的样式表

除了动态加载主题外,还可以选择加载主题中的样式表。 样式表文件:App_Themes\DynamicCSS\GridView.CSS

.Professional td {     padding:4px;     color:#333333;     background-color:#F7F6F3; }

.Professional .Header th {     padding:4px;     background-color:#5D7B9D;     font-weight:bold;     color:White; }

.Professional .Alternating td {     background-color:White;     color:#284775; }

.Colorful td {     padding:4px;     color:#333333;     background-color:#FFFBD6; }

.Colorful .Header th {     padding:4px;     background-color:#990000;     font-weight:bold;     color:White; }

.Colorful .Alternating td {     background-color:White; }

<%@ Page Language="C#" Theme="DynamicCSS" %>

…… <asp:GridView id="grdMovies" Runat="server" DataSourceID="srcMovies" GridLines="none" HeaderStyle-CssClass="Header" AlternatingRowStyle-CssClass="Alternating"/>

<asp:DropDownList id="ddlCssClass" Runat="server">

<asp:ListItem Text="Professional" /> <asp:ListItem Text="Colorful" /> </asp:DropDownList>

…… protected void btnSubmit_Click(object sender, EventArgs e)

{     grdMovies.CssClass = ddlCssClass.SelectedItem.Text; }

二、禁用主题(皮肤、样式表)

当加载主题到页面后,因为某些原因需要禁用某个页面的主题,或者说禁用某个控件的主题,此时我们可以采用设置Theme或者StyleSheetTheme为空来完成。而设置EnableTheming为False禁用的只是主题中的皮肤。

禁用主题:设置Theme或者StyleSheetTheme为空来完成,或者创建一个空的主题文件,然后关联它。

禁用主题中的皮肤:当以Theme方式加载主题时,我们可以设置控件或者页面的EnableThemeing为False禁用主题中的皮肤。

三、Theme和StyleSheetTheme的异同

两者都可用来加载指定的主题,当主题中不包含皮肤文件时,两者效果一样,当主题中包含皮肤文件时,两者因优先级不一样会产生不一样的效果,优先级依次为:StyleSheetTheme->Page->Theme,后面的会重写前面的相同部分。

皮肤文件:App_Themes\Theme1\TextBox.skin

<%--TextBox默认皮肤--%>

<asp:TextBox runat="server" BackColor="Red"/>

<%--TextBox命名皮肤1--%>

<asp:TextBox runat="server" BackColor="Yellow" SkinId="txtName"/>

<%--TextBox命名皮肤2--%>

<asp:TextBox runat="server" BackColor="Blue" SkinId="txtAge"/>

1、页面以Theme方式加载主题

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default1.aspx.cs" Inherits="Default1"  Theme="Theme1"%>

…… <form>

<div>

<asp:TextBox ID="TextBox1" runat="server" BackColor="Black"></asp:TextBox>

<asp:TextBox ID="TextBox2 " runat="server" SkinID="txtName" BackColor="Black"></asp:TextBox>

<asp:TextBox ID="TextBox3" runat="server" SkinID="txtAge"></asp:TextBox>

</div>

</form>

页面运行后的效果及生成的部分html代码如下,显然,主题中的皮肤文件TextBox.skin重写了页面中三个TextBox控件的相关皮肤属性BackColor,最终其值依次变成了Red,Bule,Yellow。

<input name="TextBox1" type="text" id="TextBox1" style="background-color:Red;" />

<input name="TextBox2" type="text" id="TextBox2" style="background-color:Yellow;" />

<input name="TextBox3" type="text" id="TextBox3" style="background-color:Blue;" />

2、页面以StylesheetTheme方式加载主题

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" StylesheetTheme="Theme1"%>

…… <form>     <div>

<asp:TextBox ID="TextBox1" runat="server" BackColor="Black"></asp:TextBox>

<asp:TextBox ID="TextBox2 " runat="server" SkinID="txtName" BackColor="Black"></asp:TextBox>

<asp:TextBox ID="TextBox3" runat="server" SkinID="txtAge"></asp:TextBox>     </div> </form>

页面运行后的效果及生成的部分html代码如下,显然,页面中前两个TextBox控件的相关皮肤属性BackColor重写了主题中的皮肤文件TextBox.skin,最终其值依次变成了Black,Black,Blue。

<input name="TextBox1" type="text" id="TextBox1" style="background-color:Black;" />

<input name="TextBox2" type="text" id="TextBox2" style="background-color:Black;" />

<input name="TextBox3" type="text" id="TextBox3" style="background-color:Blue;" />

ASP.NET加载主题和皮肤样式的各种方式的更多相关文章

  1. 044. asp.net主题之三应用或禁用主题和动态加载主题

    1.为单个页面指定主题可以将@Page指令的Theme或StyleSheetTheme属性设置为要使用的主题名称, 代码如下: <%@ Page Theme ="MyTheme&quo ...

  2. 为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件

    为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件.样式文件命名格式如:forms[_屏幕宽度].css,样式文件中只需重新定义文本框和下拉框的宽度即可. 在包含的头文件 ...

  3. SpringMVC加载配置Properties文件的几种方式

    最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定.URL映射的文章都很多了,写这篇博客主要总结一下 ...

  4. 044. asp.net主题之二为主题添加CSS样式和动态加载主题

    1. 新建任意一个网站, 默认主页为Default.aspx, 增加一个App_Themes目录, 用于存储主题, 添加一个MyTheme的主题, 在MyTheme主题下添加一个样式表文件, 默认名称 ...

  5. Asp.net 加载事件(转载)

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...

  6. 转载 yii2-按需加载并管理CSS样式/JS脚本

    一.资源包定义 Yii2对于CSS/JS 管理,使用AssetBundle资源包类. 创建如下: backend/assets/AppAsset.php namespace backend\asset ...

  7. JS学习之动态加载script和style样式

    前提:我们可以把一个网页里面的内容理解为一个XML或者说网页本身也就是一个XML文档,XML文档都有很特殊的象征:"标签"也叫"节点".我们都知道一个基本的网页 ...

  8. yii2.0 如何按需加载并管理CSS样式及JS脚本

    链接:http://www.yiichina.com/tutorial/399 (注:以下为Yii2.0高级应用测试) Yii2.0对于CSS/JS 管理,使用AssetBundle资源包类. 视图如 ...

  9. WPF 动态加载主题由zip

    经典主题的方式 主题战略 加载速度 本机支持 (不需要额外的代码) 支持代码为主题 (捆绑代码 & 资源成单独的文件) 支持资源层次结构中导航 动态加载 动态卸载 轻松地编辑和编译 (不需要安 ...

随机推荐

  1. 纠结的ARC

    xcode不断进步,在xcode4中引入了ARC的概念.您用或者不用它就在那里,于是有了本文:如何在未使用arc的工程中引入一个使用了arc特性的文件,如何在arc工程中引用未使用arc的文件.其实说 ...

  2. 把一个窗体嵌入到WinForm中进行显示,以CMD窗口为例

    1.添加引用 using System.Runtime.InteropServices; 2. 加入以下代码段 [DllImport("User32.dll ", EntryPoi ...

  3. Golang官方图片库

    Golang 的图片出来通过提供操作每一个像素点设置颜色(http://www.cnblogs.com/ghj1976/p/3441536.html) 和 提供通过可选蒙版图片重叠操作 (http:/ ...

  4. GC Buffer Busy Waits处理(转载)

    与单实例不同,在RAC环境中,由于多节点的原因,会因为节点间的资源争用产生GC类的等待,而这其中,GC Buffer Busy Waits又是最为常见的,从性能角度上说,RAC是把双刃剑,用的好,能够 ...

  5. SQL查询数据库信息, 数据库表名, 数据库表信息

    SQL查询数据库信息, 数据库表名, 数据库表信息 ---------------------------------------------- -- 以下例子, 在sql_server 中可以直接运 ...

  6. 使用xshell使用删除出现乱码

    在使用xshell的时候出现如下错误: 1.打开如下属性设置: 2. 查看终端--键盘设置 4.修改为下图所示: 从而可解决删除乱码问题,在设置完成之后,关闭xshell,重新打开即可.

  7. nagios监控linux设置

    本章主要用来设置nagios的相关配置文件,从而能实现对linux系统的监控. 在进行监控相关服务的时候,nagios会周期性的调用插件去监测服务器的状态,nagios自带的所有插件都放在如下目录: ...

  8. static public和 public static 区别

    static:加static 的是静态成员,不能实例化在你运行的时候他自己在内存中开辟了块空间,不用在new, 有点像全局变量,如果不用你必须去 实例化(new)才能用 static是静态的意思,pu ...

  9. mac多版本python安装 pymysql

    系统里面安装了多个python的版本,有2.7和3.4等.默认的2.7版本,但我开发需要3.4版本的. 默认情况下,用pip安装PyMySQL $sudo pip install PyMySQL 安装 ...

  10. OSPF ProcessID(进程号)详解

    一.OSPF ProcessID本地有效         首先明确一下,OSPF ProcessID,范围为1-65535,用于在路由器本地标识OSPF进程. 看上图,R1使用进程号10创建了一个OS ...