Storyboard storyboard = new Storyboard();
DoubleAnimation growAnimation = new DoubleAnimation();
growAnimation.Duration = TimeSpan.FromMilliseconds(500);
growAnimation.EasingFunction = new ElasticEase()
{
EasingMode = EasingMode.EaseOut,
Oscillations = 2,
Springiness = 10
};
growAnimation.To = thesize;
Storyboard.SetTarget(growAnimation, TheUIElement);
Storyboard.SetTargetProperty(growAnimation, "Height");
storyboard.Children.Add(growAnimation);
storyboard.Begin();
当我想调整 UIElement 的高度和宽度的大小时,我在动画中使用弹性缓出 EasingFunction。动画看起来很棒,我对到目前为止的结果非常满意 - 但是当我做出很大的改变(从大到小)时,EaseOut EasingFunction 会导致高度和宽度在负值之间循环,从而使我的应用程序崩溃。有没有简单的方法可以防止这种情况发生?
我知道我可以缩放 UIElement,这似乎不会引发相同的错误,但我失去了解决 UIElement 的实际宽度和高度属性的能力。如果这是唯一可行的解决方法,是否有内置方法来访问缩放元素的“缩放高度”,或者我需要自己跟踪它?
嗯...写下所有这些,我觉得我的主要问题可能是固执和/或懒惰...感谢您的任何见解!
我使用 CompositeTransform(作为 RenderTransform)和动画 .ScaleY(而不是直接 .Height)获得了我想要的缩放效果,其中 1.0f 是“无”。
动画运行时,您可以使用以下方法获取缩放后的高度:
double h = [元素].ActualHeight + [变换].ScaleY;
这一切都发生在“视觉层”。根据您的目标,如果这些“动画”值是(动画)进程的一部分,则需要保存它们,因为一旦动画正常结束或“停止”,它们(通常)就会“恢复”。