嗯,这已经解决了。我不知道这是否是我的一个小故障,或者 ImageTools 是否只是一个痛苦的设置。谢谢大家的回答,他们很可能都有效。一旦我标记为已回答确实有效,但方法如下:
(感谢 Patrick 坚持这一点,他的代码如下所述。)
(另外,也非常感谢其他提交了一些东西的人。对不起,如果我的菜鸟把你们吓跑了)
要让动画 Gif 在您的 wp7 7.1 应用程序中工作,请执行以下步骤:
1)下载ImageTools(我当时用的是最新版本(0.3))http://imagetools.codeplex.com/downloads/get/156530
2) 解压文件,然后在“Bin > Phone”文件夹中将所有* dll 文件扩展名放入您的 wp7 应用程序文件夹中。不需要添加其他文件 (xml/pdb)。(*这一步是额外的工作,我们稍后会删除这些额外的 dll,但它会省去头疼的问题。)
3) 在解决方案资源管理器窗口 > 参考文件夹下拉菜单中添加对 wp7 应用程序的引用。为此,请右键单击“引用”文件夹,单击“添加引用”并浏览到 dll 文件。重复这个过程。(最终引用所有这些 dll 是额外 2 分钟工作中的 1 分钟,但编译时不应出现任何错误)
4) 现在在要添加图像的 xaml 页面上,将其添加到标题代码的顶部:
xmlns:it="clr-namespace:ImageTools.Controls;assembly=ImageTools.Controls"
xmlns:vm="clr-namespace:GifViewer.ViewModels"
注意:将“GifViewer”更改为您的应用程序名称。
5) 在同一页面的正下方,添加以下代码:
<phone:PhoneApplicationPage.DataContext>
<vm:MainViewModel/>
</phone:PhoneApplicationPage.DataContext>
<Grid x:Name="LayoutRoot" Background="Transparent">
<it:AnimatedImage Source="{Binding AnimationImage}" />
</Grid>
注意:不一定是网格。根本不需要任何东西。它可以独立存在。
6)接受的答案在应用程序中有一个名为“ViewModels”的文件夹,其中有一个名为“MainViewModel”的自定义类因此在解决方案资源管理器或桌面中,添加一个名为 ViewModels 的文件夹并制作名为 MainViewModel 的 ac# 类页面。将其移动到该文件夹中,然后刷新解决方案资源管理器。如果看不到文件,则需要单击解决方案资源管理器标题下的“显示所有文件”按钮。
7)使用下面接受的答案,在“MainViewModel.cs”类页面中,在其他页面下方添加以下内容:
using ImageTools;
using ImageTools.Controls;
using ImageTools.IO;
using ImageTools.IO.Gif;
8) 接受的答案使用此代码。复制此代码时将“GifViewer”更改为您的应用程序名称,并更改 gif 的 Uri 位置。在我的示例中,我有一个名为“Gif”的文件夹,其中包含“explosion.gif”。默认情况下,构建操作可以保留为资源。
namespace GifViewer.ViewModels {
public class MainViewModel : DependencyObject {
public MainViewModel() {
Decoders.AddDecoder<GifDecoder>();
Uri uri = new Uri("Gif/explosion.gif", UriKind.Relative);
ExtendedImage image = new ExtendedImage();
// either of these two method work.
// Just remove the first / to switch
//*
image.LoadingCompleted +=
(o, e) => Dispatcher.BeginInvoke(() => AnimationImage = image);
image.UriSource = uri;
/*/
Stream stream = Application.GetResourceStream(uri).Stream;
GifDecoder decoder = new GifDecoder();
decoder.Decode(image, stream);
AnimationImage = image;
/**/
}
public static readonly DependencyProperty AnimationImageProperty =
DependencyProperty.Register("AnimationImage",
typeof(ExtendedImage),
typeof(MainViewModel),
new PropertyMetadata(default(ExtendedImage)));
public ExtendedImage AnimationImage {
get { return (ExtendedImage)GetValue(AnimationImageProperty); }
set { SetValue(AnimationImageProperty, value); }
}
}
}
继续编译。您可能会收到指示无法加载的运行时错误,但运行应用程序应该可以摆脱它。
你的 gif 现在应该可以播放了。
9) 开始删除不需要的额外 dll 引用(2 分钟额外工作的另一分钟)。基本上,您想要引用的只是:
ImageTools
ImageTools.Controls
ImageRools.IO.Gif
甚至可能不需要 ImageTools.Controls,但文件大小为 25kb,老实说,如果我删除它,我无法获得 gif 显示。
给你!
我问的原始问题
试图让我的动画 gif 在我的 WP7 应用程序中播放时,我头疼得厉害。尽管有 imagetools 并在 stackoverflow/web 上查看当前的“解决方案”,但我根本无法连接这些点来实现这一点。
下面概述了我的问题,但作为参考,我查看了: Display GIF in a WP7 application with Silverlight 和http://blog.naviso.fr/wordpress/?p=733
那么,如何将这个破事设置为在 wp7 应用程序中显示动画 gif 呢!?具体问题 - 这是让我的动画 gif 出现的正确代码吗?如果没有,下面需要修复什么?
我在手机上的动画 gif 文件位置(不是来自互联网):
GIF/爆炸.gif
Xaml 主页:
xmlns:imagetools="clr-namespace:ImageTools.Controls;assembly=ImageTools.Controls"
....
<phone:PhoneApplicationPage.Resources>
<imagetools:ImageConverter x:Key="ImageConverter" />
</phone:PhoneApplicationPage.Resources>
....
<imagetools:AnimatedImage x:Name="animationgif" Source="{Binding ImageSource, Converter={StaticResource ImageConverter}}" />
以及 xaml 页面背后的代码:
public partial class MainPage : PhoneApplicationPage
{
using ImageTools;
using ImageTools.Controls;
using ImageTools.IO.Gif;
public MainPage()
{
InitializeComponent();
ImageTools.IO.Decoders.AddDecoder<ImageTools.IO.Gif.GifDecoder>();
}
public void eventtofiretoshowexplosion_gif(object sender, MouseButtonEventArgs e)
{
// A main problem -- this code doesn't work by itself, as what is the ImageSource!?
// It cannot be used as a variable it says.
// animationgif.ImageSource does not work at all (not a method).
ImageSource = new Uri("http://mysite/my.gif", UriKind.Absolute);
}
}
在过去的几个小时里,这一直困扰着我,我真的需要一些帮助。如果对此有快速修复,请提供帮助并展示它是如何完成的,而不是引导我进入页面。我已经看过太多关于这个的页面了,虽然每个页面都声称可以工作,但它不能在我的应用程序中使用。