2011-01-05 13 views
2

私はバックラウンドカラーのアニメーションを作成する四角形を持っています。データトリガーを使用したWPFアニメーション

特定の数字が上がるたびに緑色に変わります。そして、それが一人暮らしになると赤。それはゆっくりだから、アニメーションは非常に迅速にグレーから赤に目の背景を変更して戻って灰色にフェードインするのに数秒かかるバック既定の色

にフェードインしながら、数が変化しない場合。

私は数が、問題は数が再起動されませんアニメーションをいっている場合ということです

をどのように変化したかに応じて、1または-1に結合しているDataTriggerとして追加されました。

数字のシーケンスは1、2、3、4、5を行った場合、私は私が使用していたコードが

<Rectangle.Style> 
    <Style> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding BidChangeDirectionIndicator}" 
         Value="-1"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard x:Name="bidDownStory"> 
         <Storyboard> 
          <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)"> 
           <EasingColorKeyFrame KeyTime="0" 
                Value="#FF79797A" /> 
           <EasingColorKeyFrame KeyTime="0:0:0.2" 
                Value="#FFF13B29" /> 
           <EasingColorKeyFrame KeyTime="0:0:10.0" 
                Value="#FF79797A" /> 
          </ColorAnimationUsingKeyFrames> 
          <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)"> 
           <EasingColorKeyFrame KeyTime="0" 
                Value="#FF2B2B2B" /> 
           <EasingColorKeyFrame KeyTime="0:0:0.2" 
                Value="#FF3F0606" /> 
           <EasingColorKeyFrame KeyTime="0:0:10.0" 
                Value="#FF2B2B2B" /> 
          </ColorAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
       <DataTrigger.ExitActions> 
        <StopStoryboard BeginStoryboardName="bidDownStory" /> 
       </DataTrigger.ExitActions> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

とViewModelに私の下にあるアニメーションは、各番号の変更で

を再開したいと思いますたびに呼び出されるメソッドこの

private int _bidChangeDirectionIndicator; 
public int BidChangeDirectionIndicator 
{ 
    get { return _bidChangeDirectionIndicator; } 
    set 
    { 
     _bidChangeDirectionIndicator = value; 
     RaisePropertyChanged("BidChangeDirectionIndicator"); 
    } 
} 

.... 

public void Update(RateInfo rateInfo) 
{ 
    if (rateInfo.Bid != Bid) 
    { 
     BidChangeDirectionIndicator = Math.Sign(rateInfo.Bid - Bid); 
    }    
} 

のように見えるに結合してい番号の変更

+0

それは、これを再作成することは困難です。クラスコードも投稿できますか?私の頭の上から、これらのアニメーションに 'FillBehavior =" Stop "を入れてみましたか? – decyclone

+0

hi - 上記の重要なビットを追加しました。あなたはループで2秒ごとに更新を呼び出すクラスでこれを再現することができると思います。 – ChrisCa

+0

また、FillBehaviour = "Stop"は残念ながら動作しませんでした – ChrisCa

答えて

0

[警告(これは、外部フィードを聴いているクラスによって行われます):私は持っていませんこれを再現してテストする時間がありました。私はちょうどそれが助けになると思った。]

トリガーが発射されない理由は値が変わらないということです。例えば、あなたが上昇し続けると、BidChangeDirectionIndicatorの値は1のままです。

おそらく最も簡単なことは、別の値(0)に設定してから、必要な値に設定することです。

public void Update(RateInfo rateInfo) 
{ 
    if (rateInfo.Bid != Bid) 
    { 
     BidChangeDirectionIndicator = Math.Sign(rateInfo.Bid - Bid); 
    }    
    else 
    { 
     BidChangeDirectionIndicator = 0; 
     BidChangeDirectionIndicator = rateInfo.Bid; 
    } 
} 
関連する問題