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
经典主题的方式 主题战略 加载速度 本机支持 (不需要额外的代码) 支持代码为主题 (捆绑代码 & 资源成单独的文件) 支持资源层次结构中导航 动态加载 动态卸载 轻松地编辑和编译 (不需要安 ...
随机推荐
- 开启Nginx的gzip压缩功能详解
默认情况下,Nginx的gzip压缩是关闭的, gzip压缩功能就是可以让你节省不少带宽,但是会增加服务器CPU的开销哦,Nginx默认只对text/html进行压缩 ,如果要对html之外的内容进行 ...
- jvm调优之四:生产环境参数实例及分析【生产环境实例增加中】
java application项目(非web项目) 改进前: -Xms128m-Xmx128m-XX:NewSize=64m-XX:PermSize=64m-XX:+UseConcMarkSweep ...
- effective java 笔记1--序言
一.序言 程序设计的几条基本原则: 1.清晰性和简洁性最为重要,模块的用户永远也不应该被模块的行为所迷惑,所以写良好的注释是必需的. 2.模块要竟可能小,但也不能太小,好一个深奥的哲学问题. 3.代码 ...
- 分享我的PL/SQL的优化设置,为开发全面提速
打开[工具]–[首选项]: 1.登陆历史:勾选[存储历史]和[带口令存储],方便下次登陆,免去每次都输入密码的烦恼: 2.编辑器: a.勾选[语法高亮]允许: b.关键词大小写选择大写: c.配置自动 ...
- Ubuntu 16.04 TensorFlow CPU 版本安装
1.下载Anaconda,官方网站.我下载的时Python 2.7 64bit版本: 2.安装执行命令 bash Anaconda2-4.2.0-Linux-x86_64.sh 设置好目录后等 ...
- spring BeanFactory概述
BeanFactory是Spring提供的两种容器类型之一,它是基础的IoC容器,并提供完整的IoC服务支持.如果没有指定,默认采用延迟初始化策略.只有当客户端对象需要访问容器中的某个受管对象的时候, ...
- ansible安装及问题解决
本文主要用来安装ansible,在进行安装的时候,也可以使用其他的版本进行安装,本文主要讲述安装ansible的步骤,还有常用问题的解决. 1.查看python版本 由此可以看到python的版本为2 ...
- JavaScript 继承方式详解
js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承)类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于对象的,它没有类的概念.所以,要想实现继 ...
- 第三百三十四天 how can I 坚持
I give up my dream that day,else,I coming on,the day my heart is die…… 那天,梦已碎,那天,心已死. 晚上看了个电影<奔爱& ...
- 我的第一个CUDA程序
最近在学习CUDA框架,折腾了一个多月终于把CUDA安装完毕,现在终于跑通了自己的一个CUDA的Hello world程序,值得欣喜~ 首先,关于CUDA的初始化,代码和解释如下,这部分主要参考GXW ...