Estoy escuchando el evento cargado de una Página. Ese evento se dispara primero y luego todos los niños disparan su evento de carga. Necesito un evento que se dispara cuando TODOS los niños han cargado. ¿Eso existe?¿Hay un evento "Todos los niños cargados" en WPF
Respuesta
que se oye. También me falta una solución lista para usar en WPF para esto.
A veces desea que se ejecute algún código después de cargar todos los controles secundarios.
Pon esto en el constructor del control de los padres
Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(() => {code that should be executed after all children are loaded}));
me ayudó un par de veces hasta ahora.
Loaded
es el evento que se activa después de que todos los niños hayan sido Initialized
. No hay ningún evento AfterLoad
por lo que sé. Si puede, mueva la lógica de los niños al evento Initialized
, y luego Loaded
se producirá después de que todos hayan sido inicializados.
¿Cómo puede una respuesta tener 7 votos ascendentes, si es incorrecto? La respuesta de Buckly, con solo 2 upvotes, funciona perfectamente. –
@FrederikPrijck El hecho de que una respuesta sea correcta no significa que otra no lo sea. Esta respuesta * es * correcta, es útil y es exactamente lo que necesitaba: estaba haciendo algo en el controlador Cargado del niño de lo que debería haberse hecho en su controlador Inicializado. Y, de hecho, la respuesta de Buckley, que dice "perder una solución lista para usar en WPF para esto", está de acuerdo con esta respuesta. Y vea la respuesta de Jobi, que sugiere que hay casos en los que el truco de Buckey no será adecuado. –
¿Dónde estoy diciendo que solo una respuesta puede ser correcta? Esta respuesta no funcionó para mí, pero eso es algo totalmente diferente de quedarse solo con una respuesta que puede ser correcta. Pero ha pasado un tiempo, así que no sé los detalles. –
WPF no puede proporcionar ese tipo de evento ya que la mayoría de las veces de datos es determinar whther para cargar un niño en particular a la VisualTree o no (por ejemplo, elementos de interfaz de usuario dentro de un DataTemplate)
Así que si usted puede explicar su escenario poco más claro que podemos encontrar una solución específica para eso.
Terminé haciendo algo en esta línea ... su kilometraje puede variar.
void WaitForTheKids(Action OnLoaded)
{
// After your children have been added just wait for the Loaded
// event to fire for all of them, then call the OnLoaded delegate
foreach (ContentControl child in Canvas.Children)
{
child.Tag = OnLoaded; // Called after children have loaded
child.Loaded += new RoutedEventHandler(child_Loaded);
}
}
internal void child_Loaded(object sender, RoutedEventArgs e)
{
var cc = sender as ContentControl;
cc.Loaded -= new RoutedEventHandler(child_Loaded);
foreach (ContentControl ctl in Canvas.Children)
{
if (!ctl.IsLoaded)
{
return;
}
}
((Action)cc.Tag)();
}
Tuve el mismo problema. @configurator tiene razón, si tiene este problema, creo que es porque tiene un problema con los elementos secundarios. En mi caso, los elementos secundarios donde un usuario personalizado controla. Los estaba inicializando incorrectamente. Arreglé el control del usuario y todo funcionó muy bien
También puede usar el evento: ContentRendered.
http://msdn.microsoft.com/en-us/library/ms748948.aspx#Window_Lifetime_Events
Una de las opciones (cuando el contenido prestados):
this.LayoutUpdated + = OnLayoutUpdated;
private void OnLayoutUpdated(object sender, EventArgs e)
{
if (!isInitialized && this.ActualWidth != 0 && this.ActualHeight != 0)
{
isInitialized = true;
// Logic here
}
};
- 1. require.js: Acceda a todos los módulos cargados
- 2. jQuery: pero ¿y todos los niños?
- 3. WPF MDI niños
- 4. Jquery - Obtener todos los niños visibles desde un div Obtener
- 5. Seleccionar padre si todos los niños cumplan con los criterios
- 6. Comprobar si los elementos de todos los niños están ocultos
- 7. Eliminar todos los niños en DOM elementos div
- 8. Seleccionar el registro primario con todos los niños en SQL
- 9. Imprimir todos los beans de resorte que están cargados
- 10. ¿Cómo hago una lista de todos los conjuntos cargados?
- 11. ¿Cómo guardar los elementos cargados en un repetidor?
- 12. ¿Cómo obtengo una lista de todos los ensamblajes cargados actualmente?
- 13. Determine los ensamblados cargados
- 14. No desencadenar evento de desplazamiento sobre niños
- 15. xpath para obtener el texto de todos los niños
- 16. Elemento de estiramiento para contener todos los niños
- 17. Por qué: el primer hijo selecciona todos los niños?
- 18. ¿Cómo hago este ciclo todos los niños recursivamente?
- 19. WPF: ¿cómo puedo centrar todos los artículos en un WrapPanel?
- 20. ¿Cómo seleccionar TODOS los niños (en cualquier nivel) de un padre en jQuery?
- 21. html5: hay una manera de evitar que los niños interfieran con los eventos de arrastre
- 22. Java: programación determinar todos los nombres de los paquetes cargados en la ruta de clase
- 23. Javascript adjuntar un evento onclick a todos los enlaces
- 24. Activación del evento jQuery en todos los oyentes
- 25. WPF Imagen/Evento representación
- 26. WPF: ¿Cómo descarto todos los estilos heredados?
- 27. Retire todos los niños a partir de un XML Nodo PHP DOM
- 28. ¿Cómo enumerar todos los dlls cargados por un proceso con Python?
- 29. Cómo orientar todos los controles (Estilos WPF)
- 30. Cómo deshabilitar/habilitar a todos los niños en LinearLayout en Android
Funciona como un encanto. ¡Gracias! –
no funciona para mí ... las instalaciones de dep todavía son nulas – user1034912