Tengo un control en WPF que tiene un Uid único. ¿Cómo puedo recuperar el objeto por su Uid?Obtener el objeto por su Uid en WPF
Respuesta
Tienes que hacerlo por fuerza bruta. Esto es un método de extensión de ayuda que puede utilizar:
private static UIElement FindUid(this DependencyObject parent, string uid)
{
var count = VisualTreeHelper.GetChildrenCount(parent);
if (count == 0) return null;
for (int i = 0; i < count; i++)
{
var el = VisualTreeHelper.GetChild(parent, i) as UIElement;
if (el == null) continue;
if (el.Uid == uid) return el;
el = el.FindUid(uid);
if (el != null) return el;
}
return null;
}
Entonces se le puede llamar así:
var el = FindUid("someUid");
¿'GetChild (parent, N)' no tiene la complejidad de O (N)? El enfoque foreach parece más limpio (y más claro) para mí. – AgentFire
Esto es mejor.
public static UIElement FindUid(this DependencyObject parent, string uid) {
int count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++) {
UIElement el = VisualTreeHelper.GetChild(parent, i) as UIElement;
if (el != null) {
if (el.Uid == uid) { return el; }
el = el.FindUid(uid);
}
}
return null;
}
No puede ser mejor si su código no funciona. Tu recursión está rota. El resultado de 'el.FindUid (uid)', si no es nulo, debe ser devuelto. –
public static UIElement GetByUid(DependencyObject rootElement, string uid)
{
foreach (UIElement element in LogicalTreeHelper.GetChildren(rootElement).OfType<UIElement>())
{
if (element.Uid == uid)
return element;
UIElement resultChildren = GetByUid(element, uid);
if (resultChildren != null)
return resultChildren;
}
return null;
}
Un problema que tuve con la respuesta más común es que no va a mirar dentro de los controles de contenido (como controles de usuario) para los elementos dentro de su contenido. Para buscar dentro de estos amplié la función para mirar la propiedad de contenido de los controles compatibles.
public static UIElement FindUid(this DependencyObject parent, string uid)
{
var count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++)
{
var el = VisualTreeHelper.GetChild(parent, i) as UIElement;
if (el == null) continue;
if (el.Uid == uid) return el;
el = el.FindUid(uid);
if (el != null) return el;
}
if (parent is ContentControl)
{
UIElement content = (parent as ContentControl).Content as UIElement;
if (content != null)
{
if (content.Uid == uid) return content;
var el = content.FindUid(uid);
if (el != null) return el;
}
}
return null;
}
- 1. Creando su propio uid de estilo Tinyurl
- 2. Obtener el UID de Linux de una aplicación de Android
- 3. Android UID de seguridad que cambia UID
- 4. Obtenga tt_content uid
- 5. objeto por su miembro dentro de una lista en Python
- 6. ¿Por qué jQuery pasa el objeto ventana a su ámbito
- 7. ¿Por qué ActualSize no actualiza su valor en WPF?
- 8. ¿Cómo obtener un objeto superior (ventana o página) en WPF?
- 9. Cómo determinar el UID de un mensaje en IMAP
- 10. Obtener un componente Swing por su nombre
- 11. ¿cómo busco un objeto por su ObjectId en la consola?
- 12. Obtener referencia al objeto de subproceso desde su ID
- 13. ¿Qué es UID en Android?
- 14. ¿Cómo puedo obtener el usuario real uid si el programa se ejecuta con sudo?
- 15. Cómo obtener el elemento bajo el cursor en WPF ListView
- 16. ¿Hay alguna manera de obtener el UID del usuario en la máquina Linux usando Java?
- 17. ¿Cómo puedo obtener el DPI en WPF?
- 18. ¿Cómo obtener un elemento por su href en jquery?
- 19. Procesos en ejecución. ¿Por qué aparece el número de uid en lugar del nombre de usuario?
- 20. DropDownList obtener el objeto subyacente
- 21. ¿Cómo obtener el nombre del objeto File sin su extensión en Java?
- 22. obtener el atributo del objeto ActiveRecord por cadena
- 23. Cómo ordenar un objeto std :: vector por su valor flotante
- 24. Javascript: el acceso al miembro de un objeto por su nombre
- 25. ¿Por qué mi objeto C++ pierde su VPTr
- 26. Javascript: Obtener acceso a la variable local o variable en el cierre por su nombre
- 27. ¿Por qué las personas definen objeto extiende su clase compañera?
- 28. ¿Cuántos UID son posibles en Android?
- 29. ¿El UID proporcionado por el comando UIDL POP3 de MS Exchange es verdaderamente único?
- 30. obtener el objeto libro actual en C#
favor detalles. ¿Cuál es tu UID? ¿Cómo está establecido? –
Es una propiedad de dependencia de cualquier control en wpf o silverlight. He logrado resolver esto, pero me preguntaba si existe un método incorporado. – jose