Я все еще работаю над автоматическим тестированием приложений WPF. Мне нужно получить доступ к свойствам по имени, чтобы добиться этого.
В настоящее время меня интересуют прикрепленные свойства элементов управления WPF. Я попытался перебрать все свойства объекта Button, думая, что смогу найти и прикрепленные свойства. Но я не мог их найти.
Итак, я проверил с помощью Snoop, и в нем перечислено множество свойств, таких как «KeyboardNavigation.AcceptsReturn» и «ToolTipManager.ToolTipKey», которые должны быть присоединены к свойствам AFAIK.
Я использовал следующий код для создания списка имен (прикрепленных) свойств объекта Button:
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» я получаю хороший список свойств, но без каких-либо ожидаемых присоединенных свойств.
Не отражает ли список прикрепленных свойств таким образом?
Думаю, теперь я лучше понимаю использование прикрепленных свойств. Однако на самом деле я не мог решить свою проблему. Упомянутый локальный перечислитель получает только те свойства, которые заданы для объекта локально, а не все свойства, доступные для объекта.
Пожалуйста, позвольте мне объяснить, что я имею в виду: я начинаю с имени только прикрепленного свойства... Сначала мне нужно проверить, существует ли это присоединенное свойство (что, вероятно, означает, зарегистрировано ли оно, верно? ). Затем я хочу получить значение прикрепленного свойства, которое может быть локально заданным значением для моего объекта (если оно было установлено) или значением по умолчанию в противном случае.
В настоящее время я не знаю, как проверить, существует ли прикрепленное свойство. Может быть, есть какая-то функция, предоставляющая список всех доступных прикрепленных свойств? Я мог бы использовать его для проверки заданного имени свойства и для получения соответствующего объекта свойства.