2

好吧,我有两个与动画有关的问题。

1) 下面的代码不会为标题和边框设置动画,我像 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();
    }

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

1 回答 1

6

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

public static void FadeIn(this UIElement element)
{
    element.BeginAnimation(
        UIElement.OpacityProperty,
        new DoubleAnimation(0d, 1d, TimeSpan.FromSeconds(1.5)));
}

并且,只要元素的RenderTransform属性设置为 SkewTransform:

public static void SkewAnimation(this UIElement element)
{
    ((SkewTransform)element.RenderTransform).BeginAnimation(
        SkewTransform.AngleXProperty,
        new DoubleAnimation(0d, 360d, TimeSpan.FromSeconds(3d)));
}

编辑:这需要类似的东西

element.RenderTransform = new SkewTransform();

或在 XAML 中:

<SomeElement>
    <SomeElement.RenderTransform>
        <SkewTransform />
    </SomeElement.RenderTransform>
</SomeElement>

不知道为什么您的 FadeIn 不起作用,但您的 SkewAnimation 由于属性路径而无法工作。SkewTransform.AngleXProperty没有为 UIElement 定义。属性路径必须是这样的(再次假设 RenderTransform 设置为 SkewTransform):

new PropertyPath("RenderTransform.(SkewTransform.AngleXProperty)");
于 2012-08-09T17:08:03.827 回答