Tengo un poco de control WPF. Por ejemplo, TextBox. ¿Cómo enumerar todas las propiedades de dependencia de ese control (como lo hace el editor XAML)?¿Cómo enumerar todas las propiedades de dependencia del control?
Respuesta
public IList<DependencyProperty> GetAttachedProperties(DependencyObject obj)
{
List<DependencyProperty> result = new List<DependencyProperty>();
foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(obj,
new Attribute[] { new PropertyFilterAttribute(PropertyFilterOptions.All) }))
{
DependencyPropertyDescriptor dpd =
DependencyPropertyDescriptor.FromProperty(pd);
if (dpd != null)
{
result.Add(dpd.DependencyProperty);
}
}
return result;
}
encontrar aquí: http://social.msdn.microsoft.com/Forums/en/wpf/thread/580234cb-e870-4af1-9a91-3e3ba118c89c
Usted puede utilizar la reflexión, a través de los GetFields, método para encontrar todas las propiedades estáticas públicas en Cuadro de texto. A continuación, puede utilizar un LINQ cláusula WHERE para filtrar estos a cualquier tipo de DependencyProperty:
var flags = BindingFlags.Static |
BindingFlags.FlattenHierarchy |
BindingFlags.Public;
var dependencyProperties = typeof(TextBox).GetFields(flags)
.Where(f => f.FieldType == typeof(DependencyProperty));
continuación, usted puede transformar esta a una lista de nombres a través de un Select:
var dependencyProperties = typeof(TextBox).GetFields(flags)
.Where(f => f.FieldType == typeof(DependencyProperty))
.Select(dp => dp.Name);
Nota: cada nombre tiene un sufijo 'Propiedad', por supuesto puede eliminar esto en la cláusula Select anterior si lo desea.
+1 para 'BindingFlags.FlattenHierarchy'. El mío no lo tiene. – Aliostad
Esta solución no es buena. Consulte este tema en MSDN: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/d47114a7-b182-485c-b1dd-1078ddd42be9/. Ver el comentario de Dr.WPF. – Dennis
Con respecto a los comentarios de Dr.WPFs, (1) Claro, la reflexión es lenta, pero es la única forma de hacerlo, si la velocidad es un problema, guarde en caché los resultados. (2) El método anterior no se basa en la presencia de accesadores CLR, por lo que no es un problema, (3) Este método también encontrará propiedades adjuntas. – ColinE
Si desea escuchar el nombre de los DependencyProperties de un elemento entonces usted puede hacer esto:
var results = from prop in typeof(element).GetFields()
where prop.FieldType == typeof(DependencyProperty)
select prop.Name.Substring(0, prop.Name.Length - 8);
donde 8 es la longitud de la cadena "Propiedad", que aparece al final de una propiedad de dependencia!
Trate
var fieldInfos = typeof(TextBox).GetFields(BindingFlags.Public | BindingFlags.Static).Where(x=>x.FieldType == typeof(DependencyProperty));
foreach (var fieldInfo in fieldInfos)
{
Console.WriteLine(fieldInfo.Name);
}
El uso de reflexión no se necesita (y una mala en mi humilde opinión idead) ya que el marco tiene ya clases de utilidad para esto (pero no son evidentes para encontrar :-).
Aquí es una respuesta basada en este artículo: Enumerate Bindings y la LocalValueEnumerator Structure
public static IEnumerable<DependencyProperty> EnumerateDependencyProperties(this DependencyObject obj)
{
if (obj != null)
{
LocalValueEnumerator lve = obj.GetLocalValueEnumerator();
while (lve.MoveNext())
{
yield return lve.Current.Property;
}
}
}
Aquí hay otra respuesta basada en este otro artículo: Getting list of all dependency/attached properties of an Object que utiliza MarkupWriter.GetMarkupObjectFor Method.
public static IEnumerable<DependencyProperty> EnumerateDependencyProperties(object element)
{
if (element != null)
{
MarkupObject markupObject = MarkupWriter.GetMarkupObjectFor(element);
if (markupObject != null)
{
foreach (MarkupProperty mp in markupObject.Properties)
{
if (mp.DependencyProperty != null)
yield return mp.DependencyProperty;
}
}
}
}
public static IEnumerable<DependencyProperty> EnumerateAttachedProperties(object element)
{
if (element != null)
{
MarkupObject markupObject = MarkupWriter.GetMarkupObjectFor(element);
if (markupObject != null)
{
foreach (MarkupProperty mp in markupObject.Properties)
{
if (mp.IsAttached)
yield return mp.DependencyProperty;
}
}
}
}
- 1. Cómo enumerar todas las propiedades de clase
- 2. ¿Cómo puedo enumerar todas las propiedades del objeto Math?
- 3. Cómo enumerar las propiedades del bean
- 4. ¿Cómo enumerar todas las propiedades de un objeto Powershell?
- 5. ¿Cómo enumerar todas las etiquetas de Git?
- 6. ¿Listar todas las propiedades del objeto ventana?
- 7. Cuándo utilizar las Propiedades de dependencia
- 8. Propiedades de dependencia
- 9. ¿Cómo enumerar todas las ventanas dentro de un proceso?
- 10. ¿Cómo puedo enumerar/enumerar todas las aplicaciones instaladas en Windows XP?
- 11. Cómo enumerar todas las variables de entorno en Java
- 12. Cómo enumerar todas las variables de enlace con GroovyShell
- 13. Cómo enumerar las propiedades de un objeto JavaScript
- 14. XML Documentación para las propiedades de dependencia
- 15. ¿Cómo enumerar todas las interfaces de red disponibles?
- 16. ¿Cómo puedo enumerar todas las columnas de una tabla?
- 17. ¿Cómo enumerar todas las funciones en un módulo de Python?
- 18. ¿Cómo enumerar todas las variables de entorno en Vim?
- 19. PHP cómo enumerar todas las funciones públicas de la clase
- 20. Enlace de propiedades de dependencia y actualización en control personalizado
- 21. Looping a través de todas las propiedades del objeto php
- 22. ¿Cómo enumerar todas las actividades expuestas por una aplicación?
- 23. Posible enumerar todas las clases PHP y sus métodos y propiedades?
- 24. Objective-C 2.0: class_copyPropertyList(), cómo enumerar las propiedades de las categorías
- 25. Groovy Listar todas las propiedades para la clase
- 26. exportar todas las propiedades definidas del proyecto maven al archivo?
- 27. Guarde todas las propiedades css del elemento usando jquery
- 28. ¿Cómo crear un enlace de Android Market para enumerar todas las aplicaciones del desarrollador?
- 29. Obtención de JavaScript para todas las propiedades
- 30. Cómo afectar las propiedades de control secundario de un estilo
Gracias, Pavlo. Funciona. – Dennis