2010-12-30 4 views
7

У меня есть сетка, элемент окна. Я хочу применить анимацию, которая изменит цвет фона с белого на зеленый за 5 секунд. Вот что я сделал:WPF: Как оживить изменение цвета?

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

Код не работает. Ничто не меняется. Где я ошибаюсь? Благодарю.

ответ

13

Решено!

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

Вот объяснение:

Моя первая ошибка заключалась в том, что я хотел изменить Grid.BackgroundProperty назначая цвета к нему, но он принимает кисти вместо ... яблоки и апельсины! Итак, я создал статический ресурс SolidColorBrush и назвал его rootElementBrush. В XAML я установил для фона статический ресурс значение Grid rootElement. И, наконец, я изменил анимацию, так что теперь она меняет цвет для этого SolidColorBrush. Легко!

+0

Рад, что вы смогли решить эту проблему. Вы должны выбрать свой собственный ответ как тот, который вы приняли здесь. –

+0

@zedo Я знаю, но это говорит мне, что в ближайшие два дня я не смогу отметить его правильно. Он ждет, чтобы все остыло во-первых, hahahaha – Boris

+0

как установить «от« белого »на« цвет изображения orignal? – RollRoll

12

Дайте этому попытку:

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

Мне нужно это в коде, а также мне нужно вызвать его из кода. Я думаю, что я могу ошибаться в своем коде, потому что я пытаюсь изменить цвет, но свойство «Grid.Background» на самом деле берет кисть ... – Boris