2010-12-30 11 views
7

Tôi có lưới, phần tử gốc cửa sổ. Tôi muốn áp dụng một hình ảnh động sẽ thay đổi màu nền từ trắng sang xanh lục trong 5 giây. Dưới đây là những gì tôi đã làm:WPF: Làm thế nào để animate thay đổi màu sắc?

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

Mã không hoạt động. Không có gì thay đổi. Tôi đang phạm sai lầm ở đâu? Cảm ơn.

Trả lời

13

Giải Quyết!

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

Dưới đây là một lời giải thích:

sai lầm ban đầu của tôi là tôi muốn thay đổi Grid.BackgroundProperty bằng cách gán màu sắc với nó, nhưng nó chấp nhận bàn chải thay vì ... táo và cam! Vì vậy, tôi đã tạo một tài nguyên tĩnh SolidColorBrush và đặt tên là rootElementBrush. Trong XAML, tôi đặt thuộc tính nền của Grid rootElement vào tài nguyên tĩnh đó. Và cuối cùng, tôi đã sửa đổi hoạt ảnh, vì vậy bây giờ nó thay đổi màu sắc cho rằng SolidColorBrush. Dễ dàng!

+0

Rất vui khi bạn có thể giải quyết vấn đề này. Bạn nên chọn câu trả lời của riêng mình như câu trả lời bạn đã chấp nhận ở đây. –

+0

@zedo Tôi biết, nhưng nó cho tôi biết tôi sẽ không thể đánh dấu nó đúng trong hai ngày tới. Đó là chờ đợi cho những điều để làm mát xuống đầu tiên, hahahaha – Boris

+0

làm thế nào để thiết lập "từ" màu trắng "để" màu sắc hình ảnh orignal? – RollRoll

12

này cung cấp cho một thử:

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

Tôi cần nó ở chế độ mã và tôi cũng cần gọi nó từ mã sau. Tôi nghĩ rằng tôi có thể làm sai trong mã của tôi vì tôi đang cố gắng thay đổi một màu, nhưng thuộc tính 'Grid.Background' thực sự đang lấy một chiếc bàn chải ... – Boris