2010-06-07 19 views
5

Tôi muốn làm một cái gì đó có vẻ khá đơn giản, nhưng tôi không thể tìm ra cách để làm điều đó. Tôi có một ColorAnimation được kích hoạt khi sự kiện MouseEnter xảy ra. Nó chỉ đơn giản là thay đổi màu nền của một Border từ một màu sang màu khác.Làm cách nào để liên kết với một màu trong WPF ColorAnimation?

Thật không may, tôi không thể tìm ra cách đặt bất kỳ thứ gì ngoài các màu cứng vào ColorAnimation này. Vì vậy, nó hiện trông như thế này:

<Style x:Key="MouseOverStyle"> 
<Style.Triggers> 
    <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard> 
        <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
            To="Red" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger.Actions> 
    </EventTrigger> 
</Style.Triggers> 
</Style> 

Tuy nhiên, tôi muốn làm một cái gì đó hoặc là như thế này:

<SolidColorBrush x:Key="MyEventColor" Color="{Binding EventColor}" /> 

<Style x:Key="MouseOverStyle"> 
<Style.Triggers> 
    <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard> 
        <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
            To="{StaticResource MyEventColor}" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger.Actions> 
    </EventTrigger> 
</Style.Triggers> 
</Style> 

Hoặc như thế này:

<Style x:Key="MouseOverStyle"> 
<Style.Triggers> 
    <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard> 
        <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
            To="{Binding EventColor}" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger.Actions> 
    </EventTrigger> 
</Style.Triggers> 
</Style> 

Khi tôi cố gắng làm một trong hai của những người, một ngoại lệ được ném. Đối với lần đầu tiên, nó ném một ngoại lệ cho tôi biết rằng tính chất "Màu" không thể lấy giá trị SolidColorBrush ... điều đó có ý nghĩa ... nhưng chắc chắn nó không giúp tôi bởi vì ColorAnimation sẽ không cho tôi animate "(Border.Background). (SolidColorBrush)" tài sản ... nó sẽ chỉ cho phép tôi animate "(Border.Background). (SolidColorBrush.Color)" tài sản ....

Ngoại lệ trên Ví dụ thứ hai về cơ bản nói với tôi rằng "Không thể đóng băng cây dòng Storyboard này để sử dụng trên các chuỗi" ... vì vậy có vẻ như ColorAnimation đang cố gắng thực hiện việc liên kết này trong một số chủ đề khác so với chuỗi giao diện người dùng hay gì đó? Bất cứ điều gì nó đang cố gắng làm ... nó không hoạt động.

Tôi có thể làm một công việc đơn giản như thế nào?

Trả lời

7

Đối với người đầu tiên, bạn có thể sử dụng {StaticResource MyColor} với mycolor định nghĩa như vậy:

<Color x:Key="MyColor">#FF00FF00</Color> 

Tuy nhiên, điều này không giải quyết vấn đề của bạn, bạn không thể liên kết với các thuộc tính hình ảnh động từ những tài sản cần phải được đông lạnh (không thể thay đổi) để hoạt ảnh hoạt động. Hoặc là cố gắng loại bỏ sự phụ thuộc của bạn vào một ràng buộc, hoặc tạo lại bảng phân cảnh với màu sắc chính xác từ mã phía sau khi màu sắc thay đổi.

+0

Thật không may giải pháp đầu tiên sẽ chỉ hoạt động nếu có một số cách để liên kết một màu với một trong mã phía sau. Tôi có thể loại bỏ ràng buộc ràng buộc đối với hoạt ảnh của sự kiện "MouseEnter" ... có nghĩa là đối với mọi trường hợp của điều khiển này, nếu con chuột được di chuột qua nó, điều khiển sẽ chuyển sang cùng một màu. Tuy nhiên, tôi không thể loại bỏ ràng buộc đối với hoạt ảnh tương ứng của "MouseLeave" (trông giống hệt nhau) vì mỗi cá thể của đối tượng này có thể có thuộc tính BackgroundColor khác nhau và khi con chuột rời khỏi màu đó cần quay lại bình thường. – David

+0

Đối với hoạt ảnh MouseLeave, bạn có thể sử dụng chính xác cùng một phương pháp để có được hiệu ứng ngược lại bằng cách thay đổi "Tới" thành "Từ". Điều đó cho phép bạn chỉ định màu để bắt đầu và sẽ sử dụng màu gốc thay cho "Tới". Một điều khác cần lưu ý là nếu một cọ vẽ gradient được áp dụng làm Nền, các hoạt ảnh này sẽ ngừng hoạt động. –

Các vấn đề liên quan