Estoy construyendo algunos controles WPF con .Net 4.0. Uno de estos controles, llamado LoadingPane, es un control personalizado derivado de ContentControl. El único trabajo de este control LoadingPane es mostrar una capa semitransparente sobre su contenido cuando su propiedad IsLoading está establecida en verdadero. Uso algunas animaciones para hacer el fundido de entrada y el fundido de salida cuando cambia el valor de IsLoading. Cuando se muestra la superposición, una animación gira un círculo de elipses.La animación WPF se inicia pero se muestra demasiado tarde
Hasta ahora, todo bien. Todo esto funciona muy bien. Pero aquí está mi problema: cuando configuro la propiedad Cargando como verdadera, la animación no se muestra directamente. Tarda aproximadamente medio segundo. En este momento, la animación de fundido de entrada ya se ha ejecutado, por lo que la opacidad pasa efectivamente de 0 a 1 en un solo paso.
Aquí está mi código de animación:
<ControlTemplate.Triggers>
<Trigger Property="IsLoading"
Value="True">
<Trigger.EnterActions>
<RemoveStoryboard BeginStoryboardName="EndAnimateLoadingCanvas" />
<BeginStoryboard Name="AnimateLoadingCanvas">
<Storyboard FillBehavior="Stop">
<ObjectAnimationUsingKeyFrames BeginTime="00:00:00"
Storyboard.TargetName="MyViewBoxje"
Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
<DoubleAnimation BeginTime="00:00:00"
Duration="00:00:00.5"
Storyboard.TargetName="MyViewBoxje"
Storyboard.TargetProperty="Opacity"
To="1" />
<DoubleAnimation BeginTime="00:00:00"
Duration="00:00:02"
Storyboard.TargetName="AnimatedRotateTransform"
Storyboard.TargetProperty="Angle"
From="360"
To="0"
RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="AnimateLoadingCanvas" />
<BeginStoryboard Name="EndAnimateLoadingCanvas">
<Storyboard FillBehavior="Stop">
<DoubleAnimation BeginTime="00:00:00"
Duration="00:00:00.5"
Storyboard.TargetName="MyViewBoxje"
Storyboard.TargetProperty="Opacity"
To="0" />
<ObjectAnimationUsingKeyFrames BeginTime="00:00:00.5"
Storyboard.TargetName="MyViewBoxje"
Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame Value="{x:Static Visibility.Collapsed}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
Lo extraño es que, cuando se utiliza este control en una ventana de prueba y que haga clic en la casilla de verificación de carga en repetidas ocasiones (y antes de la animación ha terminado), el desvanecimiento La animación in/fade-out funciona como espero que funcione.
¿Alguien puede ayudar? Gracias por adelantado!
Tuve este mismo problema (aunque bajo una circunstancia diferente). Una animación que tuve que se ejecutó cuando se cargó una aplicación de Silverlight nunca mostró la animación la * primera * vez. Pero las cargas posteriores a partir de entonces funcionaron. Terminar y volver a iniciar la aplicación obtendría el mismo comportamiento. Nunca encontré una respuesta, así que +1 =) – Smudge202
Bounty agregado, tal vez podamos obtener una respuesta de esa manera. En esencia, creo que la pregunta es cómo evitar que se salten las animaciones de carga, preferiblemente sin alguna forma de solución que imponga un evento de temporizador de bloqueo por primera vez. – Smudge202
+1 como Mancha. Tener los mismos problemas con SL. –