2012-08-09 45 views
2

嗯,我有两个问题都与动画有关。动画无法在Wpf中工作

1)以下代码不会为tittle和border设置动画效果,我会像这样调用以下代码.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(); 
} 
+1

当你说this.FadeIn(),你的意思是你是用它作为类型的UIElement的扩展方法?那是对的吗? – Landern 2012-08-09 16:35:37

+1

是的,我使用这个作为扩展方法 – Haider 2012-08-09 16:40:05

回答

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> 

不知道为什么你的淡入将无法正常工作,但你的SkewAnimation不能因属性路径工作。没有为UIElement定义​​。属性路径必须是这样的(再次提供的RenderTransform设置为SkewTransform):

new PropertyPath("RenderTransform.(SkewTransform.AngleXProperty)"); 
+1

无法投射'System.Windows.Media.MatrixTransform'类型的对象来键入'System.Windows.Media.SkewTransform'。当我打电话给你的歪斜方法和 并在我的歪斜函数时,当我改变你说的下面的异常发生无法解决属性路径'RenderTransform。(SkewTransform.AngleXProperty)'中的所有属性引用。验证适用的对象是否支持这些属性。 – Haider 2012-08-09 17:38:03

+1

那么,你还没有发布相关的代码。我只能猜测你已经放入RenderTransform属性,或者甚至是RenderTransform。在我的例子中,我假定RenderTransform被设置为一个SkewTransform实例。这取决于你。 – Clemens 2012-08-09 17:43:56

+1

谢谢,它现在有效,但为什么tittle上的动画不起作用 – Haider 2012-08-09 18:00:03