动画无法在Wpf中工作

Hai*_*der 2 c# wpf

我有两个与动画有关的问题.

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)

Cle*_*ens 6

为什么不简单地像这样动画:

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)