在Windows应用商店应用中运行多个动画

时间:2013-11-26 17:46:06

标签: wpf xaml windows-runtime windows-store-apps winrt-xaml

以下代码最初是我转换为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中同时进行这两项工作?

1 个答案:

答案 0 :(得分:1)

只有一个Storyboard可以在WinRT / XAML中的单个元素上运行。如果你需要彼此独立地运行其中两个 - 最简单的方法是拥有两个元素并定位单独的元素。在您的情况下,您可以拥有一个Grid的父ScaleTransform和一个RotateTransform的子控件。然后,您可以调用Storyboard.SetTarget()在单独的故事板中定位单独的变换,一切都应该正常工作。