私は動作する次の方法を持っています。Storyboard を返すユーティリティ メソッドに入れたいと思います。これをストーリーボードに変換する試みはすべて失敗し、調査に多くの時間を費やしました。誰かが私の助けに来ない限り、私はあきらめる準備ができています.
変換したいコードは次のとおりです。
public override void Begin(FrameworkElement element, int duration)
{
var transform = new ScaleTransform();
element.LayoutTransform = transform;
var animation = new DoubleAnimation
{
From = 1,
To = 0,
Duration = TimeSpan.FromMilliseconds(duration),
FillBehavior = FillBehavior.Stop,
EasingFunction = new QuinticEase { EasingMode = EasingMode.EaseIn }
};
transform.BeginAnimation(ScaleTransform.ScaleXProperty, animation);
transform.BeginAnimation(ScaleTransform.ScaleYProperty, animation);
}
したがって、2 つの BeginAnimation() 呼び出しの代わりに、Storyboard を返したいので、storyboard.Begin() を呼び出すだけです。これがそれほど難しいことではないことはわかっていますが、私はそれを理解していません。
ありがとう。
編集:HBの提案に応えて、次のコードを試しましたが、まだ機能しません:
private static Storyboard CreateAnimationStoryboard(FrameworkElement element, int duration)
{
var sb = new Storyboard();
var scale = new ScaleTransform(1, 1);
element.RenderTransform = scale;
element.RegisterName("scale", scale);
var animation = new DoubleAnimation
{
From = 1,
To = 0,
Duration = TimeSpan.FromMilliseconds(duration),
FillBehavior = FillBehavior.Stop,
EasingFunction = new QuinticEase { EasingMode = EasingMode.EaseIn }
};
sb.Children.Add(animation);
Storyboard.SetTarget(animation, scale);
Storyboard.SetTargetProperty(animation, new PropertyPath(ScaleTransform.ScaleXProperty));
return sb;
}
私は X 軸だけをアニメーション化したことを知っています。最初に何かを動かしたいだけです。