我的谷歌和stackoverflow搜索福已经失败了我,所以我向社区提出这个问题。StackPanel中的网格:为什么auto和*的行为很奇怪?
(这是使用VS2010和.NET 4.0所有生成,在一个空白的默认WPF解决方案)
考虑以下XAML:
<StackPanel Orientation="Horizontal">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Name="aborder" Grid.Column="0" Grid.ColumnSpan="2"
Background="Red" Width="200"/>
<Border Name="aborder2" Background="Green"/>
</Grid>
</StackPanel>
,你能预测 “aborder2” 的宽度什么是?
如果你猜“20像素”,你会错的。正确的答案是110像素。
考虑这个XAML:
<StackPanel Orientation="Horizontal">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Name="aborder" Grid.Column="0" Grid.ColumnSpan="2"
Background="Red" Width="200"/>
<Border Name="aborder2" Background="Green"/>
</Grid>
</StackPanel>
什么,你能预测 “aborder2” 的宽度呢?
如果你猜对了20像素或110像素,你会错的。正确答案是200像素。
我无法弄清楚,它让我疯狂。似乎答案应该是显而易见的;显然,自动填充网格列和导致网格畸形的堆叠面板之间存在一些相互作用。但它似乎并没有使有意义 - 无论规则如何规定,这种行为似乎都是任意的。为什么110像素?为什么不是109像素或100像素?我会理解,如果自动调整大小的列未能完全展开或者其他东西,但是让固定宽度的列随机忽略其宽度,则会让我失去开发人员的外壳。
任何帮助或指导灯将不胜感激!
为什么不aborder2得到Grid.Column? – 0x4f3759df
我没有想过要放入一个,因为它应该默认为第0列。我只是测试它,明确设置列似乎没有什么区别。 – pfw
对你有一个答案,但我必须首先回家 –