How to build CustomControl with AjaxControlToolkit Control?

mac2022-07-05  10

There is a requirement: A customer would like to built a Custom CollapsiblePanel control. There are two contents of this control, the Header and the Content, both of them are Panels. His requirement is that we can place any control into the two contents by adding the HTML into the tag directly. The Custom Control also containers an AjaxControlToolkit CollapsiblePanelExtender to achieve the Collapse/Expand function for the Header and Content.

 

To achieve your goal, you can follow these steps:

1. We need to build a class which inherits the Panel Class and INamingContainer Interface. This class would be the Header and Content control’s base class.

 

代码  1  using  System;     2  using  System.Collections.Generic;     3  using  System.ComponentModel;     4  using  System.Text;     5  using  System.Web;     6  using  System.Web.UI;     7  using  System.Web.UI.WebControls;     8      9  namespace  CustomCollapsiblePanel    10  {    11       public   class  CCPContainer : Panel, INamingContainer    12      {    13     14      }    15 

 

 

2. In the CustomControl’s class, we create two properties Header and Content with the ITemplate type. Set the PersistenceModeAttribute with the value “InnerProperty”, then the two control would persist as a nested tag in the HTML.

 

代码  1  ///   <summary>      2  ///  Header Template     3  ///   </summary>      4  [Browsable( false )]     5  [DefaultValue( null )]     6  [Description( " CollapisblePanel Header " )]     7  [PersistenceMode(PersistenceMode.InnerProperty)]     8  [TemplateContainer( typeof (CCPContainer))]     9  [TemplateInstance(TemplateInstance.Single)]    10  public   virtual  ITemplate Header    11  {    12       get  {  return  _headerTemplate; }    13       set  { _headerTemplate  =  value; }    14  }    15  ///   <summary>     16  ///  Content Template    17  ///   </summary>     18  [Browsable( false )]    19  [DefaultValue( null )]    20  [Description( " CollapisblePanel Content " )]    21  [PersistenceMode(PersistenceMode.InnerProperty)]    22  [TemplateContainer( typeof (CCPContainer))]    23  [TemplateInstance(TemplateInstance.Single)]    24  public   virtual  ITemplate Content    25  {    26       get  {  return  _contentTemplate; }    27       set  { _contentTemplate  =  value; }    28  }   29 

 

 

3. Create the Header Container and Content Container instance properties which are used to added into the CustomControl.

 

代码  1  ///   <summary>      2  ///  Header Container     3  ///   </summary>      4  [Browsable( false )]     5  [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]     6  public  CCPContainer HeaderContainer     7  {     8       get     9      {    10          EnsureChildControls();    11           return  _header;    12      }    13  }    14     15  ///   <summary>     16  ///  Content Container    17  ///   </summary>     18  [Browsable( false )]    19  [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]    20  public  CCPContainer ContentContainer    21  {    22       get    23      {    24          EnsureChildControls();    25           return  _content;    26      }    27  }   28 

 

 

4. Add two CssClasses properties for the Header and Content.

 

代码  1  ///   <summary>      2  ///  Header CSS Class     3  ///   </summary>      4  [Browsable( true )]     5  [Category( " Appearance " )]     6  [Description( " CSS class for CollapisblePanel Header " )]     7  public   string  HeaderCssClass     8  {     9       get    10      {    11          EnsureChildControls();    12           return  _header.CssClass;    13      }    14       set    15      {    16          EnsureChildControls();    17          _header.CssClass  =  value;    18      }    19  }    20     21  ///   <summary>     22  ///  Content CSS Class    23  ///   </summary>     24  [Browsable( true )]    25  [Category( " Appearance " )]    26  [Description( " CSS class for CollapisblePanel Content " )]    27  public   string  ContentCssClass    28  {    29       get    30      {    31          EnsureChildControls();    32           return  _content.CssClass;    33      }    34       set    35      {    36          EnsureChildControls();    37          _content.CssClass  =  value;    38      }    39  }   40 

 

 

5. In the override CreateChildControls function, add the Header, Content and an AjaxControlToolkit CollapsiblePanelExtender. Bind the corresponding controls with this extender. In the end, load the templates into the controls.

 

代码  1           ///   <summary>  2           ///  Instantiate the templates into new child controls  3           ///   </summary>  4           protected   override   void  CreateChildControls()  5          {  6               //  Create the controls  7              Controls.Clear();  8              _header  =   new  CCPContainer();  9              _header.ID  =   string .Format(System.Globalization.CultureInfo.InvariantCulture,  " {0}_header " this .ID); 10              Controls.Add(_header); 11              _content  =   new  CCPContainer(); 12              _content.ID  =   string .Format(System.Globalization.CultureInfo.InvariantCulture,  " {0}_content " this .ID); 13              Controls.Add(_content); 14  15              CollapsiblePanelExtender cpe  =   new  CollapsiblePanelExtender(); 16              cpe.ID  =   " cpe " ; 17              cpe.TargetControlID  =  _content.ID; 18              cpe.CollapseControlID  =  _header.ID; 19              cpe.ExpandControlID  =  _header.ID; 20              Controls.Add(cpe); 21  22               //  Load the templates into the controls 23               if  (_headerTemplate  !=   null ) 24                  _headerTemplate.InstantiateIn(_header); 25               if  (_contentTemplate  !=   null ) 26                  _contentTemplate.InstantiateIn(_content); 27          } 28      }

 

 

6. Compile the custom control and add it into a page. Complete the property value.

 

代码  1  < ccp:CusCollapsiblePanel ID = " CusCollapsiblePanel1 "  runat = " server "  ContentCssClass = " collapsePanel "     2      HeaderCssClass = " collapsePanelHeader " >     3       < Header >     4          The Header     5       </ Header >     6       < Content >     7          The Content     8           < asp:Label ID = " Label1 "  runat = " server " > FirstName: </ asp:Label >     9           < asp:TextBox ID = " TextBox1 "  runat = " server " > LastName: </ asp:TextBox >    10       </ Content >    11  </ ccp:CusCollapsiblePanel >   

 

 

7. The whole code:

The CusCollapsiblePanel.cs

 

代码   1  using  System;      2  using  System.Collections.Generic;      3  using  System.ComponentModel;      4  using  System.Text;      5  using  System.Web;      6  using  System.Web.UI;      7  using  System.Web.UI.WebControls;      8  using  AjaxControlToolkit;      9      10  namespace  CustomCollapsiblePanel     11  {     12      [ToolboxData( " <{0}:CusCollapsiblePanel runat=server></{0}:CusCollapsiblePanel> " )]     13       public   class  CusCollapsiblePanel : WebControl     14      {    15           #region  private properties     16               17           ///   <summary>      18           ///  Header Container     19           ///   </summary>      20           private  CCPContainer _header;     21      22           ///   <summary>      23           ///  Header Template     24           ///   </summary>      25           private  ITemplate _headerTemplate;     26      27           ///   <summary>      28           ///  Content Container     29           ///   </summary>      30           private  CCPContainer _content;     31      32           ///   <summary>      33           ///  Content Template     34           ///   </summary>      35           private  ITemplate _contentTemplate;    36     37           #endregion     38     39           #region  public properties     40      41           ///   <summary>      42           ///  Header Container     43           ///   </summary>      44          [Browsable( false )]     45          [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]     46           public  CCPContainer HeaderContainer     47          {     48               get     49              {     50                  EnsureChildControls();     51                   return  _header;     52              }     53          }     54      55           ///   <summary>      56           ///  Header CSS Class     57           ///   </summary>      58          [Browsable( true )]     59          [Category( " Appearance " )]     60          [Description( " CSS class for CollapisblePanel Header " )]     61           public   string  HeaderCssClass     62          {     63               get     64              {     65                  EnsureChildControls();     66                   return  _header.CssClass;     67              }     68               set     69              {     70                  EnsureChildControls();     71                  _header.CssClass  =  value;     72              }     73          }     74      75           ///   <summary>      76           ///  Header Template     77           ///   </summary>      78          [Browsable( false )]     79          [DefaultValue( null )]     80          [Description( " CollapisblePanel Header " )]     81          [PersistenceMode(PersistenceMode.InnerProperty)]     82          [TemplateContainer( typeof (CCPContainer))]     83          [TemplateInstance(TemplateInstance.Single)]     84           public   virtual  ITemplate Header     85          {     86               get  {  return  _headerTemplate; }     87               set  { _headerTemplate  =  value; }     88          }     89      90           ///   <summary>      91           ///  Content Container     92           ///   </summary>      93          [Browsable( false )]     94          [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]     95           public  CCPContainer ContentContainer     96          {     97               get     98              {     99                  EnsureChildControls();    100                   return  _content;    101              }    102          }    103     104           ///   <summary>     105           ///  Content CSS Class    106           ///   </summary>     107          [Browsable( true )]    108          [Category( " Appearance " )]    109          [Description( " CSS class for CollapisblePanel Content " )]    110           public   string  ContentCssClass    111          {    112               get    113              {    114                  EnsureChildControls();    115                   return  _content.CssClass;    116              }    117               set    118              {    119                  EnsureChildControls();    120                  _content.CssClass  =  value;    121              }    122          }    123     124           ///   <summary>     125           ///  Content Template    126           ///   </summary>     127          [Browsable( false )]    128          [DefaultValue( null )]    129          [Description( " CollapisblePanel Content " )]    130          [PersistenceMode(PersistenceMode.InnerProperty)]    131          [TemplateContainer( typeof (CCPContainer))]    132          [TemplateInstance(TemplateInstance.Single)]    133           public   virtual  ITemplate Content    134          {    135               get  {  return  _contentTemplate; }    136               set  { _contentTemplate  =  value; }    137          }   138    139           #endregion     140              141           ///   <summary>     142           ///  Instantiate the templates into new child controls    143           ///   </summary>     144           protected   override   void  CreateChildControls()    145          {    146               //  Create the controls    147              Controls.Clear();    148              _header  =   new  CCPContainer();    149              _header.ID  =   string .Format(System.Globalization.CultureInfo.InvariantCulture,  " {0}_header " this .ID);    150              Controls.Add(_header);    151              _content  =   new  CCPContainer();    152              _content.ID  =   string .Format(System.Globalization.CultureInfo.InvariantCulture,  " {0}_content " this .ID);    153              Controls.Add(_content);    154     155              CollapsiblePanelExtender cpe  =   new  CollapsiblePanelExtender();    156              cpe.ID  =   " cpe " ;    157              cpe.TargetControlID  =  _content.ID;    158              cpe.CollapseControlID  =  _header.ID;    159              cpe.ExpandControlID  =  _header.ID;    160              Controls.Add(cpe);    161     162               //  Load the templates into the controls    163               if  (_headerTemplate  !=   null )    164                  _headerTemplate.InstantiateIn(_header);    165               if  (_contentTemplate  !=   null )    166                  _contentTemplate.InstantiateIn(_content);    167          }    168      }    169  }

 

The CCPContainer.cs

 

代码  1  using  System;     2  using  System.Collections.Generic;     3  using  System.ComponentModel;     4  using  System.Text;     5  using  System.Web;     6  using  System.Web.UI;     7  using  System.Web.UI.WebControls;     8      9  namespace  CustomCollapsiblePanel    10  {    11       public   class  CCPContainer : Panel, INamingContainer    12      {    13     14      }    15 

 

The TestCustomCollapsiblePanel.aspx

 

代码  1  <% @ Page Language = " vb "  AutoEventWireup = " false "  CodeBehind = " TestCustomCollapsiblePanel.aspx.vb "     2      Inherits = " SoluTest_CustomControl.TestCustomCollapsiblePanel "   %>     3      4  <% @ Register Assembly = " CustomCollapsiblePanel "  Namespace = " CustomCollapsiblePanel "     5      TagPrefix = " ccp "   %>     6  <! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >     7  < html xmlns = " http://www.w3.org/1999/xhtml " >     8  < head runat = " server " >     9       < title ></ title >    10     11       < script runat = " server " >    12     13          Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    14               ' form1.Controls.Add(New CustomExtenders.CustomCollapsiblePanel())    15          End Sub    16          17       </ script >    18     19       < style type = " text/css " >    20          .collapseContainer    21          {    22              width: 500px;    23              overflow: visible;    24          }    25          .collapsePanel    26          {    27              border: medium solid #0000FF;    28              width: 450px;    29              background - color: white;    30              overflow: visible;    31               float : none;    32          }    33          .collapsePanelHeader    34          {    35              width: 450px;    36              height: 20px;    37              color: Yellow;    38              background - color: # 000080 ;    39              font - weight: bold;    40               float : none;    41              padding: 5px;    42              cursor: pointer;    43              vertical - align: middle;    44          }    45       </ style >    46  </ head >    47  < body >    48       < form id = " form1 "  runat = " server " >    49       < div >    50           < asp:ScriptManager ID = " ScriptManager1 "  runat = " server " >    51           </ asp:ScriptManager >    52           < ccp:CusCollapsiblePanel ID = " CusCollapsiblePanel1 "  runat = " server "  ContentCssClass = " collapsePanel "    53              HeaderCssClass = " collapsePanelHeader " >    54               < Header >    55                  The Header    56               </ Header >    57               < Content >    58                  The Content    59                   < asp:Label ID = " Label1 "  runat = " server " > FirstName: </ asp:Label >    60                   < asp:TextBox ID = " TextBox1 "  runat = " server " > LastName: </ asp:TextBox >    61               </ Content >    62           </ ccp:CusCollapsiblePanel >    63       </ div >    64       </ form >    65  </ body >    66  </ html >  

 

8. The related Asp.Net thread URL:http://forums.asp.net/p/1499632/3553543.aspx#3553543

 

Best regards,

Zhi-Qiang Ni

 

转载于:https://www.cnblogs.com/Zhi-QiangNi/archive/2009/12/08/1619628.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)