Windows Phone 7图像文件的正确构建操作是什么?

6
我一直在开发Windows Phone 7应用程序,通过一些谷歌搜索后,我发现我需要将项目中添加的图像设置为“内容”以便能够在我的应用程序中引用这些图像。
然而,Windows Phone List Application项目模板包括一个被命名为ArrowImg.png的图像,它的构建操作设置为“资源”,并且仍然可以从应用程序中引用。
我想知道是否有人可以确认我们绝对应该使用Content build action,还是有一种方法可以访问使用Resource Build Action添加到项目中的图像(如示例项目中所示),我们应该使用这个方法?
2个回答

10

如果将操作设置为“Content”,则图像“原样”包含在XAP中。 如果将操作设置为“Resource”,则图像将嵌入到共享的DLL中。

在很多情况下,你都可以使用任一种方法。可能会有使用一种方法而不是另一种方法的性能或其他问题,但我不知道并且从未注意到任何问题。

就我个人而言,除非我需要明确将其设为资源,否则我将使用内容。

使用当前(Beta)工具时,我曾看到VS抱怨直接在XAML中引用的图像应该设置为“Resource”(如果设置为“Content”),但无论哪种方式,应用程序都能正常运行。希望这是在RTM工具中将要解决的问题。

欲了解更多信息,请参见《Visual Studio项目属性中的各种“构建操作”设置及其作用是什么?》中的讨论。


谢谢回复 - 所以您肯定已经在beta wp7工具中使用资源生成操作引用了图像吗?(我尝试了很长时间,但一直无法做到,这有点令人沮丧,因为这就是示例项目所做的...) - Henry C
我已经在代码中使用Application.GetResourceStream(new Uri(filename, UriKind.Relative));作为beta工具中的资源来访问图像。我也直接在XAML中引用了两种构建类型的图像。VS会创建一个关于资源的警告,但它仍然可以正常工作。我想这取决于你想如何引用它们。 - Matt Lacey
4
使用内容而不是资源也会使程序集的大小最小化,从而减少应用程序启动时间(详情请参阅《高性能白皮书》)。 - Andréas Saudemont
2
资源和内容之间最显著的区别之一是,资源在应用程序启动时加载(具有相应的启动性能影响),而内容则根据需要加载(具有相应的加载时间影响)。 - Mick N
我注意到一个重要的区别。确实将设置为Content可以降低程序集的大小。但是...如果您像这样在启动时使用第一页上的图像进行展示:Source="/MyApp;component/Images/UI/board1.png",您可能会看到图像“弹出”。换句话说,如果您想确保应用程序启动时立即显示图像,请使用Resource。实际上,我不确定这是否只是在展示第一页时的问题,但那是我注意到并将我的UI图像更改回Resource的地方。 - Paul Hoenecke

3

任何一种构建操作都是正确的。

解决与构建操作相关的问题时,值得注意的是您使用的路径。我看到有很多人因为错误地设置了构建操作而遇到麻烦。

您可以根据需要设置构建操作方式,以满足何时产生加载时间成本的要求,只需调整路径即可。

此帖子提供了有关该主题的更多信息。

在C#中将源设置为图像

您可以将内容类比为资源的惰性加载版本。

不同之处在于,当加载程序集以启动应用程序时,您将承担所有资源的性能损失。

另一方面,内容的性能损失被推迟到使用它时。

哪种更适合将根据具体情况而异。

还请注意,引用资源和内容的路径是不同的,如下所示。

  //Uri uri = new Uri("/Resources/Images/MyImage.jpg", UriKind.Relative); // Content 
  Uri uri = new Uri("/PhoneApp;component/Resources/Images/MyImage.jpg", UriKind.Relative); // Resource 
  BitmapImage imgSource = new BitmapImage(uri);
  image1.Source = imgSource;

值得注意的是,您可以通过将XAP重命名为ZIP并打开它来查看其对XAP打包的影响。 - Mick N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接