快速业务通道

ASP.NET控件开发基础(6)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

protected override Style CreateControlStyle()
     {
       return new Style(ViewState);
     }

我们可以通过改写此方法来使控件拥有style派生类的功能,改写后如下,让label控件拥有TableStyle类的样式

protected override Style CreateControlStyle()
     {
       return new TableStyle(ViewState);
     }

注意点:默认情况下,当label控件使用ApplyStyle复制除style之外的样式属性集合,将只返回默认style类的样式属性集合.

看了下面效果后请再回头再理解这句话.

看下面自定义控件代码,真是简单的不的了

示例三

namespace CustomComponents
{
   public class ImageLabel3 : Label
   {

     protected override Style CreateControlStyle()
     {
       return new TableStyle(ViewState);
     }
   }
}

再看默认label控件与其的对比,因为没有给控件定义样式属性,所以只能通过编程的方式来定义样式,如下

示例四

protected void Page_Load(object sender, EventArgs e)
   {
     //默认label控件
     TableStyle a = new TableStyle();
     a.BackImageUrl = "images4.bmp";
     a.BackColor = System.Drawing.Color.Red;
     Label1.ApplyStyle(a);
     //自定义控件
     ImageLabel3_1.ApplyStyle(a);
   }

看一下,使用的效果,看到下面效果再来理解下我上面说的注意点吧.我想这样会理解的更深刻.

ASP.NET控件开发基础(6)

(4)使用派生样式类,定义控件样式属性.示例四中说过了,没有定义控件样式属性,只改写了CreateControlStyle方法.那就意味了你定义的控件样式属性可以直接使用TableStyle类中的属性,但默认情况下的样式属性为style类中属性,所以需要强行转换.如下对比

默认情况下

public override Color BackColor
     {
       get
       {
         return ((Style)ControlStyle).BackColor;
       }
       set
       {
         ((Style)ControlStyle).BackColor = value;
       }
     }

定义TableStyle样式属性,必须转换为TableStyle类型

public virtual string BackImageUrl
     {
       get { return ((TableStyle)ControlStyle).BackImageUrl; }
       set { ((TableStyle)ControlStyle).BackImageUrl = value; }
     }

好了,讲清楚上面这一点.我们再来测试一下.看下面示例(还是采用我们第一讲的例子)

下面只给出定义样式属性的代码,其他的类似.

控件样式#region 控件样式

protected override Style CreateControlStyle()
     {

       return new TableStyle(ViewState);
     }

     [BrowsableAttribute(true)]
     [DescriptionAttribute("网格线")]
     [CategoryAttribute("Appearance")]
     public virtual GridLines GridLines
     {
       get { return ((TableStyle)ControlStyle).GridLines; }
       set { ((TableStyle)ControlStyle).GridLines = value; }
     }

     [BrowsableAttribute(true)]
     [DescriptionAttribute("单元格间距")]
     [CategoryAttribute("Appearance")]
     public virtual int CellSpacing
     {
       get { return ((TableStyle)ControlStyle).CellSpacing; }
       set { ((TableStyle)ControlStyle).CellSpacing = value; }
     }

     [BrowsableAttribute(true)]
     [DescriptionAttribute("单元格

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号