2010-02-08 10 views
11

Situazione: Ho una stringa che rappresenta il nome di DependencyProperty di un controllo TextBox in Silverlight. Ad esempio: "TextProperty". Ho bisogno di ottenere un riferimento alla proprietà TextProperty del TextBox, che è DependencyProperty.Come ottenere una proprietà di dipendenza in base al nome in Silverlight?

Domanda: come ottenere un riferimento a una proprietà di dipendenza (in C#) se tutto ciò che ho ottenuto è il nome della proprietà?

Cose come DependencyPropertyDescriptor non sono disponibili in Silverlight. Sembra che devo ricorrere alla riflessione per ottenere il riferimento. Eventuali suggerimenti?

risposta

4

Per rispondere alla mia domanda: In effetti, la riflessione sembra essere il modo di andare qui:

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

Questo fa il lavoro per me. :)

+6

Se il vostro controllo eredita alcune delle sue DependencyPropertys, come ComboBox.SelectedItemProperty che in realtà è Primitives.Selector. SelectedItemProperty o RadioButton.IsCheckedProperty che in realtà è Primitives.ToggleButton.IsCheckedProperty, quindi sarà necessario utilizzare FieldInfo field = type.GetField ("MyProperty", BindingFlags.FlattenHierarchy); Ho finito per utilizzare FieldInfo field = type.GetField ("MyProperty", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); – Scott

13

Avrete bisogno di riflessione per questo: -

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

Problemi correlati