以下代码最初是我转换为WinRT的WPF应用程序的一部分;然而,当试图运行动画时,它们似乎是互斥的(也就是说,它们都有效,但一次只有一个 - 而在WPF中我可以一起运行它们):
private void SpinAndDisappear_Click(object sender, RoutedEventArgs e)
{
UIElement obj = (UIElement)SpinAndDisappear;
obj.RenderTransform = new CompositeTransform();
var story = new Storyboard();
var xAnim = new DoubleAnimation();
var yAnim = new DoubleAnimation();
xAnim.Duration = TimeSpan.FromSeconds(2);
yAnim.Duration = TimeSpan.FromSeconds(2);
xAnim.To = 0;
yAnim.To = 0;
story.Children.Add(xAnim);
story.Children.Add(yAnim);
Storyboard.SetTarget(xAnim, obj);
Storyboard.SetTarget(yAnim, obj);
Storyboard.SetTargetProperty(xAnim, "(UIElement.RenderTransform).(CompositeTransform.ScaleX)");
Storyboard.SetTargetProperty(yAnim, "(UIElement.RenderTransform).(CompositeTransform.ScaleY)");
story.Begin();
SpinAnimation(); // If commented out, the button changes size,
// and if not, it spins, but not both
}
void SpinAnimation()
{
UIElement obj = (UIElement)SpinAndDisappear;
obj.RenderTransform = new RotateTransform();
var storySpin = new Storyboard();
var spinAnim = new DoubleAnimation();
spinAnim.Duration = TimeSpan.FromSeconds(2);
spinAnim.From = 0;
spinAnim.To = 360;
storySpin.Children.Add(spinAnim);
Storyboard.SetTarget(spinAnim, obj);
Storyboard.SetTargetProperty(spinAnim, "(UIElement.RenderTransform).(RotateTranform.Angle)");
storySpin.Begin();
}
所以我的问题是:如何在WinRT中同时进行这两项工作?
答案 0 :(得分:1)
只有一个Storyboard可以在WinRT / XAML中的单个元素上运行。如果你需要彼此独立地运行其中两个 - 最简单的方法是拥有两个元素并定位单独的元素。在您的情况下,您可以拥有一个Grid
的父ScaleTransform
和一个RotateTransform
的子控件。然后,您可以调用Storyboard.SetTarget()
在单独的故事板中定位单独的变换,一切都应该正常工作。