快速业务通道

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

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

示例6

public class ImageLabel4 : Label
   {
     protected override Style CreateControlStyle()
     {
       return new LabelStyle(ViewState);
     }

     [Bindable(true),
     Category("Appearance"),
     DefaultValue(""),
     Description("背景图片")
     ]
     public virtual String ImageUrl
     {
       get { return ((LabelStyle)ControlStyle).ImageUrl; }
       set { ((LabelStyle)ControlStyle).ImageUrl = value; }
     }
   }

让我们来测试一下,你会发现界面上并未呈现背景图片,给控件加一个属性CssClass=""以后效果就出来了,如下

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

让我们来思考为什么在未定义CssClass=""属性时无法呈现自定义属性.

Style类有一个IsEmpty属性用来判断已在的视图状态中是否定义了样式属性,

默认情况下为true,当定义了样式属性后,则为false.CssClass属性为空时,默认情况下即认为定义了样式属性,只不过样式属性个数为0.

若要在默认情况下呈现自定义样式属性则需重写IsEmpty属性.如下,只要判断自定义的样式属性视图状态是否为空即可.

示例7

//判断视图状态是否为空
     internal bool IsSet(string key)
     {
       return ViewState[key] != null;
     }

     /**//// <summary>
     /// 是否定义样式元素
     /// </summary>
     public override bool IsEmpty
     {
       get
       {
         return base.IsEmpty && !IsSet("imageUrl");
       }
     }

(2)使用编程

下面我们以编程方式,给控件添加自定义样式属性.

发现BackColor属性能够呈现但ImageUrl 无法呈现,那说明我们刚才自定义的类就失去意义了,也说明我们还未重写某个方法.

LabelStyle a = new LabelStyle();
     a.ImageUrl = "images4.bmp";
     a.BackColor = System.Drawing.Color.Red;
     ImageLabel4_1.ApplyStyle(a);

Style类有三个操作样式的方法,复制,合并和清除样式.WebControl类也一样.重写一下,我们的目的就达到了.看下面代码

示例8

方法#region 方法

/**//// <summary>
     /// 复制样式
     /// </summary>
     /// <param name=""></param>
     public override void CopyFrom(Style s)
     {
       if (s == null)
         return;

       base.CopyFrom(s);
       LabelStyle ls = s as LabelStyle;
       if (ls == null || ls.IsEmpty)
         return;

       if (ls.IsSet("imageUrl"))
         this.ImageUrl = ls.ImageUrl;
     }

     /**//// <summary>
     /// 整合样式
     /// </summary>
     /// <param name="s"></param>
     public override void MergeWith(Style s)
     {
       if (s == null)
         return;

       if (IsEmpty)
       {
         CopyFrom(s);
         return;
       }

       LabelStyle ls = s as LabelStyle;
       if (ls == null || ls.IsEmpty)
         return;

       if (ls.IsSet("imageUrl") && !IsSet("imageUrl"))
         this.ImageU

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号