DoubleAnimationUsingKeyFrames をコードで書くと、次のように面倒なことになるので、XAMLで書いて、トリガーで起動するようにしたほうがいい。とはいえ、動的にストーリーボードやトリガーをエディタで設定しておいて、それをC#で書き直すときに、デザイナーが処理できるように気をつかってあげないと、デザイナーが表示できなくなる。
private void StoryBoardScale(Storyboard sb, Label label)
{
DoubleAnimationUsingKeyFrames daukfX = new DoubleAnimationUsingKeyFrames();
DoubleAnimationUsingKeyFrames daukfY = new DoubleAnimationUsingKeyFrames();
ScaleTransform scaleTransform = new ScaleTransform();
label.RenderTransform = scaleTransform;
string name = "labelS" + num++;
this.RegisterName(name, scaleTransform);
daukfX.BeginTime = new TimeSpan(0, 0, 0);
daukfX.Duration = new TimeSpan(0, 0, 60);
daukfX.KeyFrames.Add(
new SplineDoubleKeyFrame(
0.1,
KeyTime.FromTimeSpan(new TimeSpan(0, 0, 0))));
daukfX.KeyFrames.Add(
new SplineDoubleKeyFrame(
5.0,
KeyTime.FromTimeSpan(new TimeSpan(0, 0, 60))));
Storyboard.SetTargetName(daukfX, name);
Storyboard.SetTargetProperty(daukfX, new PropertyPath(ScaleTransform.ScaleXProperty));
sb.Children.Add(daukfX);
daukfY.BeginTime = new TimeSpan(0, 0, 0);
daukfY.Duration = new TimeSpan(0, 0, 30);
daukfY.KeyFrames.Add(
new SplineDoubleKeyFrame(
0.1,
KeyTime.FromTimeSpan(new TimeSpan(0, 0, 0))));
daukfY.KeyFrames.Add(
new SplineDoubleKeyFrame(
5.0,
KeyTime.FromTimeSpan(new TimeSpan(0, 0, 60))));
Storyboard.SetTargetName(daukfY, name);
Storyboard.SetTargetProperty(daukfY, new PropertyPath(ScaleTransform.ScaleYProperty));
sb.Children.Add(daukfY);
}