Attention: We are retiring the ASP.NET Community Blogs. Learn more >

TemplateControlDesigner Example Code

I think I  pulled this from an example somewhere, but I can't find the original.


using System;

using System.ComponentModel;

using System.ComponentModel.Design;

using System.Web.UI;

using System.Web.UI.WebControls;

 

namespace ResourcedControls

{

/// <summary>

/// Summary description for CustomTemplatedControl.

/// </summary>

[Designer(typeof(CustomTemplateControlDesigner))]

public class CustomTemplatedControl : WebControl, INamingContainer

{

private ITemplate _MyTemplate;

private CustomTemplate _CustomTemplate;

/* public CustomTemplatedControl()

{

}

*/

public virtual string Caption

{

get

{

String caption = (string)ViewState["Caption"];

return ((caption == null)? String.Empty : caption);

}

set

{

ViewState["Caption"] = value;

}

}

[PersistenceMode(PersistenceMode.InnerProperty)]

[TemplateContainer(typeof(CustomTemplate))]

// [ReadOnly(true)]

[Browsable(false)]

public virtual ITemplate MyTemplate

{

get

{

return _MyTemplate;

}

set

{

_MyTemplate = value;

}

}

public override ControlCollection Controls

{

get

{

EnsureChildControls();

return base.Controls;

}

}

protected override void CreateChildControls ()

{

Controls.Clear();

_CustomTemplate = new CustomTemplate(Caption,this.Attributes);

ITemplate template = MyTemplate;

if (template == null)

{

//template = new DefaultTemplate();

}

if (template != null)

{

template.InstantiateIn(_CustomTemplate);

Controls.Add(_CustomTemplate);

}

}

protected override void Render(HtmlTextWriter output)

{

if(Site!=null)

{

foreach(Control control in this.Controls)

{

object temp = control.FindControl("Caption");

if(temp.GetType().GetProperty("Text")!=null)

{

temp.GetType().GetProperty("Text").SetValue(temp,this.Caption,null);

}

// switch(temp.GetType().ToString())

{

// case "System.Web.UI.WebControls.TextBox":

// ((TextBox)temp).Text=this.Caption;

// break;

}

}

}

EnsureChildControls();

RenderChildren(output);

// base.Render(output);

}

public override void DataBind()

{

EnsureChildControls();

base.DataBind();

}

private sealed class DefaultTemplate : ITemplate

{

// private static void CaptionLabel_DataBinding(object sender, EventArgs e)

// {

// Label captionLabel = (Label)sender;

// CustomTemplate container = (CustomTemplate)captionLabel.NamingContainer;

// captionLabel.Text = container.Caption;

// }

void ITemplate.InstantiateIn(Control container)

{

LiteralControl captionLabel = new LiteralControl();

// captionLabel.DataBinding += new EventHandler(CaptionLabel_DataBinding);

container.Controls.Add(captionLabel);

captionLabel.Text= "<!--" + container.GetType().Name + "-->";

}

}

}

}


 

 

using System;

using System.Collections;

using System.ComponentModel;

using System.ComponentModel.Design;

using System.Diagnostics;

using System.Web.UI;

using System.Web.UI.Design;

using System.Web.UI.WebControls;

 

 

namespace ResourcedControls

{

/// <summary>

/// Summary description for CustomTemplateControlDesigner.

/// </summary>

public class CustomTemplateControlDesigner: TemplatedControlDesigner

{

public CustomTemplateControlDesigner():base()

{

//

// TODO: Add constructor logic here

//

}

public override bool DesignTimeHtmlRequiresLoadComplete

{

get

{

return true;

}

}

public override string GetDesignTimeHtml()

{

CustomTemplatedControl control = (CustomTemplatedControl)Component;

if (control.MyTemplate == null)

{

return GetEmptyDesignTimeHtml();

}

string designTimeHtml = String.Empty;

try

{

control.DataBind();

designTimeHtml = base.GetDesignTimeHtml();

}

catch (Exception e)

{

designTimeHtml = GetErrorDesignTimeHtml(e);

}

return designTimeHtml;

}

protected override string GetEmptyDesignTimeHtml()

{

return CreatePlaceHolderDesignTimeHtml("Right-click to edit the ContactTemplate template property. "

+ "<br> If the ContactTemplate is not specified a default template is used at run time.");

}

protected override string GetErrorDesignTimeHtml(Exception e)

{

return CreatePlaceHolderDesignTimeHtml("There was an error rendering the ContactInfo control.");

}

TemplateEditingVerb[] _templateEditingVerbs;

protected override TemplateEditingVerb[] GetCachedTemplateEditingVerbs()

{

if (_templateEditingVerbs == null)

{

_templateEditingVerbs = new TemplateEditingVerb[1];

_templateEditingVerbs[0] = new TemplateEditingVerb("Custom Template", 0, this);

}

return _templateEditingVerbs;

}

public override void SetTemplateContent(ITemplateEditingFrame editingFrame, string templateName, string templateContent)

{

if ((_templateEditingVerbs != null) && (_templateEditingVerbs[0] == editingFrame.Verb))

{

CustomTemplatedControl control = (CustomTemplatedControl)Component;

ITemplate newTemplate = null;

if ((templateContent != null) && (templateContent.Trim().Length != 0))

{

// UITemplates.Utilities.MsgBox(templateContent);

newTemplate = GetTemplateFromText(templateContent);

control.MyTemplate = newTemplate;

}

}

}

protected override ITemplateEditingFrame CreateTemplateEditingFrame(TemplateEditingVerb verb)

{

ITemplateEditingFrame frame = null;

if ((_templateEditingVerbs != null) && (_templateEditingVerbs[0] == verb))

{

ITemplateEditingService teService = (ITemplateEditingService)GetService(typeof(ITemplateEditingService));

if (teService != null)

{

Style style = ((CustomTemplatedControl)Component).ControlStyle;

frame = teService.CreateFrame(this, verb.Text, new string[] { "ContactTemplate" }, style, null);

}

}

return frame;

}

private void DisposeTemplateEditingVerbs()

{

if (_templateEditingVerbs != null)

{

_templateEditingVerbs[0].Dispose();

_templateEditingVerbs = null;

}

}

public override string GetTemplateContent(ITemplateEditingFrame editingFrame, string templateName, out bool allowEditing)

{

string content = String.Empty;

allowEditing = true;

if ((_templateEditingVerbs != null) && (_templateEditingVerbs[0] == editingFrame.Verb))

{

ITemplate currentTemplate = ((CustomTemplatedControl)Component).MyTemplate;

if (currentTemplate != null)

{

content = GetTextFromTemplate(currentTemplate);

}

}

return content;

}

protected override void PreFilterProperties(IDictionary properties)

{

base.PreFilterProperties(properties);

System.ComponentModel.PropertyDescriptor pd = (PropertyDescriptor)properties["MyTemplate"];

// pd.IsReadOnly=true;

// UITemplates.Utilities.MsgBox(DataBindings.Count.ToString()) ;

// properties.Remove();

}

}

}

No Comments