Все още работя върху автоматизирано тестване на 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 обаче винаги е невярно и полученият lsit е празен. Без проверката „IsAttached“ получавам хубав списък със свойства, но без нито едно от очакваните прикачени свойства.
Не отразява ли списъка с прикачените свойства по този начин?
Мисля, че вече разбирам по-добре използването на прикачените свойства. Въпреки това всъщност не можах да разреша проблема си. Споменатият локален изброител получава само свойствата, които са зададени на обекта локално, а не всички свойства, налични за обекта.
Моля, позволете ми да обясня какво възнамерявам: Започвам само с името на прикачен имот... Първо трябва да проверя дали този прикачен имот съществува (което вероятно означава, че е регистриран, нали? ). След това искам да извлека стойността на прикаченото свойство, която може да бъде локално зададената стойност за моя обект (ако е зададен такъв) или стойността по подразбиране в противен случай.
В момента не знам как да проверя дали съществува прикачено свойство. Може би има някаква функция, предоставяща списък на всички налични прикачени свойства? Мога да го използвам за валидиране на дадено име на свойство и за извличане на съответния обект на свойство.