快速业务通道

ASP.NET 2.0服务器控件之复合控件样式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
对应的Style类型的复杂样式属性,例如,TextBoxStyle、ButtonStyle。通过这种方式子控件的样式属性就上传为顶层属性,以便于设置子控件的外观。

显而易见,实现子控件的样式属性上传的关键是实现Style类型的复杂样式属性。为此,开发人员必须为复杂样式属性提供自定义视图状态管理。需要读者注意的是,复合控件的视图状态与普通控件视图状态有所不同。由于复合控件包含子控件,因此,相应的视图状态中既包括父控件的视图状态,也包括子控件对应的复杂样式属性的视图状态。例如,上文实例中控件的视图状态即包含3个部分:父控件自身的视图状态、ButtonStyle的视图状态和TextBoxStyle的视图状态。除此之外,具体的实现过程与实现普通的复杂属性基本一致。

不知读者是否还记得上一篇文章中的那个复合控件,即由一个文本框TextBox和一个按钮Button组成的复合控件CompositeEvent。在此,我们对该控件添加设置了控件的顶层样式属性ButtonStyle和TextBoxStyle。下面列举了控件类CompositeEvent的源代码。

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.ComponentModel.Design;
namespace WebControlLibrary{
 public class CompositeEvent : CompositeControl {
  //声明变量
  private Button _button;
  private TextBox _textBox;
  private static readonly object EventSubmitKey = new object();
  //声明样式变量
  private Style _buttonStyle;
  private Style _textBoxStyle;
  //定义属性ButtonText,用于指定按钮上的文字
  [Bindable(true), Category("Appearance"), DefaultValue(""), Description("获取或设置显示显示在按钮上的文字")]

public string ButtonText {
   get { EnsureChildControls(); return _button.Text; }
   set { EnsureChildControls(); _button.Text = value; }
  }
  //定义属性Text,表示文本框的输入

[Bindable(true), Category("Appearance"), DefaultValue(""), Description("获取或设置文本框输入文本")]
  public string Text {
   get {
    EnsureChildControls();
    return _textBox.Text;
   }
   set {
    EnsureChildControls();
    _textBox.Text = value;
   }
  }
  // 定义ButtonStyle属性
  [ Category("Style"), Description("Button的样式属性"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerDefaultProperty) ]

public virtual Style ButtonStyle {
   get {
    if (_buttonStyle == null) {
     _buttonStyle = new Style();
     if (IsTrackingViewState) {
      ((IStateManager)_buttonStyle).TrackViewState();
     }
    }
    return _buttonStyle;
   }
  }
  //定义TextStyle属性

[ Category("Style"), Description("设置TextBox的样式属性"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty) ]

public virtual Style TextBoxStyle {
   get {
    if (_textBoxStyle == null) {
     _textBoxStyle = new Style();
     if (IsTrackingViewState) {
      ((IStateManager)_textBoxStyle).TrackViewState();
  

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