ASP.NET加载主题和皮肤样式的各种方式
一、加载主题(皮肤、样式表)的多种方式
除了在页面指令中采用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加载主题和皮肤样式的各种方式的更多相关文章
- 044. asp.net主题之三应用或禁用主题和动态加载主题
1.为单个页面指定主题可以将@Page指令的Theme或StyleSheetTheme属性设置为要使用的主题名称, 代码如下: <%@ Page Theme ="MyTheme&quo ...
- 为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件
为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件.样式文件命名格式如:forms[_屏幕宽度].css,样式文件中只需重新定义文本框和下拉框的宽度即可. 在包含的头文件 ...
- SpringMVC加载配置Properties文件的几种方式
最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定.URL映射的文章都很多了,写这篇博客主要总结一下 ...
- 044. asp.net主题之二为主题添加CSS样式和动态加载主题
1. 新建任意一个网站, 默认主页为Default.aspx, 增加一个App_Themes目录, 用于存储主题, 添加一个MyTheme的主题, 在MyTheme主题下添加一个样式表文件, 默认名称 ...
- Asp.net 加载事件(转载)
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- 转载 yii2-按需加载并管理CSS样式/JS脚本
一.资源包定义 Yii2对于CSS/JS 管理,使用AssetBundle资源包类. 创建如下: backend/assets/AppAsset.php namespace backend\asset ...
- JS学习之动态加载script和style样式
前提:我们可以把一个网页里面的内容理解为一个XML或者说网页本身也就是一个XML文档,XML文档都有很特殊的象征:"标签"也叫"节点".我们都知道一个基本的网页 ...
- yii2.0 如何按需加载并管理CSS样式及JS脚本
链接:http://www.yiichina.com/tutorial/399 (注:以下为Yii2.0高级应用测试) Yii2.0对于CSS/JS 管理,使用AssetBundle资源包类. 视图如 ...
- WPF 动态加载主题由zip
经典主题的方式 主题战略 加载速度 本机支持 (不需要额外的代码) 支持代码为主题 (捆绑代码 & 资源成单独的文件) 支持资源层次结构中导航 动态加载 动态卸载 轻松地编辑和编译 (不需要安 ...
随机推荐
- Linux下的Memcache安装
Linux下Memcache服务器端的安装服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-1.3.0 .下载:http://www.danga.com/memcach ...
- 关于asp.net中页面事件加载的先后顺序
一.ASP.NET 母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序.对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件.控件事件 ...
- ASP.NET MVC之文件上传【二】
前言 上一节我们讲了简单的上传以及需要注意的地方,查相关资料时,感觉上传里面涉及到的内容还是比较多,于是就将上传这一块分为几节来处理,同时后续也会讲到关于做上传时遗漏的C#应该注意的地方,及时进行查漏 ...
- app如何节省流量
前言:“客户端上传时间戳”的玩法,你玩过么?一起聊聊时间戳的奇技淫巧! 缘起:无线时代,流量敏感.APP在登录后,往往要向服务器同步非常多的数据,很费流量,技术上有没有节省流量的方法呢?这是本文要讨论 ...
- 猎豹使用AI RoboForm填表
最近,Chrome同步书签好慢,另外因为工作的原因,chrome还是用来做工作的事情,自己的事情准备换到猎豹,但是一个重要的问题是强大的自动填表工具AI RoboForm没有整合到猎豹的地方: 搜索了 ...
- ASP.NET转换人民币大小金额
public class DecimalToRMB { /// <summary> /// 转换人民币大小金额 /// </sum ...
- Linux-sed用法
本文为转载,原地址:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具,本身是一个管道命 ...
- Coffee Script 笔记 1
安装node 虽然官网提供了单文件bin的版本 但是并不知道怎么安装npm 于是乎还是得安装msi (坑 当使用 coffee -w -c . 监视文件改变 即时编译的时候会 提示 Error: T ...
- 【解决】SAE部署Django1.6+MySQL
终于可以舒口气了,今天大部分时间都在搞这个,很是蛋疼,网上资料良莠不齐,我不信这个之前没人做过,但是他们确实分享的不够好. 废话不多说,还是记录一下今天的工作吧. 1,装SVN 这个没什么好说的,去官 ...
- 消息队列与RabbitMQ
1 什么是消息队列 消息指进程或应用间通信的数据:队列是保存数据的结构:消息队列是指进程或应用间通信时,保存消息的容器.消息队列独特的机制和结构保证了消息发送者和接收者之间良好的异步通信. 2 为什么 ...