WPF: как анимировать изменение цвета?

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

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

Код не работает. Ничего не меняется. Где я делаю ошибку? Спасибо.


person Boris    schedule 30.12.2010    source источник


Ответы (3)


Решено!

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 я установил свойство background Grid rootElement для этого статического ресурса. И, наконец, я изменил анимацию, так что теперь она меняет цвет для этого SolidColorBrush. Легко!

person Boris    schedule 30.12.2010
comment
Рад, что вы смогли решить эту проблему. Вы должны выбрать свой собственный ответ как тот, который вы приняли здесь. - person THE DOCTOR; 30.12.2010
comment
@zedo Я знаю, но он говорит мне, что я не смогу отметить это правильно в ближайшие два дня. Он ждет, пока все остынет, хахахаха - person Boris; 31.12.2010
comment
как установить с белого на исходный цвет изображения? - person RollRoll; 09.07.2015

Попробуйте это:

<ColorAnimation
Storyboard.TargetName="PlayButtonArrow" 
Storyboard.TargetProperty="Fill.Color"
From="White"
To="Green"              
Duration="0:0:5.0"
AutoReverse="False"/>
person THE DOCTOR    schedule 30.12.2010
comment
Мне нужно это в отделенном коде, а также мне нужно вызвать его из кода программной части. Я думаю, что могу ошибаться в своем коде, потому что пытаюсь изменить цвет, но свойство Grid.Background на самом деле использует кисть... - person Boris; 30.12.2010

Вам не нужно устанавливать StaticResource, просто используйте Storyboard.

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // Animate the brush 
    ColorAnimation animation = new ColorAnimation();
    animation.To = Colors.Green;
    animation.Duration = new Duration(TimeSpan.FromSeconds(5));
    Storyboard.SetTargetProperty(animation, new PropertyPath("(Grid.Background).(SolidColorBrush.Color)", null));
    Storyboard storyboard = new Storyboard();
    storyboard.Children.Add(animation);
    storyboard.Begin(rootElement);
}
person Michal Heczko    schedule 31.10.2018