отобразить анимационный GIF в WPF - PullRequest
10 голосов
/ 05 октября 2009

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

Ответы [ 3 ]

5 голосов
/ 02 апреля 2011

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

Вы собираетесь использовать элемент управления изображением. Используйте следующий код 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 голос
/ 05 октября 2009

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

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

или winforms PictureBox:

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

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

0 голосов
/ 18 июля 2017

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

Действие построения: встроенный ресурс

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

Тогда

 <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();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...