2011-04-20 71 views
5

我有10個XAML文件,每個文件都包含一個動畫幀(它們是從SWF轉換的,因此每個對象都沒有關鍵幀信息)。每個XAML文件都包含一個Canvas,每個Frame有不同的形狀。XAML中的簡單動畫書動畫

我想創建一個XAML文件,其中包含每個幀的Canvas信息,然後使用XAML在適當的時間顯示每個Canvas,因此每個幀都會一個接一個地顯示出來。這是一個好方法嗎?我怎樣才能做到這一點?我嘗試了Blend,但似乎不可能,因爲我的對象在每個框架上都不相同(即,我沒有爲對象屬性設置動畫效果)。

我正在尋找一個聲明性解決方案。

回答

3

你可以嘗試以下方法:

<Grid x:Name="FrameContainer"> 
    <Canvas x:Name="Canvas1" Visibility="Collapsed"><!-- shapes --></Canvas> 
    <Canvas x:Name="Canvas2" Visibility="Collapsed"><!-- shapes --></Canvas> 
    <Canvas x:Name="Canvas3" Visibility="Collapsed"><!-- shapes --></Canvas> 
    <Canvas x:Name="Canvas4" Visibility="Collapsed"><!-- shapes --></Canvas> 
    <Canvas x:Name="Canvas5" Visibility="Collapsed"><!-- shapes --></Canvas> 
    <Canvas x:Name="Canvas6" Visibility="Collapsed"><!-- shapes --></Canvas> 
    ... 
</Grid> 

然後作出這樣的切換每個畫布的知名度,使它看起來像一幀動畫的幀的故事板。

我在項目中有類似的問題,我做了一個自定義控件,它有一個(int)框架依賴屬性,負責從模板中隱藏/顯示元素。您也可以爲Frame屬性設置動畫效果。

+0

非常感謝 - 效果很好。 – 2011-04-20 11:04:25

1

繼Darkoleptiko的消息時,我用他的方法與上面這樣的情節提要:

<Window.Resources> 
    <Storyboard x:Key="Storyboard1"> 
     <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Canvas1"> 
      <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.1" Value="{x:Static Visibility.Collapsed}"/> 
     </ObjectAnimationUsingKeyFrames> 
     <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Canvas2"> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.1" Value="{x:Static Visibility.Visible}"/> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.2" Value="{x:Static Visibility.Collapsed}"/> 
     </ObjectAnimationUsingKeyFrames> 
     <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Canvas3"> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.2" Value="{x:Static Visibility.Visible}"/> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.3" Value="{x:Static Visibility.Collapsed}"/> 
     </ObjectAnimationUsingKeyFrames> 

    </Storyboard> 
</Window.Resources>