原贴:https://www.cnblogs.com/fanful/p/12681728.html

WPF中是不支持直接预览GIF图片的

<Image Source="1.gif"/>

上面这种用法是预览的GIF图片是静止不动的。

通过使用WpfAnimatedGif我们可以在WPF应用程序中预览、控制GIF图片。

WpfAnimatedGifgitbub地址
GitHub - XamlAnimatedGif/WpfAnimatedGif: A simple library to display animated GIF images in WPF, usable in XAML or in code.

WpfAnimatedGif的使用方法
https://github.com/XamlAnimatedGif/WpfAnimatedGif/wiki

通过NuGet引入包

xaml中使用

  1. 声明xml命名空间
xmlns:gif="http://wpfanimatedgif.codeplex.com"
  1. Image控件中,使用ImageBehavior.AnimatedSource代替Source
<Image gif:ImageBehavior.AnimatedSource="1.gif"/>

以下是完整代码:

<Window x:Class="Gif.GifWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Gif"xmlns:gif="http://wpfanimatedgif.codeplex.com"mc:Ignorable="d"Title="GifWindow" Height="450" Width="800"><Grid><Image gif:ImageBehavior.AnimatedSource="1.gif"/></Grid>
</Window>

运行后就可以看到效果了。

如果想在设计状态下就看到效果,只需将ImageBehavior.AnimateInDesignMode属性设置为true

可以在window元素中设置,控制整个window内部所有Image控件

<Window x:Class="Gif.GifWindow"xmlns:gif="http://wpfanimatedgif.codeplex.com"gif:ImageBehavior.AnimateInDesignMode="True">

也可以在Image元素内设置,只控制该元素

<Image gif:ImageBehavior.AnimatedSource="1.gif" gif:ImageBehavior.AnimateInDesignMode="True"/>

设置ImageBehavior.RepeatBehavior属性控制播放行为

<!--播放3次-->
<Image gif:ImageBehavior.AnimatedSource="1.gif" gif:ImageBehavior.RepeatBehavior="3x"/><!--播放10秒-->
<Image gif:ImageBehavior.AnimatedSource="1.gif" gif:ImageBehavior.RepeatBehavior="0:0:10"/><!--永久播放-->
<Image gif:ImageBehavior.AnimatedSource="1.gif" gif:ImageBehavior.RepeatBehavior="Forever"/>
<object property="iterationCountx"/>-or-<object property="[days.]hours:minutes:seconds[.fractionalSeconds]"/>-or-<object property="[days.]hours:minutes"/>-or-<object property="days"/>-or-<object property="Forever"/>

该属性的默认值为0x,表示使用GIF图片自身的信息。
以上所有属性都支持使用绑定的方式设置。

代码中使用

var image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri("1.gif",UriKind.Relative);
image.EndInit();
WpfAnimatedGif.ImageBehavior.SetAnimatedSource(img, image);
<Image x:Name="img"/>

控制播放次数

// Repeat 3 times
ImageBehavior.SetRepeatBehavior(img, new RepeatBehavior(3));// Repeat for 10 seconds
ImageBehavior.SetRepeatBehavior(img, new RepeatBehavior(TimeSpan.FromSeconds(10)));// Repeat forever
ImageBehavior.SetRepeatBehavior(img, RepeatBehavior.Forever);

播放完成回调事件

        <Image gif:ImageBehavior.AnimatedSource="1.gif" gif:ImageBehavior.RepeatBehavior="3x" gif:ImageBehavior.AnimationCompleted="Image_AnimationCompleted"/>

当播放次数为Forever时,永远不会触发该事件。

手动控制播放、暂停、跳转到哪个画面

获取Image控件的ImageAnimationController

var controller = ImageBehavior.GetAnimationController(imageControl);
// 暂停
controller.Pause();// 继续
controller.Play();// 跳转到最后一个画面
controller.GotoFrame(controller.FrameCount - 1);

你可能不想让图片自动播放,只需设置ImageBehavior.AutoStart属性即可。

            <Image x:Name="img" gif:ImageBehavior.AnimatedSource="1.gif" gif:ImageBehavior.AutoStart="False"/>

通过订阅CurrentFrameChanged事件可以监听GIF画面的改变

controller.CurrentFrameChanged += Controller_CurrentFrameChanged;
private void Controller_CurrentFrameChanged(object sender, EventArgs e)
{}

animation没有完全加载的时候,GetAnimationController方法会返回null,通过订阅AnimationLoaded事件避免。

【转】在WPF显示动态GIF图片相关推荐

  1. WPF 动态更换图片路径

    wpf中动态修改图片路径,其实很简单,有个小伙伴有疑问,绑定了source,为什么不能显示图片呢... 通过绑定,修改图片路径,动态显示图片,效果如下: 图片支持本地路径和网络路径,下面就来看看如何做 ...

  2. Android中显示动态图片

    通过Gifview.jar来实现Android应用中显示动态图片 效果图: 1.下载Gifview.jar  下载地址:http://download.csdn.net/detail/qq_26650 ...

  3. QT 显示动态GIF

    Qt 显示动态gif图片有以下几种方法: 方法一:利用QMovie 显示 QMovie *movie = new QMovie(":/GifPic/wait.gif");ui-&g ...

  4. 在WPF中显示动态GIF(转)

    http://www.silverlightchina.net/html/study/WPF/2011/0824/9965.html 在我们寻求帮助的时候,最不愿意听到的答复是:很抱歉,在当前版本的产 ...

  5. java jframe显示图片_java怎么在JFrame中显示动态图片

    java怎么在JFrame中显示动态图片 (2012-09-16 23:39:54) 标签: 杂谈 import java.awt.Graphics; import javax.swing.Image ...

  6. jQuery动态改变图片显示大小(修改)

    当我们要显示后台传过来若干个尺寸不一的图片时,为了保证图片大小的一致性及比例的协调,需要动态改变图片显示尺寸.通过搜索,我们可以从网上找到实现此功能的jQuery代码如下.这段代码可以使图片的大小保持 ...

  7. WP8.1开发中关于如何显示.gif格式动态格式图片方法

    这几天又遇到个问题,就是如何显示动态图片,本来以为和显示静态图片一样,谁知不行,在网上一查才知道WP8.1不支持.gif格式动态图片的显示: 后来又在MSDN论坛上查找,也有人问类似的问题,后来就大概 ...

  8. C# WPF 显示图片和视频显示 EmuguCv、AForge.Net测试

    C# WPF 显示图片和视频显示 EmuguCv.AForge.Net测试 原文:C# WPF 显示图片和视频显示 EmuguCv.AForge.Net测试 WPF 没有用到 PictureBox, ...

  9. Qt 编程指南 8 显示静态小图片和动态大图片

    显示控件概览 图片浏览示例 第一行是一个标签控件,objectName 为 labelShow,文本内容清空,因为是用来显示图片用的. 主界面第二行的控件是四个普通按钮 第一个按钮文本是 " ...

最新文章

  1. 【代码实现接口测试】Requests库
  2. 游标 和 锁的概述
  3. iOS7应用开发6:UINavigation, UITabbar控制器的多态性
  4. linux重置root密码_重置丢失的Linux root密码,错误密码的历史记录,Python,Ruby,课堂解决方案等
  5. python通过什么连接数据库_如何使用python连接数据库?
  6. forms、forms_toolbar例子理解
  7. 你的努力,是否符合你的预期?
  8. 十五部必藏之经典日剧(给喜欢怀旧的朋友)--转贴,的确经典,还有很多没看过,不过排名前二都看了,呵呵...
  9. oracle 11g 映像文件有效 但不适用于此计算机类型,《计算机应用基础》期末考试模拟练习题(含答案)...
  10. 计算机不显示固态硬盘,电脑重启后读不到固态硬盘怎么办
  11. jQuery中关于jQuery.fn.init.prototype = jQuery.fn的解读
  12. 开口式霍尔电流传感器如何助力直流配电改造?
  13. 网站如何添加访客统计代码
  14. hadoop 集群txid不一致
  15. 用C语言算两个数的商和
  16. 一般总账科目 调整 为统驭科目时报错:只以本位币计的统驭科目余额未定义
  17. Curio for Mac(头脑风暴思维导图)
  18. 局域网语音对讲系统_IP广播对讲系统停车场解决方案
  19. 供应链计划的五个步骤,你知道吗?
  20. PS快捷键大法,初级低配版

热门文章

  1. 学生管理系统(JSP+Servlet+MySQL)
  2. C语言中输出26个字母
  3. 电厂计算机房消防,3 燃煤电厂建(构)筑物的火灾危险性分类、耐火等级及防火分区...
  4. Qt 之 中英文切换的使用
  5. 让人春分日 哈工科教100272.关路灯
  6. 深入理解TCP协议的连接状态与可靠机制
  7. 网页视频倍速播放的方法
  8. 三极管:潜伏3个月的彩蛋是来自火星的么
  9. python实现长截图_用 Python 实现长截图拼接
  10. pandas数值型数据和非数值型数据统计