为什么在XAML中不调用附加属性Set和Get静态方法?

6
我已经在我的附加属性SetXXX和GetXXX静态方法上设置了断点。 在Xaml中,我已经为附加属性分配了值。 但是,我期望调用Set或Get静态方法,但它们没有被调用。 附加属性按预期工作,如果我在代码中调用SetXXX和GetXXX方法,则按预期工作。
为什么在从Xaml设置时不调用这些方法?
JD.
2个回答

9

XAML在处理附加属性时不能理解普通的属性getter和setter。相反,它直接使用DependencyObject上的底层API,即GetValueSetValue方法。


6

JaredPar所解释的, 当您使用XAML时,GetXXX/SetXXX方法不会被调用。

但我想补充一点:

如果您需要在代码中跟踪附加属性的更改,则应使用元数据。您可以在元数据中设置回调以在属性更改时触发它,并在代码中跟踪它。


3
针对第一点,我移除了GetXXX和SetXXX方法后,出现了XAMLParserException错误,提示“Attached property does not exist in XML name space”。因此看起来这些方法是必须要存在的? - JD.
1
@JD:你说得对 - 这些属性需要在设计器中工作时存在。这在这里有提到:http://msdn.microsoft.com/en-us/library/ms749011.aspx#custom 我已经编辑过了。然而,元数据回调是跟踪属性更改的正确方法,因为XAML(以及绑定系统)永远不会调用Set/Get方法。 - Reed Copsey
谢谢,经过你和JaredPar的解释,现在看起来很有道理。 - JD.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接