我正在阅读有关附加属性的内容,并且我刚刚读到可以使用类似于以下内容的内容来设置它们:
Grid.SetRow(myElement, 0);
如果这是静态方法,那么 Grid.SetRow()
现在应该将 myElement
放入哪个 Grid
中?或者它的工作方式是否以某种方式将 myElement
与第 0 行关联起来,因此当有一个包含 myElement
的新 Grid
对象时,它可以检查 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
访问它和GetValue
.
因此该值仅存储在依赖对象本身内部。现在,当网格呈现自身时,它将迭代其子级以调用其测量和布局例程。它还会调用 Grid.GetRow
对于每个子级,查看是否设置了附加的行属性,并相应地在其自己的布局阶段尊重这些选择。
关于c# - 如何以编程方式设置附加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15192099/