自定义控件开发学习(二、属性)
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) 编辑 收藏 举报