我有以下方法可行。我想把它放在一個返回故事板的實用程序方法中。我將這個轉換成Storyboard所做的每一次嘗試都失敗了,我花了很多時間研究。除非有人來拯救我,我已經準備好放棄了。將C#動畫代碼轉換爲故事板
這是我要轉換的代碼:
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);
}
因此,而不是兩個BeginAnimation()調用,我想回到一個故事板,因此所有我需要做的就是調用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軸 - 只是想要得到的東西先工作。
是的,我得到了那麼多。也許你提到的複雜問題的細節可能會有幫助? – 2012-07-29 18:52:33
@DanThomas:[This](http://stackoverflow.com/a/4567058/546730)聽起來像是這個問題。 – 2012-07-29 18:59:50
謝謝,但那個特別的問題是如果你正在代碼中創建一個框架元素,我不這樣做。框架元素已經通過xaml存在,我通過附加的行爲調用這個方法。任何其他想法? :) – 2012-07-29 19:12:19