2013-03-16 52 views
0

我已經創建了一個MainMenu和兩個動畫:ZoomIn & ZoomOut。 MainMenu將充滿帆布,每個包含圖標。我正在嘗試做的是點擊一個按鈕,當前可見面板會丟失ZoomOut並單擊面板出現ZoomIn。WPF選擇應該從代碼背後播放故事板動畫的控件

到目前爲止,我已經成功地從調用代碼的動畫使用這背後:

Dim ZoomOut As Storyboard = DirectCast(FindResource("storyZoomOut"), Storyboard) 
    ZoomOut.Begin() 

但現在我需要的技術控制動畫。也可以同時對兩個不同的對象進行動畫處理嗎?像Canvas1 ZoomOut和Canvas2 ZoomIn在同一時間嗎?

<Storyboard x:Key="storyZoomOut"> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="pnlCompras"> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="0.8"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0.6"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.4"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="0.2"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0.0"/> 
     </DoubleAnimationUsingKeyFrames> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="pnlCompras"> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1.04"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="1.09"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1.15"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="1.3"/> 
     </DoubleAnimationUsingKeyFrames> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="pnlCompras"> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1.04"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="1.09"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1.15"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="1.3"/> 
     </DoubleAnimationUsingKeyFrames> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="pnlCompras"> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="0"/> 
     </DoubleAnimationUsingKeyFrames> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="pnlCompras"> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="0"/> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 

感謝大家的幫助!

+0

只是要清楚,我有不同的畫布控制每一個都在另一個之上。並且將使用IsVisible屬性來使他們查看。 – CogentP 2013-03-16 15:33:01

+0

您可以通過在控件上調用[BeginAnimation](http://msdn.microsoft.com/zh-cn/library/ms590761.aspx)來直接爲屬性設置動畫效果,而不是使用Storyboard。如果故事板包含多個動畫,這當然是不切實際的。如果您發佈故事板的XAML,我們可能會發現。 – Clemens 2013-03-16 16:18:00

+0

是的,它包含多個動畫,不透明度和大小。還有一個位置,我可以很容易地刪除,因爲它什麼都不做。 – CogentP 2013-03-16 16:21:09

回答

0

您可以從故事板中的所有動畫中刪除Storyboard.TargetName="pnlCompras"設置,然後在Storyboard.Begin(FrameworkElement)的任何控件上運行故事板。

Dim ZoomOut As Storyboard = DirectCast(FindResource("storyZoomOut"), Storyboard) 
ZoomOut.Begin(someControl) 
+0

優雅的解決方案!榮譽 – CogentP 2013-03-16 16:52:54

0

您也可以使用這些線在你的事件

Dim ZoomOut As Storyboard = DirectCast(FindResource("storyZoomOut"), Storyboard) 
ZoomOut.Begin(--Control--) 

或與該其他線路

測試

DirectCast(FindResource("storyZoomOut"), Animation.Storyboard).Begin()