2011-03-24 10 views
7

¿Hay una manera rápida de determinar si cualquier animación en un control de WPF está procesando.Animación WPF: ¿Detecta si alguna animación está en proceso?

Tengo una vista de árbol donde estoy animando la expansión de los nodos del árbol, y me gustaría que esperar hasta que todas esas animaciones están completos antes de desplazarse el elemento enfocado a la vista. Prefiero no seguir el progreso de todos mis guiones gráficos de forma independiente.

Lo ideal sería que mi pseudo código sería algo como esto:

myTreeView.ExpandAll(); // I have written this part 

while (myTreeView.IsAnimating()) // I need the 'IsAnimating' property or extension method 
{ 
    // wait 
} 

selectedTreeviewItem.BringIntoView(); // I have written this too. 
+1

Ha intentado la Historieta "Completado" evento? – codymanix

+0

Dado que hay varias animaciones de guiones gráficos (una para cada elemento de vista en árbol que se está expandiendo), no estoy seguro de que sabré cuándo se completa la última. –

+0

Así que incrementar un contador en su guión comienza eventos y disminuir el contador de los eventos completados, y si el contador es cero después de disminuir, a continuación, todas las animaciones son completos. –

Respuesta

0

Por qué no usar de completed event el guión gráfico? Tendrás que usar un evento o un hilo diferente, o bloquearás el hilo de la interfaz de usuario con tu declaración while y no se reproducirán las animaciones.

+1

Eso es lo que estoy tratando de evitar, ya que estoy desencadenar en cualquier lugar entre 1 y X simultáneamente animaciones ... que es una opción de reserva que estoy considerando, sin embargo. –

+0

Bueno, tu respuesta es esencialmente eso. Lo que faltaba era el uso de EventManager.RegisterClassHandler (..., Storyboard.CompletedEvent, ...) en el constructor estático de MyTreeView de modo que pueda ver toda la animación completa. –

+0

¿Qué sucede si la animación está en bucle? Esto no funcionará entonces. – ProgrammerAtWork

Cuestiones relacionadas