【发布时间】:2018-02-14 14:04:13
【问题描述】:
我正在尝试使用 UWP 社区工具包 中的动画在我的 uwp 应用程序中的 UI 元素上获得晃动(或抖动效果)。如果我在上面放一个旋转动画,它会像预期的那样完美。但我实际上是在尝试将它们链接起来,然后将它们放在一个事件中的循环中,这样 ui 元素就会像在摇晃一样循环。
为此,我正在尝试以下代码。
var parent = panel?.Parent as UIElement;
if (parent != null)
{
while (true)
{
var animation = new RotationAnimation() { To = 0.3, Duration = TimeSpan.FromMilliseconds(100) };
animation.StartAnimation(panel);
var animation2 = new RotationAnimation() { From = 0.3, To = 0, Duration = TimeSpan.FromMilliseconds(100) };
animation2.StartAnimation(parent);
var animation3 = new RotationAnimation() { To = -0.3, Duration = TimeSpan.FromMilliseconds(100) };
animation3.StartAnimation(panel);
var animation4 = new RotationAnimation() { From = -0.3, To = 0, Duration = TimeSpan.FromMilliseconds(100) };
animation4.StartAnimation(parent);
}
}
如您所见,我正在从一些逻辑中获取我的 UI 元素,然后我尝试将 4 个旋转动画 1 个一个接一个地链接。
- 顺时针旋转一点
- 恢复正常状态。
- 逆时针旋转一点
- 恢复正常状态。
这应该会产生我想要的 抖动效果,但我的 应用实际上挂起(而且我没有得到任何 异常),即使我尝试在没有 while loop 的情况下做到这一点。我试图首先创建它,然后我的目标是在一个函数中使其 asyncronous ,以便我可以在一个元素上调用它,然后从另一个事件或方法停止动画。
我感觉这可能不是从 UWP 社区工具包链接这些动画的正确方法,这就是 UI 冻结的原因,还有更好的方法吗?
我也知道类似 panel.Rotate() 的扩展方法,它也由社区工具包提供,但我不想使用它们,因为我必须提供 面板的centerX和centerY,我在其他场景中已经在相同的对象上使用了缩放动画,所以我不确定如何提供UI的centerX和centerY元素。
我也在那个特定的 ui 元素上使用 extensions:VisualEx.NormalizedCenterPoint="0.5,0.5,0" ,这就是为什么我对提供中心点有点困惑,因此想要使用这个 RotationAnimation 类,它不采用任何中心点并自动检测中心点作为元素的中心,这可能是因为我设置了那个 xaml 属性。
【问题讨论】:
标签: xaml animation uwp uwp-xaml windows-community-toolkit