我有两个与动画有关的问题.
1)下面的代码没有设置tittle和border的动画我正在调用下面的this.FadeIn(),这当然是UIElement类型.
public static void FadeIn(this UIElement targetControl)
{
DoubleAnimation fadeInAnimation = new DoubleAnimation(0, 1, new Duration(TimeSpan.FromSeconds(1.5)));
Storyboard.SetTarget(fadeInAnimation, targetControl);
Storyboard.SetTargetProperty(fadeInAnimation, new PropertyPath(UIElement.OpacityProperty));
Storyboard sb = new Storyboard();
sb.Children.Add(fadeInAnimation);
sb.Begin();
}
Run Code Online (Sandbox Code Playgroud)
2)这也不起作用,没有显示动画.
public static void SkewAnimation(this UIElement targetControl)
{
DoubleAnimation skewAnimation = new DoubleAnimation(0, 360, new Duration(TimeSpan.FromSeconds(3)));
Storyboard.SetTarget(skewAnimation, targetControl);
Storyboard.SetTargetProperty(skewAnimation, new PropertyPath(SkewTransform.AngleXProperty));
Storyboard sb = new Storyboard();
sb.Children.Add(skewAnimation);
sb.Begin();
}
Run Code Online (Sandbox Code Playgroud)
为什么不简单地像这样动画:
public static void FadeIn(this UIElement element)
{
element.BeginAnimation(
UIElement.OpacityProperty,
new DoubleAnimation(0d, 1d, TimeSpan.FromSeconds(1.5)));
}
Run Code Online (Sandbox Code Playgroud)
并且,只要元素的RenderTransform属性设置为SkewTransform:
public static void SkewAnimation(this UIElement element)
{
((SkewTransform)element.RenderTransform).BeginAnimation(
SkewTransform.AngleXProperty,
new DoubleAnimation(0d, 360d, TimeSpan.FromSeconds(3d)));
}
Run Code Online (Sandbox Code Playgroud)
编辑:这需要类似的东西
element.RenderTransform = new SkewTransform();
Run Code Online (Sandbox Code Playgroud)
或者在XAML中:
<SomeElement>
<SomeElement.RenderTransform>
<SkewTransform />
</SomeElement.RenderTransform>
</SomeElement>
Run Code Online (Sandbox Code Playgroud)
不确定为什么你的FadeIn不起作用,但由于属性路径,你的SkewAnimation无法工作.SkewTransform.AngleXProperty没有为UIElement定义.属性路径必须是这样的(再次提供RenderTransform设置为SkewTransform):
new PropertyPath("RenderTransform.(SkewTransform.AngleXProperty)");
Run Code Online (Sandbox Code Playgroud)