好吧,斯塔克斯,我花了好几个小时研究这个问题,我想知道是否有人有一个明确的答案。
对于我所做的所有研究,我在Silverlight中找不到任何区别。现在,在您跳转并告诉我.Register用于将dp附加到另一个类之前,请尝试使用.RegisterAttached实现附加的依赖属性。我没有发现一点差别,所以我不知道差别是什么。
此外,在我的具体案例中,我试图扩展grid类的功能,并希望为它提供一些额外的属性。因此,我尝试将传递.RegisterAttachedDependencyProperty.Register()(实现类)作为ownerType参数列出,这似乎也没什么区别……(我相信当我从同一个名称空间传递两个自定义类时,这确实会产生影响。但是,当传递Microsoft定义的类与自定义类时,我总是让它作为自定义类的DP显示在XAML中。)
关于这个话题的任何澄清都将是非常感谢的,因为我坐在这里挠头,想知道是否有任何区别,或者微软是不是又一次和我搞砸了。

最佳答案

鉴于评论中的讨论,我将尝试用通俗易懂的英语来做这一点:
附加的依赖项属性和依赖项属性(因此在.register和.registerAttached之间)之间的主要区别是,registerAttached允许将值分配给任何依赖项对象,而register只允许将值附加到作为OwnerType参数。
正如Haris Hasan提到的(注释线程中的深),您的示例使用的是唯一允许的类型(即CustomControl),并且没有显示附加的版本可以被分配给任何依赖对象。
例如,可以用附加的依赖性属性(但不是纯DP)来实现这一点:

<Grid local:AttacherClass.ADP1="1" x:Name="LayoutRoot" Background="White">
</Grid>

我能找到的ADP的最好参考是:
我们使用adps作为本地化系统的基础,这样在加载期间,翻译就可以寄生在对象上,而不是使用长得吓人的绑定。不能用DPS来做
更新:
我还要澄清,父限制适用于基于xaml的属性使用。从代码来看,父限制显然不适用。

关于c# - Silverlight中附加和非附加依赖项属性之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6843877/

10-13 06:52