Как получить DependencyProperty по имени в Silverlight? - PullRequest
11 голосов
/ 08 февраля 2010

Ситуация: у меня есть строка, которая представляет имя свойства DependencyProperty TextBox в Silverlight. Например: «TextProperty». Мне нужно получить ссылку на фактический TextProperty TextBox, который является DependencyProperty.

Вопрос: как получить ссылку на DependencyProperty (в C #), если все, что я получил, это имя свойства?

Такие вещи, как DependencyPropertyDescriptor, недоступны в Silverlight. Кажется, я должен прибегнуть к размышлению, чтобы получить ссылку. Есть предложения?

Ответы [ 2 ]

13 голосов
/ 08 февраля 2010

Для этого вам понадобится рефлексия: -

 public static DependencyProperty GetDependencyProperty(Type type, string name)
 {
     FieldInfo fieldInfo = type.GetField(name, BindingFlags.Public | BindingFlags.Static);
     return (fieldInfo != null) ? (DependencyProperty)fieldInfo.GetValue(null) : null;
 }

Использование: -

 var dp = GetDependencyProperty(typeof(TextBox), "TextProperty");
4 голосов
/ 08 февраля 2010

Чтобы ответить на мой собственный вопрос: действительно, рефлексия, кажется, путь сюда:

Control control = <create some control with a property called MyProperty here>;
Type type = control.GetType();    
FieldInfo field = type.GetField("MyProperty");
DependencyProperty dp = (DependencyProperty)field.GetValue(control);

Это делает работу за меня. :)

...