Я хотел бы отобразить анимацию gif, такую как загрузка... в моем XAML по мере прохождения моей процедуры. Я узнал, что это нелегко сделать в WPF, когда я загрузил свой Gif, и он просто показывает первый кадр. Каковы наилучшие способы отображения анимации в WPF.
Отображение анимации gif в WPF
Ответ 1
У меня была эта проблема, пока я не обнаружил, что в 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>
Ответ 2
Вы можете встроить MediaElement
<MediaElement LoadedBehavior="Play" Source="path/to.file" />
или winforms PictureBox:
<wfi:WindowsFormsHost>
<winForms:PictureBox x:Name="pictureBoxLoading">
</winForms:PictureBox>
</wfi:WindowsFormsHost>
Однако я бы рекомендовал найти способ сделать это в WPF. Посмотрите на StoryBoards и анимации. Не зная, чего вы пытаетесь достичь, или почему вы хотите сделать это, вам трудно советовать дальше.
Ответ 3
Просто щелкните правой кнопкой мыши на файле .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();
}