WPF加载GIF的五种方式(Storyboard / WpfAnimatedGif / ImageAnimator / PictureBox / MediaElement)

本文详细介绍了在WPF中显示GIF的五种方法,包括使用Storyboard、WpfAnimatedGif库、ImageAnimator、Winform的PictureBox及MediaElement控件,并提供了每种方法的XAML和后台代码示例。
摘要由CSDN通过智能技术生成

部分内容参考博文WPF 如何显示gif

一、使用Storyboard

效果:

(1)页面xaml:

<Window x:Class="PlayGifDemo.StoryboardWindow"
        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:PlayGifDemo"
        mc:Ignorable="d"
        Title="StoryboardWindow" Height="400" Width="400" WindowStartupLocation="CenterScreen">
    <Grid>
        <Image x:Name="imgGifShow" Stretch="Fill" VerticalAlignment="Center" HorizontalAlignment="Center"/>
    </Grid>
</Window>

(2)后台代码:

    /// <summary>
    /// StoryboardWindow.xaml 的交互逻辑
    /// </summary>
    public partial class StoryboardWindow : Window
    {
        private Storyboard board = null;

        public StoryboardWindow()
        {
            InitializeComponent();
            ShowGifByAnimate(@"pack://application:,,,/Resource/loading.gif");
        }

        /// <summary>
        /// 显示GIF动图
        /// </summary>
        private void ShowGifByAnimate(string filePath)
        {
            this.Dispatcher.Invoke(() =>
            {
                List<BitmapFrame> frameList = new List<BitmapFrame>();
                GifBitmapDecoder decoder = new GifBitmapDecoder(
                                  new Uri(filePath, UriKind.RelativeOrAbsolute),
                                  BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
                if (decoder != null && decoder.Frames != null)
                {
                    frameList.AddRange(decoder.Frames);
                    ObjectAnimationUsingKeyFrames objKeyAnimate = new ObjectAnimationUsingKeyFrames();
                    objKeyAnimate.Duration = new Duration(TimeSpan.FromSeconds(1));
                    foreac
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RunnerDNA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值