当值大于它时,Grid.Row附加属性如何将其值强制转换为行计数?

时间:2015-11-19 08:52:04

标签: c# wpf xaml grid dependency-properties

我知道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.编译器不会抛出任何异常。这背后的魔力是什么?感谢。

0 个答案:

没有答案