ストーリーボードをC#で手書きすると

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);
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です