I just tested this with Web.UI 2009.2.1509 and the bug appears to have been since fixed. Here's the code I used:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using ComponentArt.Web.UI;
namespace RuntimeSnapInstantiation
{
public class WebForm1 : System.Web.UI.Page
{
protected ComponentArt.Web.UI.Snap Snap1;
protected ComponentArt.Web.UI.Snap Snap2;
protected System.Web.UI.WebControls.PlaceHolder PlaceHolder1;
private void Page_Load(object sender, System.EventArgs e)
{
createSnapInstances();
}
private void createSnapInstances()
{
/* Snap1, using new method */
Snap1 = new ComponentArt.Web.UI.Snap();
Snap1.ID = "Snap1";
Snap1.DockingContainers = "LeftColumn,RightColumn";
Snap1.CurrentDockingContainer = "LeftColumn";
Snap1.CurrentDockingIndex = 0;
Snap1.Controls.Clear(); // remove default SnapHeader/SnapContent
SnapContent snapHeader = new SnapContent();
snapHeader.ID = "HeaderSpan"; // need to give explicit ID to avoid minor bug in 2007.1
snapHeader.Controls.Add(GetHeaderControl("Snap1", "Page Options", "images/i_open.gif"));
Snap1.Controls.Add(snapHeader);
Snap1.Header = snapHeader;
SnapContent snapCollapsedHeader = new SnapContent();
snapCollapsedHeader.ID = "CollapsedHeaderSpan"; // need to give explicit ID to avoid minor bug in 2007.1
snapCollapsedHeader.Controls.Add(GetHeaderControl("Snap1", "Page asdf Options", "images/i_closed.gif"));
Snap1.Controls.Add(snapCollapsedHeader);
Snap1.CollapsedHeader = snapCollapsedHeader;
SnapContent snapContent = new SnapContent();
snapContent.ID = "InnerSpan"; // need to give explicit ID to avoid minor bug in 2007.1
UserControl uc1 = (UserControl)Page.LoadControl("PageOptions.ascx");
snapContent.Controls.Add(uc1);
Snap1.Controls.Add(snapContent);
Snap1.Content = snapContent;
SnapContent snapFooter = new SnapContent();
snapFooter.ID = "FooterSpan"; // need to give explicit ID to avoid minor bug in 2007.1
UserControl uc2 = (UserControl)Page.LoadControl("Footer.ascx");
snapFooter.Controls.Add(uc2);
Snap1.Controls.Add(snapFooter);
Snap1.Footer = snapFooter;
PlaceHolder1.Controls.Add(Snap1);
/* Snap2, using old deprecated method */
Snap2 = new ComponentArt.Web.UI.Snap();
Snap2.ID = "Snap2";
Snap2.DockingContainers = "LeftColumn,RightColumn";
Snap2.CurrentDockingContainer = "LeftColumn";
Snap2.CurrentDockingIndex = 1;
SnapHeader Header2 = new SnapHeader();
Header2.Title = "Developer Tools";
Header2.SnapID = "Snap2";
Snap2.HeaderTemplate = Header2;
Snap2.ContentTemplate = Page.LoadTemplate("DeveloperTools.ascx");
Snap2.FooterTemplate = Page.LoadTemplate("Footer.ascx");
PlaceHolder1.Controls.Add(Snap2);
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/* older Snaps required the usage of an Itemplate class object */
public class SnapHeader : ITemplate
{
public string SnapID;
public string Title;
public void InstantiateIn(Control container)
{
Literal L1 = new Literal();
L1.Text = "<div style=\"CURSOR: move; width: 100%;\"><table cellSpacing=\"0\" cellPadding=\"0\" width=\"100%\" border=\"0\">";
L1.Text += "<tr><td class=\"SnapHeader\" onmousedown=\"" + SnapID + ".startDragging(event);\">" + Title + "</td>";
L1.Text += "<td width=\"10\" style=\"cursor: hand\" align=\"right\"><img onclick=\"" + SnapID + ".toggleExpand();\" src=\"images/i_open.gif\" width=\"22\" height=\"19\" border=\"0\"></td>";
L1.Text += "</tr></table></div>";
container.Controls.Add(L1);
}
}
/* new Snaps use control */
private Control GetHeaderControl(string SnapID, string Title, string toggleImagePath)
{
Literal L1 = new Literal();
L1.Text = "<div style=\"CURSOR: move; width: 100%;\"><table cellSpacing=\"0\" cellPadding=\"0\" width=\"100%\" border=\"0\">";
L1.Text += "<tr><td class=\"SnapHeader\" onmousedown=\"" + SnapID + ".startDragging(event);\">" + Title + "</td>";
L1.Text += "<td width=\"10\" style=\"cursor: hand\" align=\"right\"><img onclick=\"" + SnapID + ".toggleExpand();\" src=\"" + toggleImagePath + "\" width=\"22\" height=\"19\" border=\"0\"></td>";
L1.Text += "</tr></table></div>";
return L1;
}
}
}