In today's Tip of the Day I wrote that Canvas's Height and Width properties default to zero. A reader wrote to me in email saying,
Actually, unless it was implemented differently in Silverlight than in WPF (which I cannot exclude), the default width and height is Auto. In this, Canvas is no different from any other Panel (Width and Height of a WPF Grid also are Auto).
I will check with the folks who implemented Canvas, but for now I can tell you that the Silverlight documentation confirms that the values default to zero (though, as I wrote in my return email, I would agree that this is not dispositive).
I also wrote a test program, though I'm not certain enough about the internals to be sure that even this puts the matter to rest:
Scene.xaml
<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Canvas Name="InnerCanvas" Background="LightBlue" > <Rectangle x:Name="myRect0" Width="100" Height="44" Canvas.Left="0" Canvas.Top="10" StrokeThickness="2" Stroke="Black" Fill="Red" /> <TextBlock Name="Message" Width="200" Height="200" Text="Ready" Canvas.Left="150" Canvas.Top="10" /> </Canvas> </Canvas>
(Note that Canvas has no Height or Width set).
Scene.xaml.js
?<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Canvas Name="InnerCanvas" Background="LightBlue" > <Rectangle x:Name="myRect0" Width="100" Height="44" Canvas.Left="0" Canvas.Top="10" StrokeThickness="2" Stroke="Black" Fill="Red" /> <TextBlock Name="Message" Width="200" Height="200" Text="Ready" Canvas.Left="150" Canvas.Top="10" /> </Canvas> </Canvas>