2016-07-04 21 views
1

イメージを回転させるアニメーションで制御します。WPFの回転アニメーションを一時停止

いつでも回転アニメーションを開始、一時停止、再開します。

私はコードの後ろにすべてを持っている:

public partial class Wheel32Control : UserControl 
    { 

     public Wheel32Control() 
     { 
      InitializeComponent(); 
      img.RenderTransform = new RotateTransform(); 
      img.RenderTransformOrigin = new Point(0.5, 0.5); 

      _daRotate = new DoubleAnimation(0, 360, TimeSpan.FromSeconds(2)) 
      { 
       RepeatBehavior = RepeatBehavior.Forever 
      }; 
     } 

     private DoubleAnimation _daRotate; 

     private bool _rotate; 
     public bool Rotate 
     { 
      get 
      { 
       return _rotate; 
      } 
      set 
      { 
       _rotate = value; 

       if (_rotate) 
        RotateStart(); 
       else 
        RotateStop(); 
      } 
     } 

     private void RotateStart() 
     { 
      this.img.RenderTransform.BeginAnimation(RotateTransform.AngleProperty, _daRotate); 
     } 

     private void RotateStop() 
     { 
      this.img.RenderTransform.BeginAnimation(RotateTransform.AngleProperty, null); 
     } 
    } 

私のXAMLの一部:

<Image Name="img" Source="/Plt;component/Resources/Images/Kolo_32_3.png" 
      Stretch="None"/> 

私の問題:私はアニメーションを停止すると

- それは、 "ジャンプ" を "ゼロ点" 。私はそれを停止したときの位置で停止したい。

私のコードは、WPFで新しくアニメーションを「null」に設定しています。これは私が知っているアニメーションを停止するための唯一の方法です。代わりにFromToを設定することにより、アニメーションの

答えて

3

は、あなたが一定量でアニメーション化できます。

_daRotate = new DoubleAnimation 
{ 
    By = 360, 
    Duration = TimeSpan.FromSeconds(2), 
    RepeatBehavior = RepeatBehavior.Forever 
}; 

アニメーションを削除する前に、現在のアニメーション値にRotateTransformのAngleプロパティを設定します。これは、「現在有効なプロパティ値」を返すgetterプロパティを呼び出し、返された値を「ローカルプロパティ値」を設定するプロパティ設定ツールに割り当てることによって行われます。

private void RotateStop() 
{ 
    var rotateTransform = (RotateTransform)img.RenderTransform; 
    rotateTransform.Angle = rotateTransform.Angle; // looks strange, but works. 
    rotateTransform.BeginAnimation(RotateTransform.AngleProperty, null); 
} 

ライン

rotateTransform.Angle = rotateTransform.Angle; 

あなたがAngleプロパティのCLRラッパーからのコードに置き換えた場合、おそらくより良い理解しやすいかもしれません:

rotateTransform.SetValue(RotateTransform.AngleProperty, 
    rotateTransform.GetValue(RotateTransform.AngleProperty)); 
+0

ニースときれいなソリューション。 "奇妙な部分"の説明を追加してくれてありがとう! – Kamil

関連する問題