(我对这个概念完全陌生,所以我可能会问一些非常基本的问题。)
使用以下代码注册依赖属性:
public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata);
从逻辑上讲,它只是将属性名称与所有者类型相关联。
因此,如果我有多个所有者类型的实例,并且每个实例都将 DP 设置为不同的值。
如何存储这些值?
更新 1 - 2013 年 10 月 30 日上午 10:04
我从这里了解了附加属性:http ://wpftutorial.net/DependencyProperties.html
附加属性
附加属性是一种特殊的 DependencyProperties。它们允许您将值附加到对该值一无所知的对象。
这个概念的一个很好的例子是布局面板。每个布局面板都需要不同的数据来对齐其子元素。Canvas 需要 Top 和 Left,DockPanel 需要 Dock 等。由于您可以编写自己的布局面板,因此列表是无限的。所以你看,不可能在所有 WPF 控件上都拥有所有这些属性。
解决方案是附加属性。它们由在特定上下文中需要来自另一个控件的数据的控件定义。例如,由父布局面板对齐的元素。
所以在下面的代码片段中:
<Canvas>
<Button Canvas.Top="20" Canvas.Left="20" Content="Click me!"/>
<Button Canvas.Top="40" Canvas.Left="20" Content="Click me!"/>
</Canvas>
显然我们不能将所有的对齐属性,如Top,Left给 Button。所以 Canvas 定义了这样的属性,它们被“附加”到 Button 控件。
当 Canvas.Top 在 XAML 中被指定为 Button 的“属性”时,它将调用在 Canvas 类型中定义的 SetTop() 方法。并且 Button 作为元素参数传入。 我认为这就是 Canvas 知道哪个 Button 使用哪个 Top 值的方式。
public static void SetTop(UIElement element, double length);
但我不明白为什么附加属性必须是依赖属性? 他们之间有什么联系?
谢谢!