WPF中依赖项属性和附加属性之间有什么区别?

(自定义)依赖项属性和WPF中的附加属性之间有什么区别? 每个的用途是什么? 这些实现通常如何不同?

附加属性是一种依赖属性。 不同之处在于如何使用它们。

对于附加的属性,该属性被定义在与它所使用的类不同的类上。 这通常用于布局。 很好的例子是Panel.ZIndex或Grid.Row – 你将它应用于一个控件(即:Button),但它实际上是在Panel或Grid中定义的。 该属性“附加”到button的实例。

这允许容器例如创build可以在任何UI元素上使用的属性。

至于实现差异 – 基本上只是在定义属性时使用Register与RegisterAttached的问题。

附加的属性基本上是为容器元素的意思。如果你有一个网格,你现在有grid.row,这被认为是一个网格元素的附加属性。你也可以在texbox,button等中使用这个属性来设置它放在网格中。

依赖属性就像属性基本上属于某个其他类,并在其他类中使用。 例如:像你有一个矩形这里的高度和宽度是矩形的常规属性,但左侧和顶部是依赖属性,因为它属于Canvass类。

我认为你可以在类中定义附加属性,或者你可以在另一个类中定义它。 我们总是可以使用附加的属性来扩展标准的微软控件。 但是依赖属性,你可以在你自己的自定义控件中定义它。 例如,您可以从标准控件inheritance控件,并在您自己的控件中定义一个依赖项属性并使用它。 这相当于定义一个附加属性,并在标准控件中使用这个附加属性。

附加属性是一种特殊的DependencyProperties。 它们允许你给一个对这个值一无所知的对象附加一个值。 这个概念的一个很好的例子是布局面板。 每个布局面板需要不同的数据来alignment其子元素。 Canvas需要Top和Left,DockPanel需要Dock等。由于您可以编写自己的布局面板,所以列表是无限的。 所以你看,在所有的WPF控件上都不可能拥有所有这些属性。 解决scheme是附加属性。 它们是由在特定环境下需要来自另一个控件的数据的控件定义的。 例如,由父布局面板alignment的元素。