如何获取在 WinRT 中设置为依赖项对象的所有附加属性



我想要的是检索设置为Depedency Object实例的所有附加属性。

例如。如果我在代码后面有<Button x:Name="myButton" Grid.Row="2">,我希望能够检索已设置为实例的附加属性的列表。类似的东西

List<DependencyProperty> attachedProperties = GetAttachedProperties(myButton);

应该返回一个带有 Grid.RowProperty 附加属性的列表,因为它已显式设置为 myButton 的实例。

我在可视化树调试器工具中执行此操作的方式是扫描包中所有类型的已知程序集并检查类型 DependencyProperty 的静态属性,然后使用一些启发式方法来确定依赖项属性是否已附加 - 我检查是否有映射到依赖项属性的常规 CLR 属性名称(如果没有 - 它通常表示附加属性)。否则 - 如果有 Get 方法 - 它通常指示附加属性。获得所有属性的列表后 - 您可以在DependencyObject上调用ReadLocalValue,如果结果DependencyProperty.UnsetValue - 该属性不会在对象上设置。

如果有人有更好的方法来做到这一点 - 我真的很想听听,因为如果我能简化我的代码,那就太好了。

哦,顺便说一下 - 这不是我会在商店应用程序中发布的代码。我仅将其用于诊断/调试。

好吧,我发现您无法查询附加到依赖项对象的所有属性。附加属性实际上不是实例本身的一部分,而是由注册它的类型提供的。

对于我的问题,我

最初想检索设置为依赖对象的所有附加属性,但后来发现我真正需要的是能够从"Canvas.Left"等字符串和依赖对象(目标)中获取附加属性。我只需要从字符串中获取信息,从 Canvas 查询声明的属性并找到 LeftProperty。然后,我可以使用Target.GetValue(dp)获取或设置其值。

最新更新