完全以编程方式创建故事板 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;
我正在尝试完全用 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;