2009-10-05 3 views
10

Я хотел бы отобразить анимацию gif, такую ​​как загрузка ... в моем XAML по мере прохождения моей процедуры. Я узнал, что это нелегко сделать в WPF, когда я загрузил свой Gif, и он просто показывает первый кадр. Каковы наилучшие способы отображения анимации в WPF.отображение анимации gif в WPF

+0

возможный дубликат [Как получить анимированный GIF работать в WPF?] (Http://stackoverflow.com/questions/210922/how-do-i- get-a-animated-gif-to-work-in-wpf) –

+0

[Добавление «Загрузка» -изображения поверх ListView] (http://stackoverflow.com/questions/1492096/adding-loading-image-on- top-of-listview) – hakre

ответ

1

Вы можете встроить MediaElement

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

или WinForms PictureBox:

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

Однако я бы рекомендовал найти способ сделать это в WPF. Посмотрите на StoryBoards и анимации. Не зная, чего вы пытаетесь достичь, или почему вы хотите это сделать, сложно советовать дальше.

5

У меня была эта проблема, пока я не обнаружил, что в WPF4 вы можете имитировать свои собственные анимации изображений ключевого кадра. Сначала разделите свою анимацию на серию изображений, назовите их что-то вроде «Image1.gif», «Image2, gif» и т. Д. Импортируйте эти изображения в свои ресурсы решения. Я предполагаю, что вы поместили их в папку ресурсов по умолчанию для изображений.

Вы собираетесь использовать элемент управления Image. Используйте следующий код XAML. Я удалил ненужные вещи.

<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

Я принял это для игры в Windows Phone, над которой работал, и это сработало! (Имейте в виду, вы не можете сделать это с помощью 'EventTrigger', но просто переместите код в обычную раскадровку) – GONeale

+0

Я получаю ошибку« DiscreteObjectKeyFrames не поддерживается в WPF ». –

0

Просто Щелкните правой кнопкой мыши на файл .gif и изменить два свойства:

Сложение Действие: Embedded Resource

Копировать в выходной каталог: Скопировать если Новее

Тогда

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

и установить событие для Продолжить Запуск

private void MediaElement_MediaEnded(object sender, RoutedEventArgs e) 
     { 
      myGif.Position = new TimeSpan(0, 0, 1); 
      myGif.Play(); 
     } 
Смежные вопросы