我在http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/5c7f5cdf-4351-4969-990f-29ce9ec84b87/问了一个问题,但对于一个奇怪的行为仍然缺乏很好的解释。寻找WPF Grid GridSpan行为的解释
运行以下XAML显示列0中的TextBlock宽度大于100,即使列设置为宽度100。我认为这种奇怪可能与它被包装在ScrollViewer中有关,但我不知道为什么。如果我在列上设置MaxWidth,它工作正常,但设置宽度不。
- 为什么列0的宽度没有被遵守?
- 当您移除滚动查看器时,为什么列大小的行为会有所不同?
我很感激任何解释!这对我来说是一个真正的难题。
<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Width="300">
<ScrollViewer HorizontalScrollBarVisibility="Auto" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock x:Name="textBlock" Text="{Binding ElementName=textBlock, Path=ActualWidth}" />
<TextBlock Text="column 1" Grid.Column="1" />
<TextBlock Grid.Row="1" Grid.ColumnSpan="3" Text="text here that is wider than the first two columns combined" />
</Grid>
</ScrollViewer>
</Window>
谢谢你的深思熟虑的答案。正如我在此主题中对早期答案的评论中所说的那样,这让我怀疑:1.为什么MaxWidth的宽度超过固定宽度? 2.您认为这是网格控件还是MSDN网格控件文档中的缺陷?我没有看到MSDN中接近描述此行为的任何内容。我很想将此作为缺陷记录下来。 – 2011-04-18 18:19:45
这不是“宽限”宽度超过MaxWidth的问题。一个是约束条件,另一个是最初的初始值。如果存在错误,那么ColSpan附加属性会影响布局,这是天真的方式。在ColSpan项目出现之前,第三列完全没有宽度,即使宽度为“*”,当没有足够的宽度以适合ColSpan项目时,网格开始将列从左向右扩展。直觉上,这感觉不对,但我不会说它是一个错误。这确实是一个漏洞抽象。 – 2011-04-29 22:26:57
MS可以更改布局行为以查找宽度为“*”的列以首先展开(在将列从左向右扩展之前)。但是,根据当前行为,可能会有很多代码。微软可能会将其定义为标准并继续前进。但是因为这很违反直觉,看起来错误,所以他们可能会让我们吃惊。 – 2011-04-29 22:34:22