2011-04-20 10 views
5

Tengo 10 archivos XAML, cada uno de los cuales contiene un cuadro de una animación (se convirtieron de SWF, por lo que no hay información de cuadro clave para cada objeto). Cada archivo XAML contiene un lienzo con las diversas formas para cada cuadro.Animación de Flipbook simple en XAML

Me gustaría crear 1 archivo XAML que contenga la información del lienzo para cada fotograma y luego usar XAML para mostrar cada lienzo en el momento apropiado, por lo que cada fotograma se muestra una detrás de la otra. ¿Es esta una buena manera de ir? ¿Cómo puedo hacer esto? Lo intenté en Blend, pero no parece posible ya que mis objetos son diferentes en cada fotograma (es decir, no estoy animando las propiedades del objeto).

Estoy buscando una solución declarativa solamente.

Respuesta

3

Usted puede intentar lo siguiente:

<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> 

luego hacer un guión gráfico que cambia la visibilidad de cada lienzo para que se vea como una animación fotograma a fotograma.

Tuve un problema similar en un proyecto e hice un control personalizado que tiene una propiedad de dependencia de marco (int) que se encarga de ocultar/mostrar elementos de la plantilla. También puedes animar la propiedad Frame.

+0

Muchas gracias - funciona bien. –

1

En relación con el mensaje de Darkoleptiko, que utilizó su enfoque anterior con un guión gráfico de esta manera:

<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>