He intentado durante algún tiempo crear una clase/serie de clases que, al detectar un cambio de tamaño en un objeto relacionado, intenta detener el cambio de tamaño del objeto y crear un cambiar el tamaño de la animación para ello. Sin embargo, siempre he tenido un problema con el parpadeo de los objetos en la pantalla por un segundo en el tamaño objetivo antes de que comience la animación.Transiciones automáticas de cambio de tamaño uniformes: un problema con Storyboards
En pocas palabras, después de una seria depuración y dudas, soy con la impresión de que llamar al Storyboard.Begin()
no afecta el valor objetivo hasta el próximo tic del reloj. Supongo que esto tiene algo que ver con Storyboard.Seek()
que no ocurre hasta el próximo tic del reloj. (See the MSDN Reference). Y, como tal, el objeto adopta su nueva altura para un solo cuadro antes de que comience la animación que lo lleva de vuelta a la altura de inicio.
He pasado mucho tiempo intentando que esto funcione porque no es tan simple como parece. No puedo establecer FrameworkElement.Height
en e.PreviousSize.Height
en un controlador de eventos FrameworkElement.SizeChanged
, porque eso afecta la altura "verdadera" del objeto. Como un ejemplo de por qué esto no funciona, si algo cambia la altura 'verdadera' del objeto mientras se reproduce la animación, entonces se vuelve a configurar FrameworkElement.Height
a la altura del objetivo que se recopiló cuando la animación comenzó podría establecerlo como una valor incorrecto y fuera de fecha.
Hay más cosas que he intentado, y estoy seguro de que aparecerán cuando lleguen las respuestas, pero cualquier idea que tenga será muy apreciada.
Puede ser completamente diferente de lo que estás tratando de hacer, pero ¿has intentado ampliar/modificar/eliminar la funcionalidad FluidLayout de ExtendedVisualStateManager, que maneja situaciones similares relativamente bien? – dain
@dain - Es casi exactamente lo que quiero, sin embargo, no funciona cuando el 'VisualState' para contraerse o expandirse está contenido dentro del estilo de cada instancia. En un caso, hay cuatro instancias de un control en la pantalla, y el 'ExtendedVisualStateManager' solo funciona si el contenedor de las cuatro instancias contiene los estados, lo que no es posible en este caso. (Espero que tenga sentido.) Además, también tengo que lidiar con controles que cambian de tamaño debido a un cambio en el contenido, no a un cambio de estado. ¡Gracias! – Melodatron