Список свойств объекта DependencyObject? - PullRequest
2 голосов
/ 27 сентября 2011

Я получил коллекцию пользовательских объектов DependencyObject, которые я создал. Но я думаю, что не имеет значения, откуда берется DependencyObject. Дело в том, что я хотел бы получить список его свойств, но когда я смотрю на документ C # для DependencyObject, я не могу найти ничего, связанного со свойствами ...: /

Как я могу это сделать?

(примечание: у меня есть поля (string, int, etcetc ..) как свойства в моем DependencyObject, и я тоже получил DependencyProperties. В конечном счете, я хотел бы перечислить только DependencyProperties, но это не обязательство!)

Спасибо заранее и прошу прощения за мой язык, я французский -_- (и прошу прощения за моего президента тоже ...)

1 Ответ

3 голосов
/ 27 сентября 2011

Вы можете сделать это с помощью отражения, поскольку свойства DependencyProperties (обычно?) Хранятся в открытых статических полях типа DependencyProperty:

private static IEnumerable<DependencyProperty> GetDependencyProperties(DependencyObject o)
{
    return from field in o.GetType().GetFields(BindingFlags.Public | 
                                               BindingFlags.FlattenHierarchy | 
                                               BindingFlags.Static)
           where field.FieldType == typeof(DependencyProperty)
           select (DependencyProperty)field.GetValue(null);
}

Используется FlattenHierarchy для возврата всех свойств DependencyProperties, в том числе определенных в родительских классах. Если вы хотите, чтобы только DependencyProperties определяли непосредственно в o s классе, удалите флаг FlattenHierarchy.

...