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   

My Links

Ads Via DevMavens

Archives

Post Categories

 

I am a Microsoft MVP for ASP.NET.
I am an ASPInsider.
<March 2010>
SMTWTFS
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

Comment Stats

DayTotal% of Total
Sunday 2056.8%
Monday 42514.1%
Tuesday 51917.2%
Wednesday 55518.4%
Thursday 58019.2%
Friday 54718.1%
Saturday 1886.2%
Total 3019100.0%

Hour1Total% of Total
12:00 AM 782.6%
1:00 AM 812.7%
2:00 AM 682.3%
3:00 AM 822.7%
4:00 AM 692.3%
5:00 AM 1264.2%
6:00 AM 1183.9%
7:00 AM 1816.0%
8:00 AM 1926.4%
9:00 AM 1585.2%
10:00 AM 1886.2%
11:00 AM 1936.4%
12:00 PM 2016.7%
1:00 PM 1846.1%
2:00 PM 1695.6%
3:00 PM 1354.5%
4:00 PM 1153.8%
5:00 PM 1073.5%
6:00 PM 1013.3%
7:00 PM 1073.5%
8:00 PM 923.0%
9:00 PM 882.9%
10:00 PM 913.0%
11:00 PM 953.1%
Total 3019100.0%

Comments by Blog Entry Date/Time

Day Entry MadeAvg.Total
Sunday 4.97159
Monday 4.80384
Tuesday 4.04477
Wednesday 7.39680
Thursday 6.26676
Friday 5.07466
Saturday 4.78177
Total 5.403019

Hour1 Entry MadeAvg.Total
12:00 AM 5.2937
1:00 AM 1.002
5:00 AM 0.000
7:00 AM 3.8550
8:00 AM 3.72134
9:00 AM 6.06297
10:00 AM 5.63276
11:00 AM 4.22194
12:00 PM 6.16351
1:00 PM 3.09133
2:00 PM 4.89230
3:00 PM 7.64321
4:00 PM 4.00108
5:00 PM 6.07170
6:00 PM 4.64116
7:00 PM 8.95188
8:00 PM 8.63164
9:00 PM 5.00115
10:00 PM 6.31101
11:00 PM 4.5732
Total 5.403019

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


Blog Stats

Favorite Web Sites

My Books

My MSDN Articles