【发布时间】:2013-04-15 15:31:37
【问题描述】:
我仍在致力于 WPF 应用程序的自动化测试。我需要按名称访问属性来实现这一点。
目前我想知道 WPF 控件的附加属性。我试图遍历 Button 对象的所有属性,认为我也可以找到附加属性。但我找不到它们。
所以我使用 Snoop 进行了检查,它列出了许多属性,如“KeyboardNavigation.AcceptsReturn”和“ToolTipManager.ToolTipKey”,它们应该附加属性 AFAIK。
我使用以下代码创建了按钮“对象”的(附加)属性名称列表:
Type^ type = object->GetType();
while (type)
{
array<FieldInfo^>^ fi = type->GetFields(BindingFlags::DeclaredOnly | BindingFlags::Static | BindingFlags::Public);
for (int i=0; i<fi->Length; i++)
{
DependencyProperty^ dp = dynamic_cast<DependencyProperty^>(fi[i]->GetValue(object));
if (dp)
{
DependencyPropertyDescriptor^ dpd = DependencyPropertyDescriptor::FromProperty(dp, type);
if (dpd->IsAttached)
{
propertyNames->Add(fi[i]->Name);
}
}
}
type = type->BaseType;
}
但是 IsAttached 始终为 false 并且生成的 lsit 为空。如果没有“IsAttached”检查,我会得到一个很好的属性列表,但没有任何预期的附加属性。
不反映以这种方式列出附加属性吗?
我想我现在更好地理解了附加属性的用法。但是我实际上无法解决我的问题。 提到的本地枚举器仅获取在本地对象上设置的属性,而不是所有对象可用的属性。
请让我解释一下我的意图:我仅从附加属性的 name 开始...我首先需要检查该附加属性是否存在(这可能意味着它是否已注册, 对?)。然后我想获取附加属性的值,它可能是我的对象的本地设置值(如果设置了)或默认值。
目前我不知道如何检查附加属性是否存在。是否有一些函数提供了 all 可用附加属性的列表?我可以使用它来验证给定的属性名称并获取相应的属性对象。
【问题讨论】:
标签: wpf dependency-properties attached-properties system.reflection snoop