カスタムコントロールにコレクションのプロパティを設定して永続化する方法 (単独のコレクション)

 カスタムコントロールで、単独のカスタムコレクションを使用し、その内容を永続化する必要がある場合、このコレクションの内容をサーバコントロールのタグ内に入れ子として登録します。
 これを実現するには、 ParseChildren 属性と PersistenceMode 属性を設定します。また、ParseChildren 属性に、ディフォルトプロパティを指定することで、コントロールタグ内のプロパティ名が省略されます。
【使い方】

例:プロパティ「Pages」に設定したカスタムコレクション(CustomCollection)を永続化する。
/// <summary>
/// カスタムコントロールクラス。
/// </summary>
[ParseChildren(true, "Pages"),
    ToolboxData("<{0}:TabControl runat=server></{0}:TabControl>")]
public class TabControl : System.Web.UI.WebControls.WebControl
{
    ・・・・・・

    private  myCustomCollection = new CustomCollection();

    ・・・・・・

    /// <summary>
    /// カスタムコレクションを表すオブジェクトを取得します。
    /// </summary>          
    [MergableProperty(false),
        PersistenceMode(PersistenceMode.InnerDefaultProperty),
        Description("カスタムコレクションを表すオブジェクトを取得します。"), Category("データ")] 
    public CustomCollection Pages
    {
        get {return myCustomCollection;}
    }

    ・・・・・・

}
【補足】
 カスタムコレクションの各プロパティの値は、親のコントロールのタグ内に入れ子として設定されます。また、各プロパティは「DefaultValue()」の設定が可能で、この値と等しい場合は、タグ内に表示されません。
戻る