2010-12-30 4 views
7

Ho una griglia, un elemento radice di una finestra. Voglio applicare un'animazione che cambierebbe il suo colore di sfondo dal bianco al verde in 5 secondi. Ecco cosa ho fatto:WPF: come animare il cambio colore?

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); 
} 

Il codice non funziona. Niente sta cambiando. Dove sto facendo un errore? Grazie.

risposta

13

risolto!

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); 
} 

Ecco una spiegazione:

Il mio errore iniziale era che volevo cambiare il Grid.BackgroundProperty assegnando colori ad esso, ma accetta le spazzole invece ... le mele e le arance! Quindi, ho creato una risorsa statica SolidColorBrush e l'ho denominata rootElementBrush. In XAML, ho impostato la proprietà di sfondo Grid rootElement su quella risorsa statica. E infine, ho modificato l'animazione, quindi ora cambia il colore per quello SolidColorBrush. Facile!

+0

contento che sono stati in grado di ottenere questo risolto. Dovresti selezionare la tua risposta come quella che hai accettato qui. –

+0

@zedo Lo so, ma mi dice che non potrò segnarlo correttamente nei prossimi due giorni. Aspetta che le cose si raffreddino prima, hahahaha – Boris

+0

come impostare "da" bianco "a" colore dell'immagine originale? – RollRoll

12

dare una prova:

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

ne ho bisogno in code-behind e anche io bisogno di chiamare da code-behind. Sto pensando che potrei essere facendo un errore nel mio codice, perché sto cercando di cambiare un colore, ma 'proprietà Grid.Background' è in realtà prendendo un pennello ... – Boris