2011-07-30 6 views
2

TranslateTransformクラスを使用してY軸上のグリッド上のイメージを移動しようとしています。私はSetMarginやSetCanvasを使うことができないように、この動きを円滑にする必要があります。私はコード内でこれを試しています:WPF TranslateTransform

私が使用したいオブジェクト(Imageコントロール)はグリッド上に配置されています。 初めてのことはすべて正常に動作します。 同じ機能を使用してオブジェクトを再度移動しようとすると問題が発生します。 オブジェクト(Imageコントロール)が最初に開始位置(最初のY座標)に移動し、アニメーションが開始されます。

TranslateTransformで座標(私の場合はMarginプロパティ)を変更することはできませんか?

ありがとうございます。

答えて

1

トランスフォームによって元の値が変更されることはありません。これらの値は原点です。移動するたびに新しい原点が必要な場合は、アニメーション完了イベントを処理できます。または、トランスフォームから現在のオフセットを取得し、アニメーションの新しい開始点にすることができます。

言い換えれば、あなたのスタート値は、常に値

0

TranslateTransformは、レンダリング変換の特定の種類であるにあなたの最後の動きになります。むしろコントロールのプロパティ(Marginプロパティなど)を変更するだけで、コントロールが画面上でどのように表示されるかに影響します。

0

あなたは明示的に0から開始するようにアニメーションに指示しました。あなたが話したことをやっています。 明示的なゼロのfromvalueを削除するだけですべてが動作します。

var anim2 = new DoubleAnimation(newY, TimeSpan.FromSeconds(2)) 
       { EasingFunction = new SineEase() }; 
0

DoubleAnimationのByプロパティを使用する必要があります。 試してみてください:

//everytime you execute this anmation your object will be moved 2.0 further 
double offset = 2.0 
var anim2 = new DoubleAnimation(newY, TimeSpan.FromSeconds(2)); 
anim2.To = null; 
anim2.By = offset; 
関連する問題