我知道WPF Grid中的所有元素都使用Grid.Row
附加属性放入行中。如果Grid中的元素未设置Row附加属性,则默认情况下该属性设置为零。请参阅下面的RowProperty
定义:
//Grid.cs
public static readonly DependencyProperty RowProperty =
DependencyProperty.RegisterAttached(
"Row",
typeof(int),
typeof(Grid),
new FrameworkPropertyMetadata(
0,
new PropertyChangedCallback(OnCellAttachedPropertyChanged)),
new ValidateValueCallback(IsIntValueNotNegative));
到目前为止,我对这个机制很了解。但是,当将Grid中元素的Grid.Row附加属性设置为大于RowDefinition
count的值时,该元素将放在最后一行中。这是我不明白的。如何将RowProperty
强制转换为Grid的RowDefinition计数?
如果行超出范围,则RowProperty DP定义中没有CoerceValueCallback
来强制值到行计数。
为了说明我想说的话:
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Label Content="My Content" Grid.Row="10"/>
</Grid>
标签放在最后一行(第二个位置),即使我将其Row设置为10.编译器不会抛出任何异常。这背后的魔力是什么?感谢。