我仍在致力于 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”检查,我会得到一个很好的属性列表,但没有任何预期的附加属性。
不反映以这种方式列出附加属性吗?
我想我现在更好地理解了附加属性的用法。但是我实际上无法解决我的问题。提到的本地枚举器仅获取在本地对象上设置的属性,而不是对象可用的所有属性。
请让我解释一下我的意图:我仅从附加属性的名称开始...我首先需要检查该附加属性是否存在(这可能意味着它是否已注册,对吗?)。然后我想获取附加属性的值,它可能是我的对象的本地设置值(如果设置了一个)或默认值。
目前我不知道如何检查附加属性是否存在。是否有一些功能提供所有可用附加属性的列表?我可以使用它来验证给定的属性名称并获取相应的属性对象。