2009-10-05 26 views
10

me gustaría mostrar una animación GIF, como la carga ... en mi XAML como mi procedimiento está progresando. Descubrí que esto no se puede hacer fácilmente en WPF cuando cargué mi Gif y solo muestra el primer fotograma. ¿Cuáles son las mejores formas de mostrar una animación en WPF?pantalla una animación GIF en WPF

+0

posible duplicado de [¿Cómo consigo un gif animado a trabajar en WPF?] (Http://stackoverflow.com/questions/210922/how-do-i- conseguir-un-animado-gif-a-trabajo en wpf) –

+0

[Adición -imagen “Carga” en la parte superior de ListView] (http://stackoverflow.com/questions/1492096/adding-loading-image-on- top-of-listview) – hakre

Respuesta

1

Se puede incrustar un MediaElement

<MediaElement LoadedBehavior="Play" Source="path/to.file" /> 

o winforms cuadro de imagen:

<wfi:WindowsFormsHost> 
     <winForms:PictureBox x:Name="pictureBoxLoading"> 
     </winForms:PictureBox> 
    </wfi:WindowsFormsHost> 

Sin embargo, me gustaría recomendar la búsqueda de una manera de hacer esto en WPF. Echa un vistazo a StoryBoards y animaciones. Sin saber lo que está tratando de lograr o por qué quiere hacer esto, es difícil aconsejarlo más.

5

tuve este problema, hasta que descubrí que en WPF4, se puede simular sus propias animaciones de imágenes fotograma clave. Primero, divida su animación en una serie de imágenes, titule algo así como "Imagen1.gif", "Imagen2, gif", y así sucesivamente. Importe esas imágenes en sus recursos de solución. Supongo que los pones en la ubicación de recursos predeterminada para las imágenes.

usted va a utilizar el control de imagen. Use el siguiente código XAML. He eliminado lo no esencial.

<Image Name="Image1"> 
    <Image.Triggers> 
     <EventTrigger RoutedEvent="Image.Loaded" 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard> 
        <ObjectAnimationUsingKeyFrames Duration="0:0:1" Storyboard.TargetProperty="Source" RepeatBehavior="Forever"> 
         <DiscreteObjectKeyFrames KeyTime="0:0:0"> 
         <DiscreteObjectKeyFrame.Value> 
          <BitmapImage UriSource="Images/Image1.gif"/> 
         </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrames> 
        <DiscreteObjectKeyFrames KeyTime="0:0:0.25"> 
         <DiscreteObjectKeyFrame.Value> 
          <BitmapImage UriSource="Images/Image2.gif"/> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrames> 
        <DiscreteObjectKeyFrames KeyTime="0:0:0.5"> 
         <DiscreteObjectKeyFrame.Value> 
          <BitmapImage UriSource="Images/Image3.gif"/> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrames> 
        <DiscreteObjectKeyFrames KeyTime="0:0:0.75"> 
         <DiscreteObjectKeyFrame.Value> 
          <BitmapImage UriSource="Images/Image4.gif"/> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrames> 
        <DiscreteObjectKeyFrames KeyTime="0:0:1"> 
         <DiscreteObjectKeyFrame.Value> 
          <BitmapImage UriSource="Images/Image5.gif"/> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrames> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger.Actions> 
     </EventTrigger> 
    </Image.Triggers> 
</Image> 
+1

¡Adopté esto para un juego de Windows Phone en el que estaba trabajando, y funcionó! (Eso sí, no se puede hacerlo con 'EventTrigger's pero sólo mover el código a cabo en un guión normal) – GONeale

+0

consigo "DiscreteObjectKeyFrames no se admiten en WPF" error. –

0

Simplemente haga clic derecho en el archivo .gif y cambiar dos propiedades:

Acción de generación: Recurso incrustado

Guardar en agenda de salida: Copiar si es más nuevo

Entonces

<MediaElement x:Name="myGif" UnloadedBehavior="Manual" Source="giphy_s.gif" MediaEnded="MediaElement_MediaEnded"/> 

y establecer Evento Para seguir corriendo

private void MediaElement_MediaEnded(object sender, RoutedEventArgs e) 
     { 
      myGif.Position = new TimeSpan(0, 0, 1); 
      myGif.Play(); 
     } 
Cuestiones relacionadas