2010-12-30 24 views
7

Tengo una grilla, un elemento raíz de ventana. Quiero aplicar una animación que cambiaría su color de fondo de blanco a verde en 5 segundos. Esto es lo que hice:WPF: ¿Cómo animar el cambio de color?

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    ColorAnimation animation; 

    animation = new ColorAnimation(); 
    animation.From = Colors.White; 
    animation.To = Colors.Green; 
    animation.Duration = new Duration(TimeSpan.FromSeconds(5)); 
    rootElement.BeginAnimation(Grid.BackgroundProperty, animation); 
} 

El código no funciona. Nada está cambiando. ¿Dónde estoy cometiendo un error? Gracias.

Respuesta

13

resuelto!

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    SolidColorBrush rootElementBrush; 
    ColorAnimation animation; 

    rootElementBrush = this.FindResource("RootElementBrush") as SolidColorBrush; 

    // Animate the brush 
    animation = new ColorAnimation(); 
    animation.To = Colors.Green; 
    animation.Duration = new Duration(TimeSpan.FromSeconds(5)); 
    rootElementBrush.BeginAnimation(SolidColorBrush.ColorProperty, animation); 
} 

He aquí una explicación:

Mi error inicial fue que quería cambiar el Grid.BackgroundProperty asignando colores a ella, pero acepta cepillos lugar ... manzanas y naranjas! Entonces, creé un recurso estático SolidColorBrush y lo llamé rootElementBrush. En XAML, configuro la propiedad de fondo de Grid rootElement en ese recurso estático. Y finalmente, modifiqué la animación, por lo que ahora cambia el color para ese SolidColorBrush. ¡Fácil!

+0

Me alegra que haya podido resolver esto. Debe seleccionar su propia respuesta como la que ha aceptado aquí. –

+0

@zedo Lo sé, pero me dice que no podré marcarlo correctamente en los próximos dos días. Está esperando a que las cosas se enfríen primero, jajajaja – Boris

+0

cómo configurar "desde" blanco "a" color de imagen original? – RollRoll

12

seguirlo:

<ColorAnimation 
Storyboard.TargetName="PlayButtonArrow" 
Storyboard.TargetProperty="Fill.Color" 
From="White" 
To="Green"    
Duration="0:0:5.0" 
AutoReverse="False"/> 
+0

Lo necesito en código subyacente y también tengo que llamarlo desde el código subyacente. Estoy pensando que podría estar cometiendo un error en mi código porque estoy tratando de cambiar un color, pero la propiedad 'Grid.Background' realmente está tomando un pincel ... – Boris

Cuestiones relacionadas