2010-02-08 10 views
11

Situación: Tengo una cadena que representa el nombre de DependencyProperty de un TextBox en Silverlight. Por ejemplo: "TextProperty". Necesito obtener una referencia a la propiedad de texto actual de TextBox, que es una DependencyProperty.¿Cómo obtener una DependencyProperty por nombre en Silverlight?

Pregunta: ¿cómo obtengo una referencia a DependencyProperty (en C#) si todo lo que obtengo es el nombre de la propiedad?

Cosas como DependencyPropertyDescriptor no están disponibles en Silverlight. Parece que tengo que recurrir a la reflexión para obtener la referencia. ¿Alguna sugerencia?

Respuesta

4

para responder a mi propia pregunta: En efecto, la reflexión parece ser el camino a seguir aquí:

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); 

Esto hace el trabajo para mí. :)

+6

Si su control hereda algunas de sus DependencyPropertys, como ComboBox.SelectedItemProperty que en realidad es Primitives.Selector. SelectedItemProperty o RadioButton.IsCheckedProperty que en realidad es Primitives.ToggleButton.IsCheckedProperty, entonces deberá usar FieldInfo field = type.GetField ("MyProperty", BindingFlags.FlattenHierarchy); Terminé usando FieldInfo field = type.GetField ("MyProperty", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); – Scott

13

Tendrá reflexión para esto: -

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; 
} 

Uso: -

var dp = GetDependencyProperty(typeof(TextBox), "TextProperty"); 
+1

Ganked [.] (Http://yourcodeisnowmycode.lol) – Will

Cuestiones relacionadas