c# - 如何以编程方式设置附加属性?

标签 c# wpf attached-properties

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

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/

相关文章:

c# - 找不到程序集

c# - 如何使用 Linq 从父列表中选择和分组复杂的子对象

c# - 如何从 SHA-1 字节数组生成 Guid?

c# - 覆盖静态构造函数中的元数据?

c# - 在 DependencyProperty 中执行函数

wpf - 自定义附加命令

wpf - 将文本绑定(bind)到附加属性

c# - Parallel.Foreach 循环,与显式 throw 语句的行为不一致

如果选择了组合框项目,C# WPF 更改网格可见性

wpf - 为什么 WPF 将附加属性用于诸如在网格中定位之类的事情?