2012-07-23 16 views
5

Tôi muốn thực hiện chuyển đổi màu của màu Background màu của cửa sổ WPF.Chuyển đổi màu trong WPF

Tôi làm cách nào để thực hiện việc này?

Ví dụ:

Brush i_color = Brushes.Red; //this is the initial color 
Brush f_color = Brushes.Blue; //this is the final color 

Khi tôi bấm vào Button button1

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    this.Background = f_color; //here the transition begins. I don't want to be quick. Maybe an interval of 4 seconds. 
} 
+0

@downvoter Tại sao? Hãy bình luận –

+4

+1 Tôi không hiểu tại sao điều này lại bị bỏ phiếu. Câu hỏi là rõ ràng và có một số mã chứng minh những gì OP muốn. –

+1

@ John: Downvote có lẽ là do thiếu nỗ lực hiển thị để giải quyết vấn đề của riêng bạn (xem chú giải công cụ mũi tên xuống). Ngoài ra tôi chắc chắn điều này đã được yêu cầu trước đó vì vậy các nỗ lực tìm kiếm có thể được đặt câu hỏi là tốt. –

Trả lời

13

Trong mã nó có thể được thực hiện với điều này

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    ColorAnimation ca = new ColorAnimation(Colors.Red, Colors.Blue, new Duration(TimeSpan.FromSeconds(4))); 
    Storyboard.SetTarget(ca, this); 
    Storyboard.SetTargetProperty(ca, new PropertyPath("Background.Color")); 

    Storyboard stb = new Storyboard(); 
    stb.Children.Add(ca); 
    stb.Begin(); 
} 

Như H.B. đã chỉ ra điều này cũng sẽ hoạt động quá

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    ColorAnimation ca = new ColorAnimation(Colors.Blue, new Duration(TimeSpan.FromSeconds(4))); 
    this.Background = new SolidColorBrush(Colors.Red); 
    this.Background.BeginAnimation(SolidColorBrush.ColorProperty, ca); 
} 
+1

Có kịch bản cho một hoạt ảnh đơn giản là một chút đỏ, bạn chỉ có thể sử dụng ['BeginAnimation'] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.beginanimation.aspx) để thay thế . –

+1

@ H.B. 'this.Background.BeginAnimation (SolidColorBrush.ColorProperty, ca);' ném một ngoại lệ * Không thể tạo hiệu ứng thuộc tính 'Color' trên 'System.Windows.Media.SolidColorBrush' vì đối tượng bị niêm phong hoặc đóng băng *. Nếu bạn biết cách giải quyết điều này, hãy chia sẻ kiến ​​thức của bạn. – LPL

+2

@LPL: Bạn chỉ cần đảm bảo * không * để sử dụng phiên bản được cố định của 'SolidColorBrush', ví dụ: đặt 'Background' thành' new SolidColorBrush (Colors.Red) ', sau đó tạo hiệu ứng đó. Các trường hợp từ 'Brushes' có lẽ đã bị đóng băng nên chúng không thể thay đổi được (điều này thật kỳ lạ, hãy tưởng tượng ai đó đang dùng' Brushes.Red' và bây giờ là màu xanh). –

5

Dưới đây là một cách:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 

    <Grid x:Name="BackgroundGrid" Background="Red"> 

     <Button HorizontalAlignment="Left" VerticalAlignment="Top"> 
      Transition 
      <Button.Triggers> 
       <EventTrigger RoutedEvent="Button.Click"> 
        <BeginStoryboard> 
         <Storyboard> 
          <ColorAnimation Storyboard.TargetName="BackgroundGrid" From="Red" To="Blue" Duration="0:0:4" Storyboard.TargetProperty="Background" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </Button.Triggers> 
     </Button> 
    </Grid> 
</Window> 
+0

Không có mã C# - sử dụng xaml thuần túy này. – RQDQ

+0

Bạn có muốn mã C# bắt đầu hoạt ảnh hoặc mã C# để xác định hoạt ảnh không? – RQDQ

+0

@John: Câu trả lời này làm những gì bạn muốn, nó thay đổi màu sắc khi nhấp chuột, không cần sử dụng trình xử lý sự kiện và mã phía sau. –

1

Chỉ cần hoàn thành LPL và H.B. Trả lời ..... Trong trường hợp của tôi, tôi cần phải hoàn nguyên một điều khiển về cùng màu trước khi hoạt hình.

Đây là mã của tôi

ColorAnimation animation = new ColorAnimation() 
{ 
    From = Colors.Orange, 
    To = ((SolidColorBrush)myControl.Background).Color,//Revert to initial control Color 
    Duration = new Duration(TimeSpan.FromSeconds(2)) 
}; 

myControl.Background = new SolidColorBrush(Colors.Orange);//Do not use a frozen instance 
myControl.Background.BeginAnimation(SolidColorBrush.ColorProperty, animation); 
+0

Có gì sai với 'Autoreverse = true'? – itsho

+0

Tôi muốn có một màu cam ngay lập tức sau đó mờ dần về "Kiểm soát màu". Tự động đảo ngược sẽ cho phép mờ dần từ "Màu điều khiển" sang màu cam sau đó quay lại "Màu điều khiển". – Guish