自定义控件,自定义视图状态,复杂属性
2008-10-31 10:28
232 查看
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Collections;
namespace myWebControls.Menu_v2
{
[ParseChildren(true)]
public class Menu_v2 : Panel
{
[TypeConverter(typeof(StringArrayConverter))]
public string[] AAA
{
get
{
object obj = ViewState["AAA"];
return obj == null ? null : (string[])obj;
}
set { ViewState["AAA"] = value; }
}
BackStyle backstyle;
[PersistenceMode(PersistenceMode.InnerProperty)]
public BackStyle BBB
{
get {
if (backstyle == null)
{
backstyle = new BackStyle();
if (IsTrackingViewState)
((IStateManager)backstyle).TrackViewState();
}
return backstyle;
}
}
protected override void LoadViewState(object savedState)
{
Pair p = savedState as Pair;
if (p != null)
{
base.LoadViewState(p.First);
((IStateManager)BBB).LoadViewState(p.Second);
return;
}
base.LoadViewState(savedState);
}
protected override object SaveViewState()
{
object baseState = base.SaveViewState();
object thisState = null;
if (backstyle != null)
thisState = ((IStateManager)backstyle).SaveViewState();
if (thisState != null)
return new Pair(baseState, thisState);
else
return baseState;
}
protected override void TrackViewState()
{
if (backstyle != null)
((IStateManager)backstyle).TrackViewState();
base.TrackViewState();
}
public override void RenderControl(HtmlTextWriter writer)
{
base.RenderControl(writer);
writer.Write("ABCDEFG");
writer.Write(BBB.BackColor.ToString());
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class BackStyle:IStateManager
{
public BackStyle(){}
[NotifyParentProperty(true)]
public System.Drawing.Color BackColor
{
get { return ViewState["BackColor"]==null ? System.Drawing.Color.Black:(System.Drawing.Color)ViewState["BackColor"]; }
set { ViewState["BackColor"] = value; }
}
private bool _isTrackingViewState;
private StateBag _viewState;
protected StateBag ViewState
{
get
{
if (_viewState == null)
{
_viewState = new StateBag(false);
if (_isTrackingViewState) ((IStateManager)_viewState).TrackViewState();
}
return _viewState;
}
}
#region IStateManager 成员
[Browsable(false)]
public bool IsTrackingViewState
{
get { return _isTrackingViewState; }
}
public void LoadViewState(object state)
{
if (state != null)
((IStateManager)ViewState).LoadViewState(state);
}
public object SaveViewState()
{
object savedState = null;
if (_viewState != null)
savedState =((IStateManager)_viewState).SaveViewState();
return savedState;
}
public void TrackViewState()
{
_isTrackingViewState = true;
if (_viewState != null)
((IStateManager)_viewState).TrackViewState();
}
internal void SetDirty()
{
_viewState.SetDirty(true);
}
#endregion
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Collections;
namespace myWebControls.Menu_v2
{
[ParseChildren(true)]
public class Menu_v2 : Panel
{
[TypeConverter(typeof(StringArrayConverter))]
public string[] AAA
{
get
{
object obj = ViewState["AAA"];
return obj == null ? null : (string[])obj;
}
set { ViewState["AAA"] = value; }
}
BackStyle backstyle;
[PersistenceMode(PersistenceMode.InnerProperty)]
public BackStyle BBB
{
get {
if (backstyle == null)
{
backstyle = new BackStyle();
if (IsTrackingViewState)
((IStateManager)backstyle).TrackViewState();
}
return backstyle;
}
}
protected override void LoadViewState(object savedState)
{
Pair p = savedState as Pair;
if (p != null)
{
base.LoadViewState(p.First);
((IStateManager)BBB).LoadViewState(p.Second);
return;
}
base.LoadViewState(savedState);
}
protected override object SaveViewState()
{
object baseState = base.SaveViewState();
object thisState = null;
if (backstyle != null)
thisState = ((IStateManager)backstyle).SaveViewState();
if (thisState != null)
return new Pair(baseState, thisState);
else
return baseState;
}
protected override void TrackViewState()
{
if (backstyle != null)
((IStateManager)backstyle).TrackViewState();
base.TrackViewState();
}
public override void RenderControl(HtmlTextWriter writer)
{
base.RenderControl(writer);
writer.Write("ABCDEFG");
writer.Write(BBB.BackColor.ToString());
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class BackStyle:IStateManager
{
public BackStyle(){}
[NotifyParentProperty(true)]
public System.Drawing.Color BackColor
{
get { return ViewState["BackColor"]==null ? System.Drawing.Color.Black:(System.Drawing.Color)ViewState["BackColor"]; }
set { ViewState["BackColor"] = value; }
}
private bool _isTrackingViewState;
private StateBag _viewState;
protected StateBag ViewState
{
get
{
if (_viewState == null)
{
_viewState = new StateBag(false);
if (_isTrackingViewState) ((IStateManager)_viewState).TrackViewState();
}
return _viewState;
}
}
#region IStateManager 成员
[Browsable(false)]
public bool IsTrackingViewState
{
get { return _isTrackingViewState; }
}
public void LoadViewState(object state)
{
if (state != null)
((IStateManager)ViewState).LoadViewState(state);
}
public object SaveViewState()
{
object savedState = null;
if (_viewState != null)
savedState =((IStateManager)_viewState).SaveViewState();
return savedState;
}
public void TrackViewState()
{
_isTrackingViewState = true;
if (_viewState != null)
((IStateManager)_viewState).TrackViewState();
}
internal void SetDirty()
{
_viewState.SetDirty(true);
}
#endregion
}
}
相关文章推荐
- 自定义控件(视图)28期笔记06:自定义控件之 自定义属性
- Android自定义控件之自定义属性(二)
- ASP.NET 4.0引入的视图状态属性ViewStateMode与原EnableViewState的区别
- 在程序中使用自定义控件的自定义属性注意事项
- ibatis 复杂类型属性(自定义类型的属性)
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- Android自定义控件之自定义属性(二)
- ASP.NET自定义控件复杂属性声明持久性浅析
- 安卓自定义控件、自定义xml里的属性的用法
- Android自定义控件系列四:自定义开关按钮(三)--- 自定义属性
- android自定义控件的自定义属性
- Android自定义控件及自定义属性
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- 自定义视图状态管理
- Android自定义控件——自定义属性
- Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)
- Android视图自定义属性
- ASP.NET自定义控件复杂属性声明持久性浅析
- Android自定义控件之自定义属性
- android 自定义控件 —— 自定义属性