如何枚举XAP中包含为“内容”的图像?

时间:2011-09-17 17:35:07

标签: silverlight windows-phone-7 resources

我在Mango部署的XAP中包含了许多图像作为“内容”。

我想在运行时枚举这些 - 有没有办法做到这一点?

我尝试枚举像:

这样的资源
foreach (string key in Application.Current.Resources.Keys)
{
    Debug.WriteLine("Resource:" + key);
}

但图片不包含在列表中。我也尝试过使用嵌入式资源 - 但这并没有帮助。我可以使用Application.GetResourceStream(uri)读取流,但显然我需要知道这些名称才能执行此操作。

3 个答案:

答案 0 :(得分:4)

这不是WP7中的API,它允许您枚举Xap的内容。您需要知道内容项的名称才能进行检索。

可能有一些代码在某处浮动,可以在XAP中嗅出Zip目录但是我强烈建议你不要打扰。而是包含一些合理的资源,例如列出它们的Xml文件或ResourceDictionary

答案 1 :(得分:4)

找不到从XAP读取内容文件的实用方法我在设计时使用T4构建了这样的列表。

请参阅https://github.com/mrlacey/phonegap-wp7/blob/master/WP7Gap/WP7Gap/MainPage.xaml.cs

上的示例

这似乎是正确的方式:
a)我宁愿在设计时建立一次列表,而不是每个需要代码的电话 和
b)我不应该在不确定我包含哪些文件的情况下构建XAP。

另外,这是在所有此类文件上设置构建操作的手动步骤,因此为每个构建添加一次“运行自定义工具”的手动步骤对我来说不是问题。

答案 2 :(得分:1)

无法枚举设置为“内容”的文件。

但是,如果将文件设置为“Embedded Resource”,则可以在运行时枚举文件。

以下是如何执行此操作的方法:

  1. 将图像的构建操作设置为“嵌入式资源”。
  2. 使用Assembly.GetCallingAssembly().GetManifestResourceNames() 枚举资源名称
  3. 使用 Assembly.GetCallingAssembly().GetManifestResourceStream(resName) 获取文件流。
  4. 以下是代码:

        public void Test()
        {
            foreach (String resName in GetResourcesNames())
            {
                Stream s = GetStreamFromEmbeddedResource(resName);
            }
        }
    
        string[] GetResourcesNames()
        {
            return Assembly.GetCallingAssembly().GetManifestResourceNames();
        }
    
        Stream GetStreamFromEmbeddedResource(string resName)
        {
            return Assembly.GetCallingAssembly().GetManifestResourceStream(resName);
        }
    
    编辑:正如quetzalcoatl所指出的,此解决方案的缺点是图像嵌入在DLL中,因此如果您的图像数量很大,则应用程序加载时间可能会受到影响。