有没有一种简单的方法可以防止我的弹性缓动缓动函数在对高度和宽度属性进行动画处理时达到负值?

问题描述 投票:0回答:1
      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 的实际宽度和高度属性的能力。如果这是唯一可行的解决方法,是否有内置方法来访问缩放元素的“缩放高度”,或者我需要自己跟踪它?

嗯...写下所有这些,我觉得我的主要问题可能是固执和/或懒惰...感谢您的任何见解!

c# animation uwp
1个回答
0
投票

我使用 CompositeTransform(作为 RenderTransform)和动画 .ScaleY(而不是直接 .Height)获得了我想要的缩放效果,其中 1.0f 是“无”。

动画运行时,您可以使用以下方法获取缩放后的高度:

double h = [元素].ActualHeight + [变换].ScaleY;

这一切都发生在“视觉层”。根据您的目标,如果这些“动画”值是(动画)进程的一部分,则需要保存它们,因为一旦动画正常结束或“停止”,它们(通常)就会“恢复”。

© www.soinside.com 2019 - 2024. All rights reserved.