快速业务通道

ASP.NET自定义控件 第二天 带有自定义样式的星级控件

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
成员 描述 IsTrackingViewState属性 获取一个值,批示服务器控件是否正在跟踪其视图状态更改 LoadViewState方法 加载服务器控件以前保存的视图状态 SaveViewState方法 将服务器控件的视图状态保存到Object TrackViewState方法 指示服务器控跟踪其视图状态更改

根据以上分析,为了实现需求需要定义一个继承自TableItemStyle并实现 IStateManager接口的样式类TextItemStyle,在该类中增加DisplayTextAtBottom 属性定义是否在底部显示注册文本,并在上次任务中开发的Star类里增加类型为 TextItemStyle的属性以设置样式。

实现

1. 在上次任务解决方案的ControlLibrary类库中添加TextItemStyle类,该类 继承TableItemStyle类并实现了IStateManager接口:

public class TextItemStyle:TableItemStyle,IStateManager
{
}

2. 在该类中定义布尔类型的DisplayTextAtBottom属性,使用一个私有变量保 存该属性设置;当该属性修改时需要通知Star类中的样式属性以应用新的样式, 所以需要使用NotifyParentProperty属性修饰:

private bool _displayTextAtBottom;
  
[NotifyParentProperty(true)]
public bool DisplayTextAtBottom
{
  get
  {
    return _displayTextAtBottom;
  }
  set
  {
    _displayTextAtBottom = value;
  }
}

3. 实现IStateManager中的IsTrackingViewState属性和Trac

引言

在上个任务里,通过继承WebControl类创建了一个简单的星级控件,并且也可 以设置字体边框等相关样式,但是需求马上又来了,如果我们想加入自定义的样 式,例如希望文本可以自由显示到图案左边或下边,如下图所示,对于这样的要 求怎么办?

ASP.NET自定义控件 第二天 带有自定义样式的星级控件

图2-1 文字显示到下方的星级控件

分析

看到上方的图形,很容易想到为第一个任务里的Star类添加一个属性,标识是 在左面还是下面显示文本,这的确能够解决现有的问题,但如果过一阵子希望能 够设置标签文本的颜色怎么办,很容易,再添加一个属性,具有敏锐眼光的读者 一定想到,这不是解决问题的最好方法,因为可能会陆续提出新的样式的要求, 那么比较合理的解决方法是单独添加一个样式属性,该属性持有一个样式集合, 通过修改这个样式集合可以随时添加新的外观特征,最后再呈现控件的时候只需 要使用第一个单元格应用该样式就可以了。

在.NET中,System.Web.UI.Style类封装了Web服务器外观的属性,例如可以设 置背景色、前景色或边框等,TableStyle类和TableItemStyle类均扩展了Style类 ,从它们的名字就可以想到TableStyle类用于设置表格控样的样式,而 TableItemStyle类用于设置TableRow或TableCell的样式,它们之间的关系如图2 -2所示:

ASP.NET自定义控件 第二天 带有自定义样式的星级控件

2-2 样式类关系

对于本次任务来说,我们要设置某个单元格的样式,并且添加了自定义特性, 因此选择继承TableItemStyle类即可。

确定为Star类添加一个扩展了TableItemStyle类的属性后,样式的问题解决了 ,接下来要考虑的就是如何保存样式如性,像上次任务里直接保存到ViewState中 吗,还是有更好的选择。

很显然,ViewState不能直接保存某个对象,需要进行序列化操作后才可以进 行,默认情况下使用的是BinaryFormatter作为对象的序列化器,该类会把对象所 有的成员全部序列化,而不管是公有的或私有的,这样做的话可能导致效率不是 很高,为了自己控制属性的保存,需要继承IStateManager接口,该接口定义任何 类为支持服务器控件的视图状态管理而必须实现的属性和方法,其定义的成员有 :

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