我正在阅读有关附加属性的信息,并且我刚刚读到它们可以设置为类似于以下内容:
Grid.SetRow(myElement, 0);
如果这是一个静态方法,Grid.SetRow()
现在Grid
它应该怎么myElement
放进去呢?或者它是否以某种方式myElement
与第 0 行相关联,所以当有一个新Grid
对象包括myElement
时,它可以检查myElement
应该去哪一行?
我正在阅读有关附加属性的信息,并且我刚刚读到它们可以设置为类似于以下内容:
Grid.SetRow(myElement, 0);
如果这是一个静态方法,Grid.SetRow()
现在Grid
它应该怎么myElement
放进去呢?或者它是否以某种方式myElement
与第 0 行相关联,所以当有一个新Grid
对象包括myElement
时,它可以检查myElement
应该去哪一行?
设置附加属性时,值仅存储在元素中,而不是附加属性所属的类型。
例如,附加的行属性是这样实现的:
public static readonly DependencyProperty RowProperty = ...;
public static void SetRow(UIElement element, int value)
{
element.SetValue(RowProperty, value);
}
public static int GetRow(UIElement element)
{
return (int)element.GetValue(RowProperty);
}
因此,当您调用 时Grid.SetRow
,会在内部element.SetValue
调用。作为element
一个依赖对象,它可以存储那些额外的属性。您可以将其想象为Dictionary<DependencyProperty, object>
依赖对象内部(尽管实际上它要复杂得多),您可以使用SetValue
and访问它GetValue
。
所以该值只存储在依赖对象本身的内部。现在,当 Grid 呈现自身时,它将遍历其子级以调用其测量和布局例程。它还将要求Grid.GetRow
每个孩子查看是否设置了附加的行属性,并在其自己的布局阶段相应地尊重这些选择。
如果这是一个静态方法,那么 Grid.SetRow() 现在应该如何将 myElement 放入哪个 Grid 中?
它不知道
或者它是否以某种方式将 myElement 与第 0 行相关联,所以当有一个包含 myElement 的新 Grid 对象时,它可以检查 myElement 应该去哪一行?
对,就是这样