2013-11-26 40 views
0

以下代碼最初是WPF應用程序的一部分,我將其轉換爲WinRT;然而,試圖運行動畫時,他們似乎是相互排斥的(也就是說,他們都工作,但只能有一個時間 - 而在WPF我可以同時運行他們):在Windows應用商店應用中運行多個動畫

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

只有一個Storyboard可以在WinRT/XAML中的單個元素上運行。如果你需要彼此獨立地運行其中的兩個 - 最簡單的方法是有兩個元素並且指定單獨的元素。在你的情況下,你可以有一個父母GridScaleTransform和一個孩子控制RotateTransform。然後你可以打電話給Storyboard.SetTarget(),在單獨的故事板中定位單獨的轉換,所有的東西都應該可以工作。

+0

絕妙的主意 - 非常感謝! –