【问题标题】:Display an Animated GIF in a Metro App在 Metro 应用程序中显示动画 GIF
【发布时间】:2025-12-27 12:25:10
【问题描述】:

在 Windows 8 的 Windows 应用商店 (Metro) 应用程序中是否有显示动画 gif 的控件?我将 C# 和 XAML 与数据绑定一起使用。

【问题讨论】:

    标签: c# windows-8 microsoft-metro


    【解决方案1】:

    我设法在我的 Windows 8 Metro 应用程序中显示 gif,只需将 gif 转换为 jpeg,然后运行无限循环。

    代码如下:

    公共异步无效 UpdateImage() {

            await Task.Delay(300);
    
            var frame = this.Frame.CurrentSourcePageType.Name;
    
            if (frame != ("CURRENTFRAME")) return;
            if (count <= 4)
            {
                var img = (BitmapImage) Resources["bitmap" + count];
                imgTap.Source = img;
                UpdateLayout();
                count++;
                UpdateImage();
            }
            else
            {
                count = 1;
                UpdateImage();
            }
        }
    

    所以基本上我将转换后的 jpeg 保存在我的 page.resources 中,然后将它们命名为 bitmap1,bitmap2 .. etc 。 我正在检查当前帧是否是必须显示 gif 的帧,否则 gif 代码将一直在后台运行,这会浪费内存和 CPU。 只需在任何 Loaded 方法上调用此方法,它应该可以正常运行。

    【讨论】:

      【解决方案2】:

      您不能在网格中显示动画 gif。但是,您可以在 webview 控制器中显示动画礼物。

      【讨论】:

        【解决方案3】:

        请注意:您可以使用 BitmapDecoder 类来读取 GIF 帧,创建故事板并对其进行动画处理。

        我的博客上有一个 Windows 8 用户控件示例:http://www.henrikbrinch.dk/Blog/2013/02/21/Windows-8---GIF-animations--the-RIGHT-way

        【讨论】:

          【解决方案4】:

          这可能有点矫枉过正,但您可以尝试使用 WebView 来显示 GIF。然而,WebView 控件引入了它自己的一组令人头疼的问题,因此除非您愿意处理上述问题,否则我建议您避免使用它,除非您绝对必须使用它。

          【讨论】:

            【解决方案5】:

            如果我是对的,那么 Silverlight 不支持 GIF,而 Metro Apps 是基于 Silverlight 平台的。因此,本机不包含对 GIF 图像的支持。但是,您可以使用第 3 方控件,例如 http://www.componentone.com/SuperProducts/ImageSilverlight/

            【讨论】:

            • 我正在尝试这种方法,但我发现使用 direct-x 显示 gif 有点过头了。如果可行,我会将其标记为答案。
            【解决方案6】:

            Image 控件不支持动画 GIF。您需要提取帧并在您自己的计时器上为其设置动画。

            您应该查看此链接,这可能会对您的问题有所帮助:

            http://advertboy.wordpress.com/2012/05/08/animated-gifs-in-xamlc/

            【讨论】: