定义 ASP.NET 页面主题

asp.net定义主题(很简单的)
2009-11-10 12:08
如何:定义 ASP.NET 页面主题
Visual Web Developer
如何:定义 ASP.NET 页面主题

 

更新:2007 年 11 月

在 Visual Web Developer 中,您可以定义一些页主题,然后可以将这些页主题应用于应用程序的一个或多个页。您也可以创建计算机级的主题,这种主题可用在服务器上的多个应用程序中。

主题由多个支持文件组成,包括页外观样式表、定义服务器控件外观的控件外观,以及构成主题的任何其他支持图像或文件。无论主题是定义为页主题还是全局主题,主题的内容都是相同的。

通过使用 Theme@ Page 指令的 StyleSheetTheme 属性,或者通过在应用程序配置文件中设置 pages 元素(ASP.NET 设置架构) 元素,都可以应用主题。Visual Web Developer 只以可视方式显示使用 StyleSheetTheme 属性应用的主题。

创建页主题

  1. 在解决方案资源管理器中,右击要为其创建页主题的网站名称,然后单击“添加 ASP.NET 文件夹”

  2. 单击“主题”

    如果 App_Themes 文件夹不存在,Visual Web Developer 则会创建该文件夹。Visual Web Developer 即为主题创建一个新文件夹,作为 App_Themes 文件夹的子文件夹。

  3. 键入新文件夹的名称。

    此文件夹的名称也是页主题的名称。例如,如果您创建一个名为 \App_Themes\FirstTheme 的文件夹,则主题的名称为 FirstTheme。

  4. 将构成主题的控件外观、样式表和图像的文件添加到新文件夹中。

将外观文件和外观添加到页主题

  1. 在解决方案资源管理器中,右击主题的名称,然后单击“添加新项”

  2. “添加新项”对话框中,单击“外观文件”

  3. “名称”框中,键入 .skin 文件的名称,然后单击“添加”

    通常的做法是为每个控件创建一个 .skin 文件,如 Button.skin 或 Calendar.skin。但是,您也可以根据需要创建任意数量的 .skin 文件。

  4. 在 .skin 文件中,使用声明性语法添加标准控件定义,但仅包含要为主题设置的属性。控件定义必须包含 runat="server" 属性,但不能包含 ID="" 属性。

    下面的代码示例演示 Button 控件的默认控件外观,其中定义了主题中所有 Button 控件的颜色和字体。

    <asp:Button runat="server" 
      BackColor="Red" 
      ForeColor="White" 
      Font-Name="Arial" 
      Font-Size="9px" />

    Button 控件外观不包含 skinID 属性。它将应用于使用主题的应用程序中所有未指定 skinID 属性的 Button 控件。

    说明:

    创建控件外观的简单方法是将控件添加到页,并对其进行配置,使其具有您想要的外观。例如,您可以将一个 Calendar 控件添加到页,并设置其日标题、选定的日期和其他属性。然后,您可以将控件定义从页中复制到外观文件,但必须移除 ID 属性。

  5. 对您想创建的每个控件外观文件重复步骤 2 和 3。

    说明:

    每个控件只能定义一个默认外观。使用外观的控件声明中的 SkinID 属性为相同类型的控件创建命名外观。

将级联样式表文件添加到页主题

  1. 在解决方案资源管理器中,右击主题的名称,然后单击“添加新项”

  2. “添加新项”对话框中,单击“样式表”

  3. “名称”框中,键入 .css 文件的名称,然后单击“添加”

    当主题应用于页时,ASP.NET 向页的 head 元素添加对样式表的引用。有关更多信息,请参见 如何:应用 ASP.NET 主题

全局主题应用于服务器上的所有网站。创建全局主题文件夹的位置取决于您是使用 Internet 信息服务 (IIS) 运行网站还是使用 ASP.NET Development Server 测试网站。

说明:

如果您使用文件系统网站,则默认情况下,Visual Web Developer 启动 ASP.NET Development Server 来运行网站进行测试。对于其他类型的网站,Visual Web Developer 在 IIS 中运行页进行测试。

创建全局主题

  1. 使用下面的路径创建 Themes 文件夹。

    %windows%\Microsoft.NET\Framework\version\ASP.NETClientFiles\Themes
    说明:

    全局主题的文件夹名称为 Themes,而不是 App_Themes,因为后者用于页主题。

    创建 Themes 文件夹的子文件夹以保存全局主题文件。

    子文件夹的名称即是主题的名称。例如,如果您创建一个名为 \Themes\FirstTheme 的文件夹,则主题的名称为 FirstTheme。

  2. 将构成全局主题的控件外观、样式表和图像的文件添加到新文件夹中。

    说明:

    在定义全局主题时,不能使用 Visual Web Developer 直接将外观和样式表文件添加到全局主题中。您可能会发现一种更简单的方式,即将主题作为页主题进行定义和测试,然后将其复制到 Web 服务器上用于全局主题的文件夹中。

  3. 如果网站是要使用 ASP.NET Development Server 测试的文件系统网站,则可以立即对主题进行测试。

  4. 如果要使用本地 IIS 网站测试网站,则打开命令窗口,然后运行 aspnet_regiis -c 在运行 IIS 的服务器上安装主题。

  5. 如果要在远程网站或 FTP 网站上测试主题,则必须使用下面的路径手动创建 Themes 文件夹。

    IISRootWeb\aspnet_client\system_web\version\Themes
 
 
 
             

asp.net主题学习实例

asp.net 2008-08-23 21:48:59 阅读0 评论0   字号: 订阅

介绍
使用 ASP.NET 2.0 的“主题”功能,可以将样式和布局信息分解为单独的文件组,统称为“主题”。然后,主题可应用于任何站点,影响站点中页和控件的外观。这样,通过更改主题即可轻松地维护对站点的样式更改,而无需对站点各页进行编辑。还可与其他开发人员共享主题。


关键
1、在web site中添加App_Themes文件夹,可以在每个主题文件加内添加.skin文件、.css文件(指定主题后会自动加载主题下所有.css文件)或者图片文件

2、在web.config的<system.web>元素下的<pages>元素下设置theme或者styleSheetTheme属性(针对全局);在页的@Page指令里设置Theme或者StylesheetTheme属性(针对当前页)

3、Theme定义的样式不可以覆盖;StylesheetTheme定义的样式可以覆盖

4、.skin文件里不设置SkinId则就是默认的,设置了SkinId后则对应控件的SkinId属性

5、动态修改Page的Theme要在Page_PreInit方法中实现


示例
Blue主题

< asp:Label  runat ="server"  BackColor ="blue"  ForeColor ="white"   />
< asp:Label  runat ="server"  BackColor ="DarkBlue"  ForeColor ="white"  SkinId ="Dark"   />

<% -- ImageUrl如下设置则解析到该主题下的Images文件夹的pic.jpg文件 -- %>
< asp:Image  runat ="server"  ImageUrl ="Images/pic.jpg"   />


Red主题

< asp:Label  runat ="server"  BackColor ="red"  ForeColor ="white"   />
< asp:Label  runat ="server"  BackColor ="DarkRed"  ForeColor ="white"  SkinId ="Dark"   />

<% -- ImageUrl如下设置则解析到该主题下的Images文件夹的pic.jpg文件 -- %>
< asp:Image  runat ="server"  ImageUrl ="Images/pic.jpg"   />


主题测试-Theme
Themes/Theme.aspx

<% @ Page Language = " C# "  MasterPageFile = " ~/Site.master "  AutoEventWireup = " true "  CodeFile = " Theme.aspx.cs "
    Inherits
= " Themes_Theme "  Title = " 主题测试-Theme "  Theme = " Blue "   %>

< asp:Content  ID ="Content1"  ContentPlaceHolderID ="ContentPlaceHolder1"  runat ="Server" >
    
< p >
        在页头部分指定Theme="Blue"
</ p >
    
< p >
        相关主题文件,我觉得最好把样式写在css里然后设置控件的CssClass属性
        
< br  />
        
&lt; asp:Label ID="Label1" runat="server" BackColor="blue" ForeColor="white" / &gt;
        
< br  />
        
&lt; asp:Label ID="Label2" runat="server" BackColor="DarkBlue" ForeColor="white"
        SkinId="Dark" /
&gt;
    
</ p >
    
< p >
        
< asp:Label  ID ="lbl"  runat ="Server"  Text ="不做任何设置(使用主题中的没设置SkinId的样式)"   />
    
</ p >
    
< p >
        
< asp:Label  ID ="lbl2"  runat ="Server"  Text ="设置BackColor为black(因为设置的是页的Theme属性,所以无法覆盖原有样式)"  BackColor ="black"   />
    
</ p >
    
< p >
        
< asp:Label  ID ="lbl3"  runat ="Server"  Text ="主题测试设置SkinID为dark(指定SkinId)"  SkinID ="dark"   />
    
</ p >
</ asp:Content >


主题测试-StylesheetTheme
Themes/StylesheetTheme.aspx

<% @ Page Language = " C# "  MasterPageFile = " ~/Site.master "  AutoEventWireup = " true "  CodeFile = " StylesheetTheme.aspx.cs "
    Inherits
= " Themes_StylesheetTheme "  Title = " 主题测试-StylesheetTheme "  StylesheetTheme = " Red "   %>

< asp:Content  ID ="Content1"  ContentPlaceHolderID ="ContentPlaceHolder1"  runat ="Server" >
    
< p >
        在页头部分指定StylesheetTheme="Red"
</ p >
    
< p >
        相关主题文件,我觉得最好把样式写在css里然后设置控件的CssClass属性
        
< br  />
        
&lt; asp:Label ID="Label1" runat="server" BackColor="red" ForeColor="white" / &gt;
        
< br  />
        
&lt; asp:Label ID="Label2" runat="server" BackColor="DarkRed" ForeColor="white" SkinId="Dark"
        /
&gt;
    
</ p >
    
< p >
        
< asp:Label  ID ="lbl"  runat ="Server"  Text ="不做任何设置(使用主题中的没设置SkinId的样式)"   />
    
</ p >
    
< p >
        
< asp:Label  ID ="lbl2"  runat ="Server"  Text ="设置BackColor为black(因为设置的是页的StylesheetTheme属性,所以无法覆盖原有样式)"  BackColor ="black"   />
    
</ p >
    
< p >
        
< asp:Label  ID ="lbl3"  runat ="Server"  Text ="主题测试设置SkinID为dark(指定SkinId)"  SkinID ="dark"   />
    
</ p >
</ asp:Content >


主题测试-动态加载主题
Themes/Dynamic.aspx

<% @ Page Language = " C# "  MasterPageFile = " ~/Site.master "  AutoEventWireup = " true "  CodeFile = " Dynamic.aspx.cs "
    Inherits
= " Themes_Dynamic "  Title = " 主题测试-动态加载主题 "   %>

< asp:Content  ID ="Content1"  ContentPlaceHolderID ="ContentPlaceHolder1"  runat ="Server" >
    
< p >
        相关.skin文件内容如下:
&lt; asp:Image runat="server" ImageUrl="Images/pic.jpg" / &gt;
    
</ p >
    
< p >
        
< href ="?theme=blue" > 蓝色主题 </ a >   &nbsp; < href ="?theme=red" > 红色主题 </ a >
    
</ p >
    
< p >
        该Image控件应用主题中的样式,包括ImageUrl
        
< br  />
        
< asp:Image  ID ="img"  runat ="server"   />
    
</ p >
</ asp:Content >


Themes/Dynamic.aspx.cs

using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

public  partial  class  Themes_Dynamic : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    
{

    }


    
protected   void  Page_PreInit( object  sender, System.EventArgs e)
    
{
        
//  动态修改Page的Theme要在Page_PreInit方法中实现
         if  ( ! String.IsNullOrEmpty(Request.QueryString[ " theme " ]))
        
{
            Page.Theme 
=  Request.QueryString[ " theme " ];
        }

        
else
        
{
            Page.Theme 
=   " blue " ;
        }

    }

}

 

 

 

 

VS2005 主题(Theme)和外观(skin)帮助文档:如何应用 ASP.NET 主题

学习集锦 2010-08-06 17:39:20 阅读4 评论0   字号: 订阅

A.对网站应用主题
B.对单个页应用主题
C.对控件应用外观
D.禁用页的主题
E.禁用控件的主题
F.配置特定文件和子目录
===================
您可以对页或网站应用主题,或对全局应用主题。
在网站级设置主题会对站点上的所有页和控件应用样式和外观,
除非对个别页重写主题。
在页面级设置主题会对该页及其所有控件应用样式和外观。
默认情况下,主题重写本地控件设置。
或者,您可以设置一个主题作为样式表主题,
以便该主题将仅应用于未在控件上显式设置的控件设置。

A.对网站应用主题
----------------
1.在应用程序的 Web.config 文件中,
  将 <pages> 元素设置为全局主题或页面主题的主题名称,
  如下面的示例所示:
  <configuration>
    <system.web>
        <pages theme="ThemeName" />
    </system.web>
  </configuration>
  注意
  如果应用程序主题与全局应用程序主题同名,则页面主题优先。

2.要将主题设置为样式表主题并作为本地控件设置的从属设置,
  应改为设置 StyleSheetTheme 属性:
  <configuration>
    <system.web>
        <pages StyleSheetTheme="Themename" />
    </system.web>
  </configuration>

  Web.config 文件中的主题设置会应用于该应用程序中的所有 ASP.NET 网页。
  Web.config 文件中的主题设置遵循常规的配置层次结构约定。
  例如,要仅对一部分页应用某主题,
  可以将这些页与它们自己的 Web.config 文件放在一个文件夹中,
  或者在根 Web.config 文件中创建一个 <location> 元素以指定文件夹。
  详细见小节F.配置特定文件和子目录
 
B.对单个页应用主题
------------------
将 @ Page 指令的 Theme 或 StyleSheetTheme 属性
设置为要使用的主题的名称,
如下面的示例所示:
<%@ Page Theme="ThemeName" %>
<%@ Page StyleSheetTheme="ThemeName" %>
现在,该主题及其对应的样式和外观仅应用于声明它的页。

C.对控件应用外观
----------------
主题中定义的外观应用于已应用该主题的应用程序或页中的所有控件实例。
在某些情况下,您可能希望对单个控件应用一组特定属性。
这可以通过创建命名外观(.skin 文件中设置了 SkinID 属性的一项),
然后按 ID 将它应用于各个控件来实现。
设置控件的 SkinID 属性,如下面的示例所示:
<asp:Calendar runat="server" ID="DatePicker" SkinID="SmallCalendar" />
如果页面主题不包括与 SkinID 属性匹配的控件外观,
则控件使用该控件类型的默认外观。

D.禁用页的主题
--------------
  将 @ Page 指令的 EnableTheming 属性设置为 false,
  如下例所示:
  <%@ Page EnableTheming="false" %>

E.禁用控件的主题
----------------
  将控件的 EnableTheming 属性设置为 false,
  如下例所示:
  <asp:Calendar id="Calendar1" runat="server" EnableTheming="false" />

F.配置特定文件和子目录
-----------------------
通过使用具有适当的 path 属性的 <location> 标记,
可以将配置设置应用于特定的资源。
path 属性可用于标识要应用唯一配置设置的特定文件或子目录。
在 path 属性中只能使用一个文件路径。
path 属性可以从指示应用程序根目录的“~/”快捷方式开头。

例如,下面的示例配置文件在三个级别指定设置:
应用于当前目录和所有子目录的设置
   (全部内容包含在顶部 <configuration> 标记中)。
应用于 Sub1 子目录的设置
   (全部内容都包含在路径属性设置为 Sub1 的 <location> 标记中)。
应用于 Sub2 子目录的设置
   (全部内容都包含在路径属性设置为 Sub2 的 <location> 标记中)。

<configuration>
  <system.web>
    <sessionState cookieless="true" timeout="10"/>
  </system.web>
        
  <!-- Configuration for the "sub1" subdirectory. -->
  <location path="sub1">
    <system.web>
      <httpHandlers>
        <add verb="*" path="sub1" type="Type1"/>
        <add verb="*" path="sub1" type="Type2"/>
      </httpHandlers>
    </system.web>
  </location>
  
  <!-- Configuration for the "sub1/sub2" subdirectory. -->
  <location path="sub1/sub2">
    <system.web>
      <httpHandlers>
        <add verb="*" path="sub1/sub2" type="Type3"/>
        <add verb="*" path="sub1/sub2" type="Type4"/>
      </httpHandlers>
    </system.web>
  </location>
</configuration>


 

转载于:https://www.cnblogs.com/baohaiqi/archive/2010/09/07/1820217.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#,读做 "C sharp",中文译音暂时没有,非专业人士一般读"C井",专业人士一般读"C sharp"。   C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。 C# 并且C#成为ECMA与ISO标准规范。C#看似基于C++写成,但又融入其它语言如Pascal、Java、VB等。   微软c#语言定义主要是从C和C++继承而来的,而且语言中的许多元素也反映了这一点.C#在设计者从C++继承的可选选项方面比Java要广泛一些(比如说struts),它还增加了自己新的特点(比方说源代码版本定义).但它还太不成熟,不可能挤垮Java.C#还需要进化成一种开发者能够接受和采用的语言.而微软当前为它的这种新语言大造声势也是值得注意的.目前大家的反应是:"这是对Java的反击."   C#更像Java一些,虽然微软在这个问题上保持沉默.这也是意料中的事情,我觉得,因为Java近来很成功而使用Java的公司都报告说它们在生产效率上比C++获得了提高.   Java所带来的巨大影响和大家对它的广泛接受已经由工作于这种语言和平台之上的程序员数量明显的说明了(估计世界范围内共有两百五十万程序员使用Java).由这种语言写成的应用程序的数量是令人惊讶的并已经渗透了每一个级别的计算,包括无线计算和移动电话(比如日本发明的Java电话).C#能够在用户领域获得这样的礼遇吗?我们必须等待并观望,就像已经由SSI公司的CEO和主席Kalpathi S. Suresh指出来的那样,"我发现所有这些都是渐进的.如果C#不存在,我们总能回到Java或C和C++.这些都不完全是新技术;它们在更大的意义上来说只是大公司制造的市场噱头.我们必须给他们时间安顿下来看看这些是不是真的对IT工业有什么影响."

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值