2

我正在阅读有关附加属性的信息,并且我刚刚读到它们可以设置为类似于以下内容:

Grid.SetRow(myElement, 0);

如果这是一个静态方法,Grid.SetRow()现在Grid它应该怎么myElement放进去呢?或者它是否以某种方式myElement与第 0 行相关联,所以当有一个新Grid对象包括myElement时,它可以检查myElement应该去哪一行?

4

2 回答 2

3

设置附加属性时,值仅存储在元素中,而不是附加属性所属的类型。

例如,附加的行属性是这样实现的:

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>依赖对象内部(尽管实际上它要复杂得多),您可以使用SetValueand访问它GetValue

所以该值只存储在依赖对象本身的内部。现在,当 Grid 呈现自身时,它将遍历其子级以调用其测量和布局例程。它还将要求Grid.GetRow每个孩子查看是否设置了附加的行属性,并在其自己的布局阶段相应地尊重这些选择。

于 2013-03-03T23:20:58.753 回答
1

如果这是一个静态方法,那么 Grid.SetRow() 现在应该如何将 myElement 放入哪个 Grid 中?

它不知道

或者它是否以某种方式将 myElement 与第 0 行相关联,所以当有一个包含 myElement 的新 Grid 对象时,它可以检查 myElement 应该去哪一行?

对,就是这样

于 2013-03-03T23:23:41.167 回答