Как добавить анимацию gif на страницу wpf проекта библиотеки классов?

Я новичок в создании надстроек Revit и использовании проектов библиотеки классов. В настоящее время я создаю надстройку, используя проект библиотеки классов, и первый экран — это экран входа в систему (используя для этого wpf), и я хочу добавить анимацию gif на эту страницу wpf. Я искал в Интернете и нашел несколько решений (пакет wpfanimatedgif nuget, mediaelement), но gif не воспроизводится внутри Revit. Поэтому я попробовал эти решения в проекте WPF вместо проекта библиотеки классов. И они работали. Кто-нибудь может мне помочь? Есть ли другой пакет nuget? Спасибо

EDIT:- Внутри кода C# отображается миниатюра GIF, когда я использую медиа-элемент.

Но внутри Revit даже миниатюра для GIF не видна.

В XAML:

<MediaElement Name="My_GIF" LoadedBehavior="Play" UnloadedBehavior="Manual" MediaEnded="MediaElement_MediaEnded" Source="Images\planBIMGIF.gif"/>

В коде позади: -

private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
        {
            My_GIF.Position = new TimeSpan(0, 0, 20);
            My_GIF.Play();
            //MessageBox.Show("Playing GIF");
        }

person Anirudh Nanwal    schedule 11.12.2018    source источник
comment
Добро пожаловать в stackoverflow.com. Пожалуйста, уделите минуту туру, особенно Как спросить" и отредактируйте свой вопрос соответствующим образом.   -  person Jazb    schedule 11.12.2018


Ответы (1)


Я просто использую изображение в WPF вместо элемента мультимедиа, потому что с элементом мультимедиа мои анимации продолжают останавливаться до завершения анимации. Так что теперь я просто загружаю его в изображение кадр за кадром. Вы также имеете больше контроля над этим.

XAML:

<Image x:Name="image"/>

Код программной части (в функции, которая вызывается после InitializeComponent):

Uri myUri = new Uri("Images\planBIMGIF.gif", UriKind.RelativeOrAbsolute);
GifBitmapDecoder decoder = new GifBitmapDecoder(myUri,       
BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
BitmapSource bitmapSource;
int frameCount = decoder.Frames.Count;

Thread th = new Thread(() =>
{
    for (int i = 0; i < frameCount - 1; i++)
    {
        this.Dispatcher.Invoke(new Action(delegate ()
        {
            bitmapSource = decoder.Frames[i];
            image.Source = bitmapSource;
        }));
        System.Threading.Thread.Sleep(50);
    }
});
th.Start();

Это воспроизводит гифку один раз и останавливается на кадре перед последним (у моих гифок в конце был пустой кадр). Если вы хотите, чтобы он повторялся, вы можете поместить цикл for в цикл while или любой другой цикл по вашему выбору. Вы можете отрегулировать скорость, установив время Thread.Sleep(50) на другое значение.

Кроме того, обязательно установите свое изображение как «ресурс» в его свойствах, и вам, возможно, придется ссылаться на него следующим образом в Uri: "pack://application:,,,/<ProjectName>;component/Images/planBIMGIF.gif", где <ProjectName> — это имя вашего проекта в VS.

person Jan Buijs    schedule 11.12.2018