2010-11-26 3 views
0

このプロジェクトは、c#under netの下にあります。カスタムオブジェクトへのバインディングの値にコントロールの回転をアニメーション化

私は値を頻繁に変更するカスタムオブジェクトを持っています。 UIコントロールは最新の状態を反映する必要があります。つまり、バインディングを使用しようとしていますが、接続できません。

オブジェクトの値が変更されたとき(バインディング?)にコントロールに通知してから、(Storyboard?)を1/2秒以上新しい値にアニメートする必要があります。それは方向特有のものなので、古い値が340度で、新しい値が15度の場合、私はそれを「長い道のり」で回転させたくないので、どこかでアニメーションのロジックが必要になります。

理想的には、このアニメーションの詳細のすべてはUI(xaml)になければなりません - 更新されたオブジェクトはUIの詳細を知りたくありません。 Blend4のツールはうまく機能していないようですが、xamlのハッキングはどこにもありません。

ソースオブジェクトの変更をリッスンしてからアニメーションを構成するオブジェクトが必要でしょうか毎回?それはxamlにあるべきですか? 「本当の」コード?

誰にでも正しいアプローチをとることができますか?あるいは、誰かがかなり類似したブログをしていることを指摘できますか?私は2日間このままでいました。

答えて

0

アニメーションの責任に関して行ったり来たりした後、設計者の恐怖は、それが働いてき実際のブレンドでコードを詰め、そして、私は(暫定)...種類のソリューションに到着しました

private void initialiseCustomAnimations() 
{ 

    compassRoseAnimation = new DoubleAnimation(); 
    compassRoseAnimation.Duration = new Duration(TimeSpan.FromSeconds(2)); 
    navigationData.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(navigationData_PropertyChanged); 

} 

、これは(CompassWithNumbersControlがブレンドに建てられたキャンバスです)ガッツです:これは、起動時にMainWindow.xaml.csで呼び出され

private void navigationData_PropertyChanged(object sender, EventArgs e) 
{ 
    compassRoseAnimation.From = navigationData.previousHeading; 
    compassRoseAnimation.To = navigationData.heading; 
    RotateTransform rotateTransform = new RotateTransform(); 
    CompassWithNumbersControl.RenderTransform = rotateTransform; 
    rotateTransform.BeginAnimation(RotateTransform.AngleProperty, compassRoseAnimation); 
} 

正しいイベントが発生するとこのアニメーションを実行する必要がありますが、動作します。