我在Mango部署的XAP中包含了许多图像作为“内容”。
我想在运行时枚举这些 - 有没有办法做到这一点?
我尝试枚举像:
这样的资源foreach (string key in Application.Current.Resources.Keys)
{
Debug.WriteLine("Resource:" + key);
}
但图片不包含在列表中。我也尝试过使用嵌入式资源 - 但这并没有帮助。我可以使用Application.GetResourceStream(uri)
读取流,但显然我需要知道这些名称才能执行此操作。
答案 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”,则可以在运行时枚举文件。
以下是如何执行此操作的方法:
Assembly.GetCallingAssembly().GetManifestResourceNames()
枚举资源名称Assembly.GetCallingAssembly().GetManifestResourceStream(resName)
获取文件流。以下是代码:
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中,因此如果您的图像数量很大,则应用程序加载时间可能会受到影响。