为什么动画"高度"该属性不适用于Windows Universal App,其方式与" Opacity"相同。属性?

时间:2015-10-26 06:29:34

标签: c# animation storyboard win-universal-app rectangles

使用以下代码:

        Storyboard storyBoard = new Storyboard();
        DoubleAnimation doubleAnimation = new DoubleAnimation();
        doubleAnimation.From = From;
        doubleAnimation.To = To;
        doubleAnimation.Duration = new Duration(new TimeSpan(0, 0, 0, seconds, miliseconds));

        Storyboard.SetTarget(doubleAnimation, Target);
        Storyboard.SetTargetProperty(doubleAnimation, FrameworkElemProperty);
        storyBoard.Children.Add(doubleAnimation);
        storyBoard.Completed += storyBoard_Completed;
        storyBoard.Begin();

适用于" Opacity"作为FrameworkElemProperty,但是当我尝试设置动画"高度" /" Width"时,它不适用于Rectangle。属性。有人知道这里发生了什么吗? Microsoft Framework方面是否有任何问题,或者这需要任何魔术添加? (不透明度和高度是FrameworkElement的相同属性,所以它预期会以相同的方式运行)在Silverlight中完美地工作..

2 个答案:

答案 0 :(得分:5)

这是记录在案的行为。请参阅MSDN上的Optimize animations, media, and images

不透明度是一种“独立动画”,它不依赖于或影响其他属性或其他对象。它可以完全在组合线程上运行,并且可以高效,平稳地运行。

高度是“依赖动画”,它会在更改时强制更新整体布局。这需要同步合成线程和UI线程,并且可能导致渲染缓慢且低效。

默认情况下禁用相关动画,应尽可能避免。高度和宽度是文档中给出的具体示例,它们通常可以通过独立设置RenderTransform动画而不是更改布局来替换。

如果某个应用需要使用从属动画,那么可以通过将动画的EnableDependentAnimation属性设置为true并将整个Timeline.AllowDependentAnimations设置为true来启用它们。

答案 1 :(得分:0)

您可以更改高度值但不能为其设置动画,我不是为此而设计的。如果您想要一个具有高度的动画,您应该考虑为 ScaleTransoform.ScaleY 属性设置动画。

<[YourFrameworkElement].RenderTransform>
  <ScaleTransform x:Name="Target" ScaleX="1.0" ScaleY="1.5"/>
</[YourFrameworkElement].RenderTransform>