2013-08-12 74 views
3

我havea控制模板有一個文本框觸發這樣如何重置彩色動畫它與WPF動畫觸發前的顏色和動畫

<ControlTemplate.Triggers> 
    <EventTrigger RoutedEvent="Binding.TargetUpdated"> 
     <BeginStoryboard> 
      <Storyboard> 
       <ColorAnimationUsingKeyFrames 
        Storyboard.TargetName="Border" 
        Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"> 
        <EasingColorKeyFrame KeyTime="0:0:0.20" Value="Yellow"/> 
        <EasingColorKeyFrame KeyTime="0:0:1" Value="{Binding ElementName=Border, Path=Background.SolidColorBrush.Color}"/> 
       </ColorAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
</ControlTemplate.Triggers> 

的想法部分是,每當結合目標被更新的文本框會脈衝黃色。我的用戶界面在控件之間存在複雜的依賴關係,我希望用戶在通過簡單的視覺提示進行更改時收到通知。

我上面的問題是將文本框背景的顏色重置爲之前的顏色。如果我將它製作回白色,這可能不是原來的顏色。有幾種視覺狀態,即normaldisabledenabled

所以我想脈衝黃色,然後返回到它以前的顏色。但是,如果我嘗試到最後關鍵幀的顏色結合我得到這樣

Cannot freeze storyboard to be used across multiple threads. 

錯誤有兩種辦法來清除動畫的結果它完成或正確的顏色結合的動態後自動?

+0

您不能在'Storyboard'中使用表達式綁定。請參閱[這裏](http://msdn.microsoft.com/en-us/library/ms742868.aspx)('樣式中的動畫')。相反,使用例如附加的依賴項屬性來存儲'Background'的前一個值。 –

回答

3

您可以將動畫的FillBehavior設置爲Stop。動畫屬性將自動恢復到動畫開始之前的值。

<ColorAnimationUsingKeyFrames FillBehavior="Stop" 
    Storyboard.TargetName="Border" 
    Storyboard.TargetProperty="Background.Color"> 
    ... 
</ColorAnimationUsingKeyFrames>