2012-04-18 14 views
6

Estoy creando varios controles de usuario en un panel de ajuste. Tengo un modelo de vista vinculado al usercontrol y tengo una animación activada en una propiedad en el modelo de vista. Muy simple alternar el color de rojo a transparente para simular el parpadeo.Cómo sincronizar animaciones entre controles de usuario en WPF

<Storyboard x:Key="alertAnimation" RepeatBehavior="Forever" AutoReverse="True" > 
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" 
            Storyboard.TargetName="TileBorder" 
            BeginTime="00:00:00" 
            RepeatBehavior="Forever" 
            AutoReverse="True" 
            > 
     <DiscreteColorKeyFrame Value="Red"/> 
     <DiscreteColorKeyFrame KeyTime="00:00:00.500" Value="Transparent" /> 
    </ColorAnimationUsingKeyFrames> 

</Storyboard> 

Esto funciona bien. Sin embargo, como cargué varios controles de usuario de forma asíncrona, las animaciones parpadeantes no están sincronizadas, por lo que todas parpadean en diferentes momentos. Ahora es necesario que todo lo que parpadee en la pantalla parpadee con la misma frecuencia/hora. ¿Hay alguna forma de sincronizar estas animaciones? Parece que no puedo encontrar un ejemplo en cualquier lugar que se ajuste a lo que estoy tratando de lograr. ¿Hay alguna manera de utilizar ParallelTimeline, agregarle todas las animaciones y comenzar/detenerlas desde un único controlador? ¿Algún ejemplo de cómo lograr esto?

EDITAR 4/20 ¿Sería mejor tener la animación definida en un archivo style.xaml y tener un guión gráfico "global" que cada control agregue su animación "intermitente" y que la interfaz de usuario principal inicie el guión gráfico?

+0

¿Por qué necesita cargar los controles asincrónicos? – Paparazzi

+0

Realmente para miradas. Descubrí que si los cargaba sincrónicamente, la aplicación parecía bloquearse hasta que se cargaban todos los controles. Además, una vez que se carguen todos los controles de usuario iniciales, podría aparecer otro en cualquier momento cuando un dispositivo que representa se conecte. Pensé que necesitaba resolver ese caso también. – mdutra

+0

Parece una animación simple pero intentaría discreto sobre el fotograma clave. – Paparazzi

Respuesta

0

Claramente esto necesitaría ser modificado, pero intentar una duración de 0 en una transición de color puede darle un abrir y cerrar con menos sobrecarga. Y puede que no. Solo algo para probar.

<Rectangle Name="MyRectangle" Width="100" Height="100"> 
     <Rectangle.Fill> 
      <SolidColorBrush x:Name="MySolidColorBrush" Color="Blue" /> 
     </Rectangle.Fill> 
     <Rectangle.Triggers> 
      <EventTrigger RoutedEvent="Rectangle.MouseEnter"> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation 
      Storyboard.TargetName="MyRectangle" 
      Storyboard.TargetProperty="Width" 
      From="100" To="200" Duration="0:0:1" /> 

         <ColorAnimation 
      Storyboard.TargetName="MySolidColorBrush" 
      Storyboard.TargetProperty="Color" 
      From="Blue" To="Red" BeginTime="0:0:1" Duration="0:0:0" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Rectangle.Triggers> 
    </Rectangle> 
3

no pude encontrar una buena manera de controlar múltiples animaciones a través de múltiples controles de usuario, así que al final no usar la animación en el control de usuario, pero en lugar de utilizar una animación simplemente cambiar una propiedad de dependencia en un objeto estático y tienen todos los controles de usuario que necesidad de parpadear de alguna manera se unen a esa propiedad. Hay varias maneras de producir los resultados deseados que quería, pero al final ahora tenía una forma de que todos mis controles supieran cuando el parpadeo estaba encendido y luego apagado para que todo estuviera sincronizado.

me dieron el código de idea y muestra desde el siguiente sitio: How to synchronize animations across usercontrols in wpf

hice algunas modificaciones a la misma, pero en general hicieron exactamente lo que necesitaba hacer.

+0

Esto es lo que voy en este momento. Esperaba solo usar animaciones. Ah bueno. –

Cuestiones relacionadas