Betrand Le Roy made a post called “Why you shouldn’t expose public properties from your pages”. For the 99% of the scenarios I agree with him since it would obviously prevent your control from being reused ubiquitously, but there is at least one scenario where I see this as acceptable: when creating a shell environment scenario like Windows Explorer or MMC.
We have the concept of a Library at Mimeo. The Mimeo Library implementation behaves a lot like MMC. You can plug in folder providers (analogous to MMC snap-ins or Explorer Shell Extensions) for the tree view on the left and then each of those folders have specific “item view” controls associated with them that get loaded into the right hand pane when the folder is selected. So these “item view” controls are specialized and are meant to be hosted in a certain environment that mandates certain behavior from them, as dictated by a abstract base control class they all derive from and provide specific behavior for, as well as provides a base set of hosting behvaior for them. I’d love to show a screen shot to provide better visualization of what I mean, but since we’ve only recently entered a beta process I can’t.
Now the only real question is: Why should the page be the shell? Why not another control? In actuality, it could and probably should be since I’m a big fan of componentizing, but that’s just the way it started since we didn’t need to reuse the whole browser anywhere else. Now we’re into the beta process so it’s not worth taking the risk of introducing bugs while extracting it. Hopefully after v1.0 release it’ll be a medium priority for v1.1.