将CompositeTransform动画为独立动画(EnableDependentAnimation == false)

时间:2012-10-01 12:45:11

标签: c# windows-runtime windows-phone

我在Windows Phone 7中使用以下代码来动画CompositeTransform

        var da = new DoubleAnimationUsingKeyFrames() ;
        _storyboard.Children.Add (da);
        _translateXKeyFrame = new EasingDoubleKeyFrame {...}
        da.KeyFrames.Add (_translateXKeyFrame);
        Storyboard.SetTarget (da, _transform);
        Storyboard.SetTargetProperty(da, "TranslateX");

为我使用此代码的属性设置动画:

        _translateXKeyFrame.Value = value;
        _storyboard.Begin ();

遗憾的是,此代码不适用于winrt(动画无法运行)。

对于winrt,存在依赖和独立动画的概念。如果我设置EnableDependentAnimation标志,那么动画似乎就会运行。问题是,动画仅在用户完成与触摸屏的交互后才会运行。

我猜其原因是UI线程在用户执行某些操作时被阻止,因此依赖动画将无法运行。

为什么动画在作为独立动画运行时不起作用(即EnableDependentAnimation设为false)?

2 个答案:

答案 0 :(得分:1)

无需为动画转换值设置EnableDependentAnimation属性。 WinRT始终建议为值设置动画,这不会影响布局,以便动画不会阻止UI线程。要为Height / Width等属性设置动画,必须将EnableDependentAnimation设置为true。

RenderTransform和投影值可以是动画而不设置此属性。

http://www.codeproject.com/Articles/415721/Fast-and-Fluid-Animations-in-your-Windows-UI-App

答案 1 :(得分:1)

此代码有效。

image1.RenderTransform = new TranslateTransform(); 

animateY = new DoubleAnimation();
animateY.from=0;
animateY.To += 200;
animateY.Duration = TimeSpan.FromMilliseconds(400);

Storyboard.SetTarget(animateY, image1.RenderTransform);
Storyboard.SetTargetProperty(animateY, "TranslateTransform.Y");

_story.Children.Add(animateY);