2010-02-08 12 views
11

स्थिति: मेरे पास एक स्ट्रिंग है जो Silverlight में टेक्स्टबॉक्स के निर्भरता प्रॉपर्टी के नाम का प्रतिनिधित्व करती है। उदाहरण के लिए: "टेक्स्टप्रोपर्टी"। मुझे टेक्स्टबॉक्स की वास्तविक टेक्स्टप्रोपर्टी का संदर्भ प्राप्त करने की आवश्यकता है, जो एक निर्भरता प्रॉपर्टी है।सिल्वरलाइट में नाम से निर्भरताप्रॉपर्टी कैसे प्राप्त करें?

प्रश्न: मुझे निर्भरता प्रॉपर्टी (सी # में) का संदर्भ कैसे प्राप्त होता है यदि मुझे जो कुछ मिला वह संपत्ति का नाम है?

निर्भरताप्रॉपर्टी डिस्क्रिप्टर जैसी चीजें सिल्वरलाइट में उपलब्ध नहीं हैं। ऐसा लगता है कि मुझे संदर्भ प्राप्त करने के लिए प्रतिबिंब का सहारा लेना है। कोई सुझाव?

उत्तर

4

अपने ही सवाल का जवाब करने के लिए:

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

यह मेरे लिए काम करता है: दरअसल, प्रतिबिंब यहां जाने का रास्ता हो रहा है। :)

+6

हैं, तो ComboBox.SelectedItemProperty की तरह वास्तव में Primitives.Selector है। चयनित ItemProperty या RadioButton.IscheckedProperty जो वास्तव में Primitives है। ToggleButton.IscheckedProperty तो आपको FieldInfo फ़ील्ड = type.GetField ("MyProperty", BindingFlags.FlattenHierarchy) का उपयोग करना होगा; मैं FieldInfo फ़ील्ड = type.GetField ("MyProperty", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) का उपयोग करके समाप्त हो गया; – Scott

13

आप इस के लिए प्रतिबिंब की आवश्यकता होगी: -

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

उपयोग: - अपने नियंत्रण अपने DependencyPropertys के कुछ विरासत में

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

गैंक [।] (Http://yourcodeisnowmycode.lol) – Will

संबंधित मुद्दे