WPF: Как оживить изменение цвета? - PullRequest
7 голосов
/ 30 декабря 2010

У меня есть сетка, корневой элемент окна.Я хочу применить анимацию, которая за 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);
}

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

Ответы [ 3 ]

15 голосов
/ 30 декабря 2010

Решено!

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. Легко!

12 голосов
/ 30 декабря 2010

Попробуйте:

<ColorAnimation
Storyboard.TargetName="PlayButtonArrow" 
Storyboard.TargetProperty="Fill.Color"
From="White"
To="Green"              
Duration="0:0:5.0"
AutoReverse="False"/>
0 голосов
/ 31 октября 2018

Вам не нужно устанавливать 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);
}
...