Scott on Writing

Musings on technical writing...

Anyone Familiar with Enhancing the ReadWriteControlDesigner?

My last two blog entries have focused on the RoundedCorners Web control I created, which displays text within a box with rounded corners.  (See a live demo or read more about this control.)  One of the most requested feature additions has been the ability for the control to contain nested content, and to display this nested content within the box with rounded corners.  That is, a page developer could use the following markup:

<skm:RoundedCorners runat=”server” ...>
  <asp:DataGrid ...>
    ...
  </asp:DataGrid>
</skm:RoundedCorners>

And the result would be a DataGrid within a box with rounded corners.  Well, adding this functionality wasn't too challenging, but the task that's facing me now is creating a rich design-time experience, which is proving to be harder than expected.  Ideally, the design-time experience would be similar to that of the Panel Web control, where a page developer could simply drag and drop Web controls from the Toolbox into the RoundedCorners control.  From my research (primarily Developing Microsoft ASP.NET Server Controls and Components and picking through Reflector), I found that you need to create a Designer class that derives from the ReadWriteControlDesigner class.  This, along with setting the ParseChildren and PersistChildren class-level attributes correctly, will automatically will allow a page developer to drag and drop controls within the custom server control.  However, the ReadWriteControlDesigner class does not call the GetDesignTimeHtml() method, which is typically used in a custom Designer class to tailor the HTML used to render the control in the VS.NET Design tab.

Instead, the ReadWriteControlDesigner class creates what appears to be a DHTML-aware canvas that you can use to tailor the look of the control in the Design tab.  I was unable to find what, exactly, the rendered HTML is for this canvas, but it appears to be a <span> or <div>.  You can programmatically specify CSS properties or HTML attributes for this canvas, such as backgroundcolor, width, height, font, border, etc.  But I don't see that there's any possible way to customize the actual HTML that comprises this canvas.  See, I don't want a simple <span> or <div>, I want a 3x3 <table> in there, which would show a potential title for the box, and the places where the rounded corners would appear.  But with a custom Designer derived from ReadWriteControlDesigner class, I can't find out how to control this, if it's at all possible.

Has anyone had any luck creating a custom Designer for a server control that extends the ReadWriteControlDesigner class and allows for a finer degree of customization of the HTML in the VS.NET Designer, or is this just not possible?  Finally, any opinions on having a substandard design-time experience?  Would it be worth it to have a control with more features (namely control nesting)?

posted on Monday, August 02, 2004 9:13 PM

Feedback

# re: Anyone Familiar with Enhancing the ReadWriteControlDesigner? 8/3/2004 12:00 AM Andy Smith

Scott, there's no realy way to do what you want there with vstudio 2003. With 2005, we'll get Editable Regions and Single-Instance Templates, which both solve the problem in different ways. But for now, it seems that the only way you could do it is write your own winforms-based designer, like the way datagrid does, that supports drag'n'drop from the toolbox. I'm not sure this is possible.

# re: Anyone Familiar with Enhancing the ReadWriteControlDesigner? 8/3/2004 6:57 AM Michael Stuart

I looked into this quite a bit awhile back. From what I could find out, it is not possible. I'm glad to hear that you can do it in 2005 though. Also in 2005, you can serve up the corner image pieces dynamically directly from your code to the VS.net designer. I can't remember the exact name of this feature though.

# re: Anyone Familiar with Enhancing the ReadWriteControlDesigner? 8/3/2004 2:37 PM AndrewSeven

This was the wall I hit building a inplementation of MasterPages.

I supply a panel based control on the design surface but you don't get to see the template at design time.

The ReadWriteControlDesigner seems to leave it up to the design surface to render its contents, completely ignoring GetDesignTimeHtml.

Maybe an ITemplate to hold the child controls then you can use template editing mode :S



Title:  
Name:  
Url:
Protected by Clearscreen.SharpHIPEnter the code you see:
Comments   

Add To Your Reader

My Links

Archives

Post Categories

 

I am a Microsoft MVP for ASP.NET.
I am an ASPInsider.
<May 2008>
SMTWTFS
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

Comment Stats

DayTotal% of Total
Sunday 1866.8%
Monday 37913.9%
Tuesday 45316.7%
Wednesday 50418.5%
Thursday 53519.7%
Friday 49418.2%
Saturday 1666.1%
Total 2717100.0%

Hour1Total% of Total
12:00 AM 652.4%
1:00 AM 682.5%
2:00 AM 622.3%
3:00 AM 742.7%
4:00 AM 572.1%
5:00 AM 1033.8%
6:00 AM 1084.0%
7:00 AM 1585.8%
8:00 AM 1716.3%
9:00 AM 1475.4%
10:00 AM 1716.3%
11:00 AM 1816.7%
12:00 PM 1886.9%
1:00 PM 1696.2%
2:00 PM 1605.9%
3:00 PM 1324.9%
4:00 PM 1073.9%
5:00 PM 923.4%
6:00 PM 913.3%
7:00 PM 963.5%
8:00 PM 833.1%
9:00 PM 782.9%
10:00 PM 792.9%
11:00 PM 772.8%
Total 2717100.0%

Comments by Blog Entry Date/Time

Day Entry MadeAvg.Total
Sunday 5.54144
Monday 5.22339
Tuesday 4.28419
Wednesday 7.67637
Thursday 6.90607
Friday 5.48411
Saturday 5.33160
Total 5.842717

Hour1 Entry MadeAvg.Total
12:00 AM 5.0035
1:00 AM 1.002
5:00 AM 0.000
7:00 AM 7.0035
8:00 AM 5.35107
9:00 AM 6.32278
10:00 AM 6.47246
11:00 AM 4.41181
12:00 PM 6.88330
1:00 PM 3.00111
2:00 PM 5.41222
3:00 PM 8.64285
4:00 PM 4.0589
5:00 PM 5.92154
6:00 PM 4.52113
7:00 PM 9.67174
8:00 PM 9.80147
9:00 PM 5.05111
10:00 PM 5.4265
11:00 PM 4.5732
Total 5.842717

Learn More About Comment Stats
1 - All times GMT -8...


Blog Stats

Favorite Web Sites

My Books

My MSDN Articles