Obter DependencyProperty por nome para WPF e Silverlight
Você já precisou criar associações a elementos sem conhecer ou ter acesso a sua DependencyProperty até o tempo de execução?
Você já teve a necessidade de obter o DependencyProperty de um elemento em tempo de execução por qualquer motivo? Nesse caso, esse trecho de código pode ser útil para você.
public static DependencyProperty GetDependencyPropertyByName(DependencyObject dependencyObject, string dpName) { return GetDependencyPropertyByName(dependencyObject.GetType(), dpName); } public static DependencyProperty GetDependencyPropertyByName(Type dependencyObjectType, string dpName) { DependencyProperty dp = null; var fieldInfo = dependencyObjectType.GetField(dpName, BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); if (fieldInfo != null) { dp = fieldInfo.GetValue(null) as DependencyProperty; } return dp; }
O uso é simples. Um método permite que você passe a instância do objeto de dependência, além da representação de cadeia de caracteres do DependencyProperty no objeto. O outro método permite que você obtenha um objeto de dependência de um Type. A coisa mais importante a lembrar é que o parâmetro dpName é o nome completo do DependencyProperty conforme ele é declarado, não o nome da propriedade que você referencia no código ou XAML.
Considere o seguinte exemplo:
var usingInstance = GetDependencyPropertyByName(_button, "ContentProperty"); var usingType = GetDependencyPropertyByName(typeof(Button), "ContentProperty");
Como você pode ver, o parâmetro dpName é o nome real da DependencyProperty (ContentProperty) e não o nome da propriedade (Content). Agora que você tem a DepedencyProperty, pode obter todos os tipos de metadados sobre a propriedade e até mesmo criar associações de dados dinâmicas. Espero que isso seja útil.