在这个例子中,第一列得到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个。
更新:我理解为什么会发生这种情况,但是想知道是否有人认为这是一个错误(特别是因为Silverlight中的行为不同)
答案 0 :(得分:3)
只有当您有一个中心列时才会出现此问题,这意味着您为网格定义了奇数列。我不确定为什么会这样,我也不认为这是故意的行为。但是,另一种解决方法是始终确保定义偶数列,即使您只使用奇数列(使用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>
这里的缺点是你的网格中有一个空列。优点是您可以获得预期的空间分布行为。
答案 1 :(得分:1)
只是一个更新..我已尝试使用.NET 3.5 / 4.0 Silverlight 3/4的组合的XAML片段,但仍然无法获得第二个示例的相等宽度...
此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>
你身边的人有任何更新吗?
答案 2 :(得分:0)
不确定问题究竟是什么,但这两个网格的行为方式与您希望的一样。我比第一个更喜欢第二个,因为它明确指定第一列和第三列应该平等地占用剩余空间。
<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>
答案 3 :(得分:0)
如果您想要相等的宽度,则无法使用自动。您必须将每列的宽度明确设置为所需的比例,对于每列需要“.3 *”的3列。 如果计算的宽度小于MinWidth,则MinWidth优先。