我正在尝试找出这些方法之间的区别。在任何情况下,行为是被使用的,并且无法使用附加属性完成相同的功能吗?
不是的。行为基本上只是在附加属性之上提供了更好的抽象。
通过使用Behavior<T>
,您可以直接访问AssociatedObject
,并能够在运行时轻松地附加和分离行为。
使用附加属性也可以实现此功能,但需要添加大量额外的代码。
我倾向于使用行为来添加功能,从而产生可见变化。而我使用附加属性来向对象添加其他信息,随后被其他对象使用。
例如,Grid.Row就是一个很好的附加属性,因为它被Grid使用而不是目标对象。另一方面,自动校正会成为一个很好的行为,因为这将在对象上产生可见变化。
行为是基于附加属性的。这意味着如果您找不到特定的行为 - 您可以编写自己的行为,可以基于Blend提供的行为框架或创建您自己的附加属性...
我一直认为行为是附加属性强大功能的最好证明。只需使用它们,您就可以获得惊人的效果。
这不是答案,但这是我能找到的关于这个主题的最好解释https://web.archive.org/web/20180208143035/http://briannoyesblog.azurewebsites.net/2012/12/20/attached-behaviors-vs-attached-properties-vs-blend-behaviors/
Brian Noyes在他的文章中清楚地描述了每个概念之间的区别。