使用以下代码:
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中完美地工作..
答案 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>