2012-04-11 8 views
1

xamlの代わりにコードビハインドで「古い学校」の方法でアニメーションを適用できますか?RenderTransformを使ったコードビハインドforループのアニメーション

私は自分自身のforループで簡単に行うことができる 'バウンス効果'を持つものを指し示す矢印がほしいだけです。しかし、私はどのようにリフレッシュするか、ループ内でタイマーの遅延を行うか分からない。私は既に、コードビハインドの中にイメージを配置しました。私がやりたいことのすべては、古い学校のような何の学校はありません。この単純なアニメーション...

public void validationArrow() 
{ 

    var validationArrow = new Image(); 
    validationArrow.Source = new BitmapImage(new Uri("/SlProject;component/arrow.png", UriKind.RelativeOrAbsolute)); 
    LayoutRoot.Children.Add(validationArrow); 
    validationArrow.Stretch = Stretch.None; 
    validationArrow.VerticalAlignment = System.Windows.VerticalAlignment.Top; 
    validationArrow.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; 
    var arrowPosition = new TranslateTransform { X = 0, Y = 0 }; 
    validationArrow.RenderTransform = arrowPosition; 

    validationArrow.Name = "validationArrow"; 

    for (int i = 150; i >= 0; i--) 
    { 
     arrowPosition.X = i; 
     validationArrow.RenderTransform = arrowPosition; 
     // how can I refresh screen and do some timing here? 
    } 
} 

答えて

3

である。)ここで 、これはあなたの方法であなたを助ける必要があります。 millisecondとYの変換値をBuildEasingメソッドに渡して再生すると、 'バウンス'エフェクトの速度と距離を変更できます。

private void RunStoryboard() 
    { 
     var arrowImage = new Image(); 
     arrowImage.RenderTransform = new CompositeTransform(); 
     arrowImage.Source = new BitmapImage(new Uri("/SlProject;component/arrow.png", UriKind.RelativeOrAbsolute)); 
     LayoutRoot.Children.Add(arrowImage); 

     Storyboard storyboard = new Storyboard(); 
     storyboard.Children.Add(BuildKeyFrame(arrowImage)); 
     storyboard.Begin(); 
    } 

    private DoubleAnimationUsingKeyFrames BuildKeyFrame(Image target) 
    { 
     DoubleAnimationUsingKeyFrames kf = new DoubleAnimationUsingKeyFrames(); 
     Storyboard.SetTarget(kf, target); 
     Storyboard.SetTargetProperty(kf, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)")); 

     kf.KeyFrames.Add(BuildEasing(100, 10)); 
     kf.KeyFrames.Add(BuildEasing(200, 0)); 
     kf.KeyFrames.Add(BuildEasing(300, 10)); 
     kf.KeyFrames.Add(BuildEasing(400, 0)); 
     kf.KeyFrames.Add(BuildEasing(500, 10)); 
     kf.KeyFrames.Add(BuildEasing(600, 0)); 

     return kf; 
    } 

    private EasingDoubleKeyFrame BuildEasing(int ms, int value) 
    { 
     return new EasingDoubleKeyFrame() 
     { 
      KeyTime = KeyTime.FromTimeSpan(new TimeSpan(0, 0, 0, 0, ms)), 
      Value = value 
     }; 
    } 
+0

サンプルコードはすぐに機能しました。再度、感謝します。 – Dave

+0

あなたは大歓迎です@他の質問があれば、お気軽にお立ち寄りください。 – KodeKreachor

+0

実際には、矢印イメージを消すための迅速な方法があるのでしょうか?アニメーションの1秒後、またはアニメーションの開始直前にクリア画像がある場合は.... – Dave

関連する問題