Christian Ruppert
Christian Ruppert

Reputation: 3779

Silverlight Border - Am I stupid?

sorry, I did not find something useful when searching google. Very basic question, mainly "Am I stupid". I know StackPanel gives its child elements full space, but why does the "Auto" property relate to the PARENT element in case of a border. I mean perhaps I am doing something wrong, but this behaviour is definitly not what I intended:

Pic1 http://img6.imageshack.us/img6/171/20090805002723.jpg

Ok, after some thinking I found a way, which looks like this:

Seriously http://img18.imageshack.us/img18/3173/20090805003045.jpg

But really, this way? I mean a "minimal sized control" with a textbox (which width I want to define) and a border around it, and I need this kind of tree? If anyone has a better way, please tell me...

Chris

PS: And that while I am writing about the nice UI composition for Silverlight, and wanted to give a simple example.. I just say: Legendary!

Upvotes: 2

Views: 2574

Answers (3)

Paully
Paully

Reputation: 570

An easy way is to get rid of the Stackpanel and just use the VerticalAlignment and HorizontalAlignment to keep it at the top left. Then just set the Border Width and leave the Height alone.

<Grid x:Name="LayoutRoot">

   <Border Width="150" BorderBrush="Blue" BorderThickness="1" VerticalAlignment="Top" HorizontalAlignment="Left">
      <TextBox Text="I'm Serious" Background="LightBlue" />
   </Border>

</Grid>

Upvotes: 0

Bill Reiss
Bill Reiss

Reputation: 3460

Canvas sould be avoided unless it really makes sense for what you're trying to do. For example, Canvas normally makes sense for a game, or something where you want to drag elements around. Here it's just getting in your way.

Reasons not to use Canvas:

http://blogs.msdn.com/devdave/archive/2008/05/21/why-i-don-t-like-canvas.aspx

Upvotes: 0

Jerry Bullard
Jerry Bullard

Reputation: 6106

Definitely not stupid. This can be very confusing. I find it helps when thinking about layout in WPF/Silverlight to think top down from the root of the control hierarchy instead of bottom up.

It becomes obvious when you think about the stack panel's job. It stacks up its child elements and sets their widths to its width. It is therefore overriding your border's width of Auto. The Canvas you later wrapped around it does not try to rearrange its children at all, and it does not override their widths, so while its width is the width of the stack panel, the Auto on your border is now working (sized to its content, the TextBox).

Clear as mud?

Here is an article with more detail: http://msdn.microsoft.com/en-us/library/ms745058.aspx

And I highly recommend the WPF book by Chris Sells & Ian Griffiths to get up to speed on the intricacies of WPF/Silverlight layout.

Upvotes: 1

Related Questions