Silverlight Border - 我是傻瓜吗?

时间:2009-08-04 22:37:10

标签: silverlight user-interface

抱歉,我在搜索谷歌时没有找到有用的东西。非常基本的问题,主要是“我是傻瓜”。我知道StackPanel为其子元素提供了完整的空间,但为什么在边框的情况下“Auto”属性与PARENT元素相关。我的意思是也许我做错了什么,但这种行为绝对不是我想要的:

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

好的,经过一番思考后我找到了一种方法,看起来像这样:

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

但是真的,这样吗?我的意思是一个“最小控件”,带有一个文本框(我想要定义的宽度)和它周围的边框,我需要这种树吗?如果有人有更好的方法,请告诉我......

克里斯

PS:当我在写关于Silverlight的优秀UI组合时,想给出一个简单的例子......我只想说:传奇!

3 个答案:

答案 0 :(得分:1)

绝对不是傻瓜。这可能非常令人困惑。我认为在考虑WPF / Silverlight中的布局时,从控制层次结构的根部向上思考而不是自下而上会有所帮助。

当您考虑堆栈面板的工作时,这一点很明显。它堆叠其子元素并将其宽度设置为其宽度。因此,它会覆盖边框的自动宽度。你后来包裹它的Canvas根本不会尝试重新排列它的子节点,并且它不会覆盖它们的宽度,所以当它的宽度是堆栈面板的宽度时,边框上的Auto现在正在工作(根据其内容调整大小) ,TextBox)。

清除泥土?

这是一篇更详细的文章: http://msdn.microsoft.com/en-us/library/ms745058.aspx

我强烈推荐Chris Sells和他的WPF书籍。 Ian Griffiths能够快速掌握WPF / Silverlight布局的复杂性。

答案 1 :(得分:0)

除非你真正想要做什么,否则应该避免画布。例如,Canvas通常对游戏有意义,或者你想要拖动元素的东西。这就是你的方式。

不使用Canvas的原因:

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

答案 2 :(得分:0)

一种简单的方法是摆脱Stackpanel,只需使用VerticalAlignment和Horizo​​ntalAlignment将其保持在左上角。然后只需设置边框宽度并单独保留高度。

<Grid x:Name="LayoutRoot">

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

</Grid>