Study Notes ASP.Net 之Theme Skin

基本概念:

Theme Skin用以定义页面中各个控件的显示样式,如字体大小,前/后景色等等。

一个Theme可以包括多个Skin,一个Skin可以定义多个控件的样式。

 

目的:

使得页面样式的制作可以与页面制作分工进行。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

使得页面的布局、样式集中管理,方便修改。

 

使用:

目录结构:

如果一个Web应用有用到Theme(应用级别的Theme,下面会讲到全局级的Theme),则在该Web应用的根目录下有个名为 App_Themes”的子目录,而每个Theme都是”App_Themes”的一个子目录。

每个Skin都是Theme目录中的一个后缀名为.skin的文件。

 

Theme的使用级别:

全局Theme: 

ASP.Net的安装目录(通常是%WINDIR% \Microsoft.NET \Framework \<version>\)下,建立名为”Theme”的子目录,并在其下建立各个全局Theme目录。

全局Theme对于整个机器上的所有Web应用都可见。

 

应用级的Theme

目录结构中说到的,建立在Web应用根目录下的”App_Themes”目录下。

应用级的Theme只对当前Web应用可见。

 

Theme的引用:

页面引用:

Web页面中用<%@ Page Theme="..." %>设定使用哪个Theme。选中的Theme在该页面有效。

 

配置引用:

Web应用的配置文件中,用<pages theme="..."/> 设定使用哪个Theme。设定的Theme对于整个Web应用有效。

 

动态引用:

在页面的Page_PreInit()中,为Page.Theme 设定一个可见的Theme名称。

 

页面样式应用的优先级

一共有4种方式设定页面的样式:CSSStyleSheetTheme(Tutorial上说这是Server-Side Style, 我不是很明白它的含义),各个控件自己设定的样式属性,Theme。如果设定有冲突,系统会按照Theme -> 控件各自属性 -> StyleSheetTheme -> CSS来设定页面样式。

只有一个例外: 控件可以通过设定EnableTheming="False" 使Theme的设定无效。当设定无效后,系统会按照 控件各自属性 -> StyleSheetTheme -> CSS来设定页面样式。

 

注:根据Tutorial,一个Theme中可以有多个CSS文件,只要在<head /> 中用<link rel="stylesheet" href="…"/> 来指定使用哪个CSS文件。但是我在使用中发现,如果页面使用了Theme,则指定CSS无效,系统会按照字典顺序使用文件名靠后的那个CSS文件。

 

Skin的引用:

Skin文件中可以指定SkinID,也可以不指定;如果没有指定,则认为似当前Theme中该类型控件的默认Skin,如:

<asp:label runat="server" font-bold="true" forecolor="orange" />

<asp:label runat="server" SkinID="Blue" font-bold="true" forecolor="blue" />

 

如果页面中不指定SkinID,就是使用选中的Theme中的该类型控件的对应的默认Skin;也可以在页面中指定使用哪个Skin,如:

<asp:Label ID="Label1" runat="server" Text="Hello 1" />

<asp:Label ID="Label2" runat="server" Text="Hello 2" SkinID="Blue" />

 

注意:

1) 在同一个Theme中,对于同一种类型的控件,只能有一个默认Skin定义;相似的,同一个Theme中,对于同一种类型的控件,一个SkinID也只能有一个Skin定义

 

2) Skin的文件名对于系统选择Skin没有任何用处,系统只是根据Skin所属的Theme,Skin文件中定义的控件类型,SkinID来选择Skin。所以Skin的划分可以根据控件类型(如:Label, Button等等),也可以根据样式类型(如:Classic, Modern等等),完全似取决于开发者的个人喜好。

 

 

Theme封装模板:

Theme可以用来封装模板,便于一次性替代整个模块。例如使用以下的Skin文件,就可以在页面中只使用一行代码来定义一个完整的登录界面:

<asp:Login ID="Login1" runat="server"/>


Skin文件内容:

None.gif<asp:Login runat="server">
None.gif  
<LayoutTemplate>
None.gif    
<i>Please log in to this site:</i><br /><br />
None.gif    
<table border="0" cellpadding="10" bgcolor="beige">
None.gif      
<tr>
None.gif        
<td>
None.gif          
<asp:Label Font-Bold="true"  AssociatedControlID="UserName" ID="UserNameLabel" runat="server">User Name:</asp:Label>
None.gif          
<br />
None.gif          
<asp:TextBox ID="UserName" runat="server"></asp:TextBox>
None.gif          
<asp:RequiredFieldValidator ControlToValidate="UserName" ErrorMessage="User Name is required."
None.gif            ID
="UserNameRequired" runat="server" ToolTip="User Name is required." ValidationGroup="Login1">*</asp:RequiredFieldValidator>
None.gif      
</tr>
None.gif      
<tr>
None.gif        
<td>
None.gif          
<asp:Label Font-Bold="true" AssociatedControlID="Password" ID="PasswordLabel" runat="server">Password:</asp:Label>
None.gif          
<br />
None.gif          
<asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>
None.gif          
<asp:RequiredFieldValidator ControlToValidate="Password" ErrorMessage="Password is required."
None.gif            ID
="PasswordRequired" runat="server" ToolTip="Password is required." ValidationGroup="Login1">*</asp:RequiredFieldValidator>
None.gif        
</td>
None.gif      
</tr>
None.gif      
<tr>
None.gif        
<td>
None.gif          
<asp:Button CommandName="Login" ID="LoginButton" runat="server" Text="Log In" ValidationGroup="Login1" />
None.gif        
</td>
None.gif      
</tr>
None.gif    
</table>
None.gif    
<br />
None.gif    
<asp:Literal EnableViewState="False" ID="FailureText" runat="server"></asp:Literal>
None.gif  
</LayoutTemplate>
None.gif
</asp:Login>




但是我认为
ThemeSkin的主要目的在于将页面的样式/布局与页面分开,便于分工,修改;而不是作为Web Control在多个页面中复用的模块,所以应注意使用Theme的封装模板功能。

转载于:https://www.cnblogs.com/cheese/archive/2005/08/26/223668.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mui-下拉刷新

下拉刷新结束 mui官方文档中下拉刷新结束方法&#xff0c;不生效&#xff0c; 文档地址 mui(#refreshContainer).pullRefresh().endPulldown(); 可使用的下拉刷新结束方法 mui("#refreshContainer").pullRefresh().endPulldownToRefresh() mui自带的触发下拉刷新的方…

rip,ospf,eigrp内部网关协议的区别与用法

1.路由信息协议&#xff08;RIP&#xff09;是一种在网关与主机之间交换路由选择信息的标准。RIP 是一种内部网关协议。在国家性网络中如当前的因特网&#xff0c;拥有很多用于整个网络的路由选择协议。作为形成网络的每一个自治系统&#xff0c;都有属于自己的路由选择技术&am…

php项目index页面空白,如何解决vue项目打包后打开页面空白的问题

这篇文章主要介绍了vue项目打包后打开空白解决办法&#xff0c;内容挺不错的&#xff0c;现在分享给大家&#xff0c;也给大家做个参考。网上很多说自己的VUE项目通过Webpack打包生成的list文件&#xff0c;放到HBulider打包后&#xff0c;通过手机打开一片空白。这个主要原因是…

推荐一个值得加入C++开发者俱乐部

之前我有篇文章提起过&#xff0c;开始进入某厂是从0开始做项目的&#xff0c;当时看到那套SDK软件&#xff0c;而且97%都是用C写的&#xff0c;我的头都大了。后面也是坚持不断的学习&#xff0c;积累&#xff0c;修改&#xff0c;向身边同事请教&#xff0c;加入优秀社群学习…

DataGrid 完全攻略之四 (实现统计)

前台代码&#xff1a;html<% Page language"c#" Codebehind"UserCount.aspx.cs" AutoEventWireup"false" Inherits"MsDataGrid.UserCount" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >…

Window系统下安装Redis

下载Redis Redis官网只提供Linux版本&#xff0c;Windows版本只能去GitHub上下载 Redis官网下载地址&#xff1a;http://redis.io/download GitHub下载地址&#xff1a;https://github.com/MSOpenTech/redis/tags 安装Redis 创建redis文件夹&#xff0c;解压到此目录下&#xf…

iTunes“解决方案”发展历程及研究(上)

以下内容来自于我的《iTunes内容解决方案研究》的PPT&#xff0c;懒得往上敲字了&#xff0c;直接以图片的形式发布&#xff0c;有需要的&#xff0c;我可以提供pdf版本给你&#xff0c;版权所有

java原生方法,Java Servlet原生调用方法过程简化

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼初学java web之后&#xff0c;了解了jsp跟Servlet交互的过程。具体过程如下&#xff1a;创建一个servlet&#xff0c;并重写doPost和doGer方法在MXL文件中配置servlet的接收请求的路径在jsp中请求该路径在servlet中写一个方法&…

Linux下的memcpy函数

之前写过一篇关于 memcpy函数面试的文章几个简单的笔试题里面的代码使用的是char指针来实现&#xff0c;今天我们来看看Linux下面的memcpy函数&#xff0c;它的实现上还是有一些巧妙的。void * memcpy(void * dest, const void *src, size_t n) {if (!(((unsigned long) dest ^…

extern关键字讲解

基本解释   extern可以置于变量或者函数前&#xff0c;以标示变量或者函数的定义在别的文件中&#xff0c;提示编译器遇到此变量和函数时在其他模块中寻找其定义。   另外&#xff0c;extern也可用来进行链接指定。 2 问题&#xff1a;extern 变量   在一个源文件里定义了…

日志钩子(JournalRecord Hook)的使用

-- 钩子是WINDOWS中消息处理机制的一个要点&#xff0c;通过安装各种钩子&#xff0c;应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们。钩子的种类很多&#xff0c;每种钩子可以截获并处理相应的消息&#xff0c;如键盘钩子可…

优先队列

CSTL——优先队列 一、相关定义 优先队列容器与队列一样&#xff0c;只能从队尾插入元素&#xff0c;从队首删除元素。但是它有一个特性&#xff0c;就是队列中最大的元素总是位于队首&#xff0c;所以出队时&#xff0c;并非按照先进先出的原则进行&#xff0c;而是将当前队列…

linux命令行抓取网页快照-(xvfb+CutyCapt)

linux命令行抓取网页快照-&#xff08;xvfbCutyCapt&#xff09;又一个 WordPress 博客Browse: Home / 2009 / 十一月 / linux命令行抓取网页快照-&#xff08;xvfbCutyCapt&#xff09;linux命令行抓取网页快照-&#xff08;xvfbCutyCapt&#xff09;By saymoon on 2009年11月…

php过waf木马,一款过waf的一句话木马分析 | CN-SEC 中文网

摘要中午&#xff0c;下班回来&#xff0c;就看一个朋友给我发了几个马儿 让我看看解解密码 很简单中午&#xff0c;下班回来&#xff0c;就看一个朋友给我发了几个马儿 让我看看解解密码 很简单猛不猛我不知道 那时候手机 太长的看着就烦 就回到家瞅瞅了首先我们看这…

你没干什么坏事,你怕什么?

如图我很久就知道深信服这家企业&#xff0c;记得是几年前&#xff0c;我有一个同学跟我说&#xff0c;有一个比较厉害的朋友在这个企业上班&#xff0c;拿到了非常不错的薪水&#xff0c;我如果想去这个公司看看&#xff0c;可以让这位朋友帮忙搭线。后面查这个企业&#xff0…

C++中的explicit关键字用法

c中的explicit关键字用来修饰类的构造函数&#xff0c;被修饰的类的构造函数不能进行隐式类型的转换&#xff0c;既然有"显式"那么必然就有"隐式"&#xff0c;那么什么是显示而什么又是隐式的呢&#xff1f; 如果c类的构造函数有一个参数&#xff0c;那么…

警告用户:VoIP电话存在诸多风险

IP电话是目前最为受欢迎的通信方式&#xff0c;但最近VoIP安全组织表示其拥有许多安全隐患。 该组织发布了一份IP电话供应商潜在的安全风险清单。旧式的公共开关网络电话&#xff08;PSTN&#xff09;并没有远离风险&#xff0c;而今VoIP也要加入这一风险行列。 秘密被偷听&…

织梦文章添加字段填栏目id,内容页调用字段里的栏目文章

在模型里增加个字段&#xff0c;然后在添加文章的时候&#xff0c;在字段里填了栏目id进去 在前台的内容页&#xff0c;调用这个字段栏目的多个文章出来 {dede:field.field1 runphpyes} global $dsql; $sql "select arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault…

python用循环打出阶梯图形,matplotlib阶梯图的实现(step())

step函数概述step函数用于绘制阶梯图。根据源码可知&#xff0c;step函数是对plot函数的轻量级封装&#xff0c;很多概念和用法与plot函数非常相似。def step(self, x, y, *args, wherepre, dataNone, **kwargs):cbook._check_in_list((pre, post, mid), wherewhere)kwargs[dra…

xbmc addons

XBMC新版“扩展功能”简介 目录1. 扩展功能模块结构2. 图片文件指引 2.1 icon.png2.2 fanart.jpg3. addon.xml 3.1 <addon>元素3.2 <requires>元素3.3 <extension>元素3.4 xbmc.addon.metadata extension4. extension类别本贴介绍将在即将发布的XBMC Dharma&…