我正在阅读附加属性,我刚刚读到它们可以设置类似于以下内容:
Grid.SetRow(myElement, 0);
如果这是一种静态方法,Grid.SetRow()
现在Grid
应该将myElement
放入哪个myElement
?或者它以某种方式工作,以某种方式将Grid
与第0行相关联,因此当有一个新的myElement
对象包含myElement
时,它只能检查哪一行{{1}}应该去吗?
答案 0 :(得分:3)
设置附加属性时,该值仅存储在元素中,而不是附加属性所属的类型。
例如,附加的row属性实现如下:
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
和GetValue
来访问它。
因此该值仅存储在依赖项对象本身内。现在,当Grid渲染自身时,它将遍历其子节点以调用其测量和布局例程。它还会为每个子节点调用Grid.GetRow
以查看是否已设置附加的行属性,并相应地在其自己的布局阶段尊重这些选择。
答案 1 :(得分:1)
如果这是一个静态方法,Grid.SetRow()现在如何将myElement放入哪个Grid?
它不知道
或者它是否以某种方式将myElement与第0行相关联,所以当有一个包含myElement的新Grid对象时,它可以检查myElement应该去哪一行?
是的,完全