C# WinRT-在控件中显示动画GIF

C# WinRT-在控件中显示动画GIF,c#,xaml,windows-8,microsoft-metro,windows-runtime,C#,Xaml,Windows 8,Microsoft Metro,Windows Runtime,我需要在我的metro应用程序中显示动画GIF,但我找不到任何允许它的控件。(我从播放器框架中尝试了Image、MediaElement和MediaPlayer) 是否有可能以某种方式显示动画GIF?这不能以本机方式完成,但您可以签出 这正是你想要的。 你也可以检查这个 它包含一个GIF解码器库这里有一个很好的教程,教你如何将GIF插入Metro风格的应用程序: 但最简单的方法是使用此项目: 虽然我还没有检查它是否有效,但由于空域问题,它可能对您不起作用-您可以尝试在WebView控件中托

我需要在我的metro应用程序中显示动画GIF,但我找不到任何允许它的控件。(我从播放器框架中尝试了
Image
MediaElement
MediaPlayer


是否有可能以某种方式显示动画GIF?

这不能以本机方式完成,但您可以签出

这正是你想要的。 你也可以检查这个


它包含一个GIF解码器库

这里有一个很好的教程,教你如何将GIF插入Metro风格的应用程序:

但最简单的方法是使用此项目:


虽然我还没有检查它是否有效,但由于空域问题,它可能对您不起作用-您可以尝试在WebView控件中托管gif。这可能比Norbert和Carl提出的其他更好的解决方案要容易得多。

您可以通过在.NET Framework中使用BitmapDecoder类以本机方式实现这一点。我在我的博客上有一个例子,它展示了如何实现一个AnimationControl,该控件能够从ressource gif文件中显示动画gif。签出:

我刚刚发布了一个用于播放动画GIF的库:。您只需在标准
图像
控件上设置附加属性:

<Image gif:AnimationBehavior.SourceUri="/Images/animated.gif" />

(xmlns映射是
xmlns:gif=“使用:XamlAnimatedGif”


在WPF、Windows 8.1和Windows Phone 8.1的工作中,正如@Filip Skakun所说的那样,WebView方法是有效的。当然是“黑客”,但所有这些库和动态解码都很慢,动画闪烁(至少在windows phone中)。使用WebView,您可以使用透明背景托管动画GIF。要使用WebView gif呈现方法在项目中创建html页面,请执行以下操作:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>gif rendering</title>
    <script type="text/javascript">
        function SetImageSource(image, source) {
            document.getElementById(image).src = source;
        };
    </script>

<style type="text/css">
    html, body
    {
        -ms-content-zooming:none;
        -ms-overflow-style: none;
        -ms-scroll-translation: none;
        -ms-touch-select: none;
        overflow: hidden;
        zoom: 100%;
    }
</style>
</head>
<body>
<img id="gifPlaceholder" src=""/>

<script>
    SetImageSource("gifPlaceholder", window.top.location.search.substring(1));
</script>
</body>
</html>

gif渲染
函数SetImageSource(图像,源){
document.getElementById(image).src=source;
};
html,正文
{
-ms内容缩放:无;
-ms溢出样式:无;
-ms滚动翻译:无;
-ms触摸选择:无;
溢出:隐藏;
变焦:100%;
}
SetImageSource(“gif占位符”,window.top.location.search.substring(1));
CSS很重要-因为它禁用了WebView的缩放/滚动/触摸移动(在大多数情况下这是不可取的)。将动画GIF添加到同一文件夹(html所在的位置)。Xaml代码:

<WebView Name="gifRendererWebView" 
         Source="ms-appx-web:///pathToHtmlInProject.html?gifName.gif"
         DefaultBackgroundColor="Transparent"/>


唯一的缺点是,你在
WebView
占据的区域“丢失手势”(并且你不能使用
WebView笔刷,因为你会丢失动画)。

这是有效的:)首先,我检测gif的尺寸,然后将WebView的高度和宽度设置为20,以避免滚动条。然后只需将webview的源设置为gif即可:)考虑切换到WebViewBrush。这应该会给你更好的表现