Pic1 http://img6.imageshack.us/img6/171/20090805002723.jpg
好的,经过一番思考后我找到了一种方法,看起来像这样:
Seriously http://img18.imageshack.us/img18/3173/20090805003045.jpg
但是真的,这样吗?我的意思是一个“最小控件”,带有一个文本框(我想要定义的宽度)和它周围的边框,我需要这种树吗?如果有人有更好的方法,请告诉我......
克里斯
PS:当我在写关于Silverlight的优秀UI组合时,想给出一个简单的例子......我只想说:传奇!
答案 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和HorizontalAlignment将其保持在左上角。然后只需设置边框宽度并单独保留高度。
<Grid x:Name="LayoutRoot">
<Border Width="150" BorderBrush="Blue" BorderThickness="1" VerticalAlignment="Top" HorizontalAlignment="Left">
<TextBox Text="I'm Serious" Background="LightBlue" />
</Border>
</Grid>