wpf user-controls onload

wpf - ¿Hay algún evento después de Loaded y antes de mostrar el control del usuario?



user-controls onload (3)

Estoy cargando controles de usuario en una grilla específica en nuestra aplicación y estoy agregando animaciones a los controles de usuario de carga en el controlador de eventos Loaded de los controles.

Algunos de los controles de usuario son livianos y algunos de ellos requieren grandes cálculos antes de cargarlos. El problema es que cuando agrego una animación de 1 segundo a los controles pesados ​​del usuario, ¡entonces, al mostrar el control, la animación no se puede ver nunca!

¿Hay algún otro evento que pueda agregar mi animación al control del usuario para que los pesados ​​y los ligeros se muestren con la misma animación?

Necesito un evento justo antes de mostrar el control. OnLoaded no parece ser el lugar adecuado para mí, desafortunadamente.


Cuando se abre por primera vez una ventana, los eventos Cargados y ContentRendered se generan solo después de que se activa el evento Activated. Con esto en mente, una ventana se puede considerar efectivamente abierta cuando se genera ContentRendered.

http://msdn.microsoft.com/en-us/library/ms748948.aspx


Para aquellos que buscan una forma genérica para ejecutar código justo después de que se crean los componentes, pero antes de que se LayoutUpdated evento LayoutUpdated ayuda. Esto debería funcionar dentro de las ventanas, así como dentro de los controles de usuario o personalizados.


La respuesta fue dar el Storyboard. Comenzar una prioridad más baja.

Lo descubrí a partir de esta respuesta: https://.com/a/4708172/970420

Entonces tenemos este código para comenzar la animación:

void BeginStoryboardAction(Storyboard sb) { sb.Begin(); }

y deberíamos llamarlo de esta manera:

Dispatcher.BeginInvoke(new Action<Storyboard>(BeginStoryboardAction), DispatcherPriority.ContextIdle, sb);

sb es una instancia de Storyboard que tiene algunas animaciones.

[Editar]: Otra forma más corta:

Dispatcher.BeginInvoke(new Action<Storyboard>(delegate (Storyboard stb){stb.Begin();}), DispatcherPriority.ContextIdle, sb);