2010-02-08 6 views
11

Tình huống: Tôi có một chuỗi đại diện cho tên của một DependencyProperty của một TextBox trong Silverlight. Ví dụ: "TextProperty". Tôi cần để có được một tham chiếu đến TextProperty thực tế của TextBox, đó là một DependencyProperty.Làm thế nào để có được một DependencyProperty theo tên trong Silverlight?

Câu hỏi: làm cách nào để tôi tham chiếu đến DependencyProperty (trong C#) nếu tất cả những gì tôi nhận được là tên của thuộc tính?

Những thứ như DependencyPropertyDescriptor không khả dụng trong Silverlight. Có vẻ như tôi phải nghỉ mát để phản ánh để có được tham chiếu. Bất kỳ đề xuất?

Trả lời

4

Để trả lời câu hỏi của riêng tôi: Trên thực tế, phản ánh vẻ là con đường để đi ở đây:

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

này không được công việc cho tôi. :)

+6

Nếu kiểm soát của bạn được thừa hưởng một số DependencyPropertys của nó, giống như ComboBox.SelectedItemProperty mà thực sự là Primitives.Selector. SelectedItemProperty hoặc RadioButton.IsCheckedProperty mà thực sự là Primitives.ToggleButton.IsCheckedProperty sau đó bạn sẽ phải sử dụng FieldInfo field = type.GetField ("MyProperty", BindingFlags.FlattenHierarchy); Tôi đã kết thúc bằng cách sử dụng FieldInfo field = type.GetField ("MyProperty", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); – Scott

13

Bạn sẽ cần phải suy nghĩ cho việc này: -

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

Cách sử dụng: -

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

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