2010-06-07 88 views
5

我想做一些看起來很簡單的事情,但我無法弄清楚如何去做。我有MouseEnter事件發生時觸發的ColorAnimation。它只是將邊框的背景顏色從一種顏色更改爲另一種顏色。如何綁定到WPF ColorAnimation中的顏色?

不幸的是,我無法弄清楚如何將任何東西,但硬編碼的顏色到這個ColorAnimation。因此,目前看起來是這樣的:

<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> 

不過,我想做些什麼或者是這樣的:

<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> 

或者這樣:

<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> 

當我做其中之一那些,拋出異常。首先,它會拋出一個異常,告訴我基本上「Color」屬性不能使用SolidColorBrush值......這是有道理的......但它肯定不會幫助我,因爲ColorAnimation不會讓我動畫「(Border.Background)。(SolidColorBrush)」屬性...它只會讓我爲「(Border.Background)。(SolidColorBrush.Color)」屬性設置動畫效果....

第二個例子基本上告訴我,它「無法凍結這個Storyboard時間線樹以供跨線程使用」......所以它聽起來像ColorAnimation試圖在除UI線程之外的其他線程中執行此綁定?無論它試圖做什麼......它都不起作用。

我怎麼能做這麼簡單的工作?

回答

7

對於第一個,你可以使用{StaticResource MyColor}被定義爲這樣的MyColor:

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

然而,這並不能解決您的問題:你不能綁定到動畫屬性,因爲這些屬性必須是凍結(不可更改)以供動畫工作。試着去除對綁定的依賴,或者在顏色改變時用代碼中的正確顏色重新創建故事板。

+0

不幸的是,第一種解決方案只有在某種方式將顏色綁定到背後代碼中時才起作用。我可以安全地擺脫「MouseEnter」事件動畫的綁定......這意味着對於此控件的每個實例,如果鼠標懸停在它上面,控件將轉爲相同的顏色。但是,我不能安全地擺脫相應的「MouseLeave」事件動畫的綁定(外觀完全相同),因爲此對象的每個實例都可能具有不同的BackgroundColor屬性,並且當鼠標離開該顏色需要返回到正常。 – David 2010-06-07 22:04:47

+0

對於MouseLeave動畫,您可以使用完全相同的方法通過將「To」更改爲「From」來獲得相反的效果。這可讓您指定開始的顏色,並使用原來的顏色代替「到」。另外需要注意的是,如果使用漸變畫筆作爲背景,這些動畫將停止工作。 – 2010-06-08 01:49:11