mmkk's Weblog

dotnet and web skills
随笔 - 25, 评论 - 181, 引用 - 79

导航

关于

标签

每月存档

最新留言

广告

Asp.net V2.0:Themes

Themes是Asp.net v2.0的另一个定制Web Site的增强功能,他的作用是可以对页面和控件的一些属性进行设定.并且可以将这些设定应用于整个应用程序、单一页面或者是单一的控件.

要应用一个Theme很简单,首先,Asp.net V2.0已经内置了几种Themes,只要通过设置类似
<%@ Page theme="BasicBlue"%><%@ Page theme="BasicBlue" ...%><%@ Page theme="BasicBlue" ...%>
就可以进行应用了,下面是应用此样式的一些控件的外观
;
另外,可以很轻松的创建自己的theme,首先必须在应用程序下创建Themes目录,Themes目录下可以再建任意目录,比如Themes\DefaultTheme,接下来我们可以在DefaultTheme目录下建立一种已.skin为后缀的文件,比如为了定义Button的某些属性外观,我们可以建立在Button.skin文件,并且在其中添加如下代码:
//注意不要设置ID
<asp:Button runat="server" BackColor="Black" ForeColor="White" Font-Name="Arial" Font-Size="9pt" />
(p.s:不知道VS.NET Whidbey会不会在skin文件的编写中也有智能提示,目前只能通过创建.txt文件来改变后缀名,没有任何提示和语法加亮)

尽管我们可以为每一种控件都命名一个单独的skin文件,比如Button.skin,Label.skin,TextBox.skin等等,但是实际上这并不是必须,如果你愿意建立一个叫做Button.skin的文件,里面却包含TextBox控件的属性定义,这完全是可行的.但是在一个目录下,比如上面建立的DefaultTheme目录下每一种控件只能包含一条定义,不管他们分在几个skin文件中,如果在不同skin文件中包含相同控件的定义,那么Asp.net V2.0将在运行时抛出一个错误.

我们可以将DefaultTheme应用于整个Application,只要在Web.config中增加一个配置节:
<system.web><pages theme="DefaultTheme" /></system.web>
也可以在单一页面应用:
<%@ Page theme="DefaultTheme" ...%><%@ Page theme="DefaultTheme" ...%><%@ Page theme="DefaultTheme" ...%>
我们也可以对单一控件进行应用,此时我们需要修改上面的skin文件,增加一个SkinID,并且设置其值,比如SkinID="DefaultButton",然后我们可以在任意想使用此skin的Button中设置SkinID="DefaultButton"来应用,而如果没有设置此值的其他Button将不会应用这些设置.

(图中的第一个Button通过设置skinid来应用skin,第二个则没有设置,不过由于我直接在画图中保存成gif导致了原色损失,看起来好像有问题笑脸)

与css不同的是,Theme可以定义页面和控件更多的属性,并且都是和控件属性一致,而不需要考虑控件属性转换成html的定义(如果要应用css,必须要了解这一点),另外有一个很大的不同就是skin定义的默认值无法在应用的控件上来静态改变,这一点和css的就近原则也很不一样.也就是说如果我在skin文件中定义了TextBox的Text="DefaultText",那么如果你在应用在skin的TextBox控件上重新设置Text的值是无效,不会起任何作用.当然我们仍然可以通过运行时来改变它,例如:
  void Page_PreInit (object sender,System.EventArgs e)
    {   
    //运行时改变控件或者整个页面的Theme
        TextBox2.SkinID = "";
        TextBox1.SkinID = "";
        this.Page.Theme = "BasicBlue";
    }
    void Page_Load (object sender, System.EventArgs e)
    {
    //运行时改变Skin定义的默认属性
        Button1.ForeColor = System.Drawing.Color.Red;
        Button2.Text = "Change"; //运行时改变Button
    }

posted on 2003-11-07 17:30:00 by mmkk  评论(4) 阅读(4541)

Asp.net V2.0:Master Pages (2)

前篇主要简单介绍了Master Page的作用以及作为Template Page的优点,现在来看看Master Page在使用中的几个特性:
1、可以在Web.Config中加入类似这样的配置节:<pages master="site.master"  />,这是Asp.net V2.0新增的一个配置项,这个配置将使所有的页面都自动变成是Content Page,而且不需要在Page头声明master属性及其值,如果你不想把某个页面作为Content Page,而只是想作为一个单一的Web Form的话,此时就可以设置master = ""来改变这个设定
2、如果我们想指定所有使用Master Page的页面都调用main.css文件,并且可以支持在必要的时候改变这个默认值或者是追加,我们完全可以公开一个属性,比如

protected string csslinkUrl = "main.css";
public string CssLinkUrl
{
  get
  {
     return csslinkUrl;
  }
  set
  {
     csslinkUrl = value;
  }
}
.master本身可以在HTML中指定..<title><%=csslinkUrl%></title>..

调用页可以使用this.Master来引用Master Page对象并且设置这个CssLinkUrl属性值
3、通过重写TestDeviceFilter(string deviceFilterName)方法可以用来实现Post-Back以后替换新的Master Page,大致代码如下:
<%@ page language="C#" master="~/MP.master" postback:master ="~/website.master" compilewith="MPContent.aspx.cs" classname="ASP.MPContent_aspx"%>
public override bool TestDeviceFilter (string deviceFilterName)
    {
        if (deviceFilterName.Equals ("postback"))//注意跟Page中的声明必须一致
            if(Request.Form.Count>0)
                return true;
        return base.TestDeviceFilter (deviceFilterName);
    }
Post-back以后此Content Page所调用的Master Page变成是website.master,而不是第一次访问的MP.master.
4、Master Page支持多层嵌套,即Master Page本身也支持master声明,子Master Page充当了Content Page和Master Page双重角色,用以支持复杂的Template Page布局

posted on 2003-11-04 21:44:00 by mmkk  评论(8) 阅读(2652)

Powered by: Joycode.MVC引擎 0.5.2.0