Tracy.Bai

Focus on Data analysis and Mining

导航

自定义控件开发学习(二、属性)

1。公开控件属性

公开控件的属性和公开类的属性的写法是一样的,只不过该类是一个Control,例如:

public class Album:Control

{

     string _imgUrl=null;

     public virtual string ImgUrl

    {

            get

           {

              return _imgUrl;

 

           }

           set

          {

            _imgUrl=value;

          }

    }

}

2。属性的持久化

上面虽然设置了控件的属性,但当页面PostBack时,属性并不能保持自己的状态,那我们就必须保存空间的状态。

一般来说是用Viewstate,当页面禁用ViewState时,也可以使用ControlState。

 public class AlbumViewState

{

        public override string ImgUrl

        {

            get

            {

                 object o=ViewState["ImgUrl"]

                 if(o!=null)

                 {

                       return o.tostring();

                 }

            }

            set

            {

                ViewState["ImgUrl"]=value;

            }

        }

}

3。复杂属性的状态持久

复杂属性的状态持久可以通过实现接口IstateManage来实现,处理集合属性可以设置

[PersistenceMode(PersistenceMode.InnerProperty)]

4。处理子控件

如果控件内容解析为子控件,那么子控件如何被解析?我们如何来控制子控件呢?

可以有两种方式:一种为重写AddParseSubObject()方法,控制子控件的行为,

另一种为控件指定自定义的ControlBuilder

例如:   protected override void AddParsedSubObject(object obj)
        {
            LiteralControl itl = obj as LiteralControl;
            if (itl != null)
                return;
            base.AddParsedSubObject(obj);
        }

5 几个重要的属性总结

[Bindable(true)]:指定属性是否要进行数据邦定,属性级别。
        [Category("Appearance")]:指定属性显示在属性窗口时归为哪一类。有Appearance,Behavior,Layout等
        [DefaultValue("")]:属性的默认值
        [Localizable(true)]

[DefaultProperty("Text")]:默认属性

DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)决定属性的序列化方式

ParseChildren(true\false):决定控件内容是解析为属性还是子控件

PersistenceMode用于控制控件属性的保存方式。InnerDefaultProperty指定属性保存为控件的唯一内容,InnerProperty指定属性保存为嵌套标记,一般用于复杂属性

posted on 2008-07-28 22:22  Love Fendi  阅读(276)  评论(0编辑  收藏  举报