在本例中,第一列得到100,接下来的两列各得到50,这是预期的行为。
<Grid Width="200" Height="200">
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="100" />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border Background="Red" Grid.Column="0" />
<Border Background="Yellow" Grid.Column="1" />
<Border Background="Blue" Grid.Column="2" />
</Grid>

如果我将MinWidth移到中间一列...
<Grid Width="200" Height="200">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition MinWidth="100" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border Background="Red" Grid.Column="0" />
<Border Background="Yellow" Grid.Column="1" />
<Border Background="Blue" Grid.Column="2" />
</Grid>..。然后第一列得到33.3,最后一列得到66.6,这看起来很奇怪。不确定为什么这会改变网格的行为。我预计第0列和第2列将分别获得50。

更新:我理解为什么会发生这种情况,但我想知道是否有人认为这是一个bug (特别是因为Silverlight中的行为是不同的)
发布于 2011-10-21 09:09:51
只有当您有一个中心列时,才会出现这个问题,这意味着您为网格定义了奇数个列。我不确定为什么会发生这种情况,我也不认为这是故意的行为。但是,另一种解决方法是始终确保定义了偶数个列,即使您只使用奇数个列(使用MaxWidth=0隐藏额外的列)。
<Grid Width="200" Height="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" MinWidth="100"/>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" MaxWidth="0"/> <!--Workaround-->
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Background="Red"/>
<Border Grid.Column="1" Background="Yellow"/>
<Border Grid.Column="2" Background="Blue"/>
</Grid>这里的缺点是您的网格中有一个空列。这样做的好处是您可以获得预期的空间分布行为。
发布于 2011-09-27 11:03:43
只是更新一下..我尝试过使用XAML3.5/4.0Silverlight3/4组合的.NET代码片段,但对于第二个示例仍然无法获得相同的宽度……
这个XAML是解决这个问题的唯一方法:
<Grid Width="200" Height="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".5*" />
<ColumnDefinition MinWidth="100" />
<ColumnDefinition Width=".5*" />
</Grid.ColumnDefinitions>
<Border Background="Red" Grid.Column="0" />
<Border Background="Yellow" Grid.Column="1" />
<Border Background="Blue" Grid.Column="2" />
</Grid>你们这边有什么进展吗?
发布于 2011-10-02 05:25:25
我不确定问题到底是什么,但这两个网格的行为符合您的期望。我更喜欢第二列而不是第一列,因为它显式地指定第一列和第三列应该平等地占用剩余空间。
<Grid Width="200" Height="200">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition MinWidth="100" Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border Background="Red" Grid.Column="0" />
<Border Background="Yellow" Grid.Column="1" />
<Border Background="Blue" Grid.Column="2" />
</Grid>
<Grid Width="200" Height="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition MinWidth="100" Width="Auto" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Border Background="Red" Grid.Column="0" />
<Border Background="Yellow" Grid.Column="1" />
<Border Background="Blue" Grid.Column="2" />
</Grid>https://stackoverflow.com/questions/3718202
复制相似问题