2012-03-12 14 views
1

StackPanelの読み込みユーザーコントロールにアニメーションを追加したいとします。読み込みユーザーコントロールにスケールアニメーションを追加する方法

だから私は、既存のプロジェクトにこれらの行を追加します。

control.Loaded += UserControlLoaded; 

public void UserControlLoaded(object sender, System.Windows.RoutedEventArgs e) 
    { 
     UserControl control = (UserControl)sender; 

     DoubleAnimation fadeInAnimation = new DoubleAnimation(0, 1, new Duration(TimeSpan.FromSeconds(5))); 
     Storyboard.SetTarget(fadeInAnimation, control); 
     Storyboard.SetTargetProperty(fadeInAnimation, new PropertyPath(UIElement.OpacityProperty)); 
     Storyboard sb = new Storyboard(); 
     sb.Children.Add(fadeInAnimation); 
     sb.Begin(); 
    } 

それは良い作品が、私は0から1までの両方の軸にユーザーコントロールを拡張するためにそれを変更したいです2秒以内にストーリーボードのターゲットプロパティをLayoutTransformのX軸とY軸に設定するコードが見つかりません!

変換は、この方法によって、MSのブレンドで作られた:

私はプログラム的にそれを行うことができますどのように。

ご迷惑をおかけして申し訳ありません。

答えて

3

コントロールのLayoutTransformをアニメートするコードは、使用するTransformの種類によって異なります。 LayoutTransformをブレンドして作られた

FrameworkElement control = sender as FrameworkElement; 
ScaleTransform transform = control.LayoutTransform as ScaleTransform; 
DoubleAnimation scaleAnimation = 
    new DoubleAnimation(0, 1, new Duration(TimeSpan.FromSeconds(2))); 

transform.BeginAnimation(ScaleTransform.ScaleXProperty, scaleAnimation); 
transform.BeginAnimation(ScaleTransform.ScaleYProperty, scaleAnimation); 

が、それは単に最も確かScaleTransformではありませんが、最初の子としてScaleTransformとTransformGroup:それは単にScaleTransformであると仮定すると、あなたはこれを書くことができます。あなたはこのような何かによってScaleTranformを取得することができます。

TransformGroup transformGroup = control.LayoutTransform as TransformGroup; 
ScaleTransform transform = transformGroup.Children[0] as ScaleTransform; 

そして再び私はこのような変換をアニメーション化すると、ストーリーボードによっては動作しません理由を忘れてしまいました。 ScaleTransformオブジェクトでBeginAnimationを直接呼び出すのではなく、以下のコードを試しましたが、成功しませんでした。

DoubleAnimation xScaleAnimation = 
    new DoubleAnimation(0, 1, new Duration(TimeSpan.FromSeconds(2))); 
Storyboard.SetTarget(xScaleAnimation, transform); 
Storyboard.SetTargetProperty(xScaleAnimation, 
    new PropertyPath(ScaleTransform.ScaleXProperty)); 

DoubleAnimation yScaleAnimation = 
    new DoubleAnimation(0, 1, new Duration(TimeSpan.FromSeconds(2))); 
Storyboard.SetTarget(yScaleAnimation, transform); 
Storyboard.SetTargetProperty(yScaleAnimation, 
    new PropertyPath(ScaleTransform.ScaleYProperty)); 

Storyboard sb = new Storyboard(); 
sb.Children.Add(xScaleAnimation); 
sb.Children.Add(yScaleAnimation); 
sb.Begin(); 
+0

**ありがとうございます**。そして、私は '(PropertyPath)new PropertyPathConverter()。ConvertFromString("(FrameworkElement.RenderTransform)。(ScaleTransform.ScaleX) ")'を使ってアニメーションをscaleプロパティに関連付けました。 –