【问题标题】:How to get a DependencyProperty by name in Silverlight?如何在 Silverlight 中按名称获取 DependencyProperty?
【发布时间】:2010-02-08 09:06:57
【问题描述】:

情况:我有一个字符串,它表示 Silverlight 中 TextBox 的 DependencyProperty 的名称。例如:“文本属性”。我需要获取对 TextBox 的实际 TextProperty 的引用,它是一个 DependencyProperty。

问题:如果我得到的只是属性的名称,我如何获得对 DependencyProperty(在 C# 中)的引用?

像 DependencyPropertyDescriptor 这样的东西在 Silverlight 中不可用。看来我必须求助于反思才能获得参考。有什么建议吗?

【问题讨论】:

    标签: c# silverlight dependency-properties


    【解决方案1】:

    您需要对此进行反思:-

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

    【讨论】:

      【解决方案2】:

      回答我自己的问题:确实,反思似乎是要走的路:

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

      这对我有用。 :)

      【讨论】:

      • 如果您的控件继承了它的一些 DependencyProperty,例如 ComboBox.SelectedItemProperty 实际上是 Primitives.Selector.SelectedItemProperty 或 RadioButton.IsCheckedProperty 实际上是 Primitives.ToggleButton.IsCheckedProperty 那么您将不得不使用 FieldInfo 字段 = type.GetField("MyProperty", BindingFlags.FlattenHierarchy);我最终使用 FieldInfo field = type.GetField("MyProperty", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
      猜你喜欢
      • 2011-09-11
      • 2016-05-17
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 2013-07-28
      • 1970-01-01
      • 2012-09-16
      相关资源
      最近更新 更多