完全以编程方式创建故事板 C#

Creating a Storyboard fully programmatically C#

我正在尝试完全用 C# 创建故事板,完全没有 XAML,但我在使用(SetTarget 和 SetTargetProperty)时遇到了问题..这是我的代码

我只是在用户导航到我的 UserControl 时制作动画, 它在 0.5 秒内从 0 不透明度变为 100,从 900 TransformX 变为 0。

我真的很感激任何帮助设置这两个参数,一整天都没有运气!

    public void Designer()
    {
        Control_ = new UserControl();

        Control_.HorizontalAlignment = HorizontalAlignment.Stretch;
        Control_.VerticalAlignment = VerticalAlignment.Stretch;

        Control_.Name = "Control_";
        this.AddChild(Control_);

        CreateStoryboard();
    }

    public void CreateStoryboard()
    {
        fadeinBoard = new Storyboard();
        Duration duration = new Duration(TimeSpan.FromMilliseconds(5));
        fadeinBoard.Duration = duration;

        DoubleAnimationUsingKeyFrames animOpacity = new DoubleAnimationUsingKeyFrames();
        DoubleAnimationUsingKeyFrames animTransform = new DoubleAnimationUsingKeyFrames();

        animOpacity.Duration = duration;
        animTransform.Duration = duration;

        //Transform Function
        KeyTime ktime1 = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(.5));
        PowerEase pow = new PowerEase();
        pow.Power = 5;
        pow.EasingMode = EasingMode.EaseOut;
        EasingDoubleKeyFrame keyFrame1 = new EasingDoubleKeyFrame(0, ktime1, pow);

        //Opacity Function
        KeyTime ktime2 = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(.5));
        ExponentialEase expo = new ExponentialEase();
        expo.Exponent = 3;
        expo.EasingMode = EasingMode.EaseOut;
        EasingDoubleKeyFrame keyFrame2 = new EasingDoubleKeyFrame(1, ktime2, expo);

        animOpacity.KeyFrames.Add(keyFrame1);
        animTransform.KeyFrames.Add(keyFrame2);

        // MY PROBLEM IS HERE
        Storyboard.SetTarget(???, ???);
        Storyboard.SetTarget(???, ???);
        Storyboard.SetTargetProperty(???, ???);
        Storyboard.SetTargetProperty(???, ???)));

        fadeinBoard.Children.Add(animOpacity);
        fadeinBoard.Children.Add(animTransform);

        Control_.Resources.Add("fader", fadeinBoard);
    }

这对我有用:

    Storyboard.SetTarget(animOpacity, Control_);
    Storyboard.SetTarget(animTransform, Control_);
    Storyboard.SetTargetProperty(animOpacity, new PropertyPath("Opacity"));
    Storyboard.SetTargetProperty(animTransform, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));

注意从 OpacityProperty 到 Opacity 的更正,以及完全限定的 属性 语法 - 我已经将其配置为目前在 ScaleY 上工作。

这仅在您已将 RenderTransform 添加到可以使用提供的路径访问的控件时才有效,例如如下:

    ScaleTransform myScaleTransform = new ScaleTransform();
    myScaleTransform.ScaleY = 1;
    myScaleTransform.ScaleX = 1;
    TransformGroup myTransformGroup = new TransformGroup();
    myTransformGroup.Children.Add(myScaleTransform);
    Control_.RenderTransform = myTransformGroup;