基本概念:

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种方式设定页面的样式:CSS,StyleSheetTheme(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文件内容:

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

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

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

Study Notes ASP.Net 之Theme Skin相关推荐

  1. 使用ASP.NET的外观文件(skin)与css样式表

    使用ASP.NET的外观文件(skin)与css样式表 文章目录 使用ASP.NET的外观文件(skin)与css样式表 题目 涉及知识 1.制作皮肤 2.皮肤里设置css样式 一.运行截图 二.代码 ...

  2. python 堆叠柱状图 多列 复杂_[Python Study Notes]堆叠柱状图绘制

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  3. Machine Learning Algorithms Study Notes

    2    Supervised Learning    3 2.1    Perceptron Learning Algorithm (PLA)    3 2.1.1    PLA -- " ...

  4. [Python Study Notes] Python的安装

    Windows: 1.下载安装包: 转到Python官网https://www.python.org/downloads/  ,下载最新版本的Python. 2.安装 安装到自定义的安装路径下. 3. ...

  5. java script w3c study notes

    JavaScript简介 1.js JavaScript 可以将动态的文本放入 HTML 页面 JavaScript 可以对事件作出响应 JavaScript 可以读写 HTML 元素 JavaScr ...

  6. 9个元素换6次达到排序序列_十大算法排序(Sorting Algorithm) Study notes

    (自己手打的python实现代码以及整理的各路大神总结的知识点) 自用学习笔记,由于基于北美cs学习,文章大量中英混杂(谨慎食用) 十大排序算法: 插入排序 1)Insertion Sort 简单插入 ...

  7. [Python Study Notes]正则表达式

    正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 P ...

  8. SAP Study Notes: BW Queriy-Variables(变量)

    About Variable: 1.Variable 是和InfoObject绑定的,可用于任何含有该IO的query中. 2.Variable有以下几种类型: Characteristic:用于限制 ...

  9. study notes for python

    some useful materials Python完全新手教程 http://www.cnblogs.com/taowen/articles/11239.aspx (from taowen, B ...

最新文章

  1. js控制文本栏只能输入数字
  2. What is ieHTTPHeaders?
  3. js向服务器发送信息,Angularjs向服务器发送请求
  4. 【无套路送书】架构师是怎样炼成的?
  5. Vue-render函数的三个参数
  6. 《Arduino家居安全系统构建实战》——2.3 组合多个单词
  7. Hadoop学习之本地运行hadoop
  8. 【机器学习-周志华】学习笔记-第十章
  9. 主流计算机戴尔笔记本电脑,2017年50款笔记本电脑排行榜
  10. JVM内存设置参数分析
  11. Python API+Postman+jmeter
  12. Qt编写自定义控件:带阴影、圆角、可拉伸的弹窗
  13. SAP AFS Arun 增强 出口 介绍
  14. HTML学生个人网站作业设计:明星介绍网站制作——刘德华(11页) HTML+CSS+JavaScript 简单DIV布局明星人物介绍网页模板代码 DW学生个人网站制作成品下载
  15. 那些年我曾经读过的书
  16. VVC帧间预测(八)DMVR
  17. 我在深圳面试汇总(--持续更新中)
  18. 计算机专业英语》第02章在线测试,《计算机专业英语》第01章在线测试
  19. 快递100 查询物流信息 Java
  20. sap的清账是什么意思_SAP部分清账与剩余清账

热门文章

  1. bootstrap-table 新增可编辑行_现代Web开发堆栈工具DevExtreme 新增Gantt组件,助力项目管理...
  2. 实体类 接口_spring-boot-route(五)整合Swagger生成接口文档
  3. 广州城市地图为android,广州无障碍地图
  4. php 完美防sql注入,PHP 完美的防XSS 防SQL注入的代码
  5. Linux命令集—— cat AND more
  6. UNIX(进程间通信):01---Linux进程通信方式
  7. Python(17)-元组tuple
  8. 推荐算法--利用用户行为数据(02)
  9. Ubuntu18.04.4 环境下对属性加密算法CP-ABE环境搭建
  10. C++中lock_guard的学习