2010-12-30 4 views
7

Ich habe ein Raster, ein Fensterwurzelelement. Ich möchte eine Animation anwenden, die die Hintergrundfarbe in 5 Sekunden von Weiß auf Grün ändert. Hier ist, was ich getan habe:WPF: Wie man Farbänderung belebt?

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

Der Code funktioniert nicht. Nichts ändert sich. Wo mache ich einen Fehler? Vielen Dank.

Antwort

13

gelöst!

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

Hier ist eine Erklärung:

Mein erster Fehler war, dass ich die Grid.BackgroundProperty durch die Zuordnung Farben, aber es akzeptiert Bürsten statt ... Äpfel und Orangen ändern wollte! Also habe ich eine statische Ressource SolidColorBrush erstellt und nannte es rootElementBrush. In XAML setze ich die Hintergrundeigenschaft Grid rootElement auf diese statische Ressource. Und schließlich habe ich die Animation geändert, so dass sie jetzt die Farbe für das SolidColorBrush ändert. Einfach!

+0

Froh, dass Sie in der Lage waren, dies zu lösen. Sie sollten Ihre eigene Antwort als diejenige auswählen, die Sie hier akzeptiert haben. –

+0

@ zedo Ich weiß, aber es sagt mir, dass ich es in den nächsten zwei Tagen nicht korrekt markieren kann. Es wartet darauf, dass sich die Dinge zuerst abkühlen, hahahaha – Boris

+0

Wie setzt man "von" weiß auf "orignal image color"? – RollRoll

12

Geben Sie diesen einen Versuch:

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

Ich brauche es in Code-Behind und auch ich muss es von Code-Behind anrufen. Ich denke, dass ich einen Fehler in meinem Code machen könnte, weil ich versuche, eine Farbe zu ändern, aber "Grid.Background" -Eigenschaft nimmt tatsächlich einen Pinsel ... – Boris