Как перечислить изображения, включенные в «Контент» в XAP? - PullRequest
5 голосов
/ 17 сентября 2011

Я включил несколько изображений в качестве «Содержимого» в развернутый XAP для Mango.

Я бы хотел перечислить их во время выполнения - есть ли способ сделать это?

Я пробовал перечислять ресурсы, такие как:

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

Но изображения не включены в список. Я также попытался использовать встроенные ресурсы, но это не помогло. Я могу читать потоки, используя Application.GetResourceStream(uri), но, очевидно, мне нужно знать имена, чтобы сделать это.

Ответы [ 3 ]

4 голосов
/ 19 сентября 2011

Не найдя практического способа чтения файлов содержимого из XAP, я строю такой список во время разработки, используя T4.

См. Пример на https://github.com/mrlacey/phonegap-wp7/blob/master/WP7Gap/WP7Gap/MainPage.xaml.cs

Кажется, это правильный путь:
а) Я предпочел бы создать список один раз во время разработки, а не на каждом телефоне, для которого требуется код.
и
б) Я никогда не должен был строить XAP, не будучи уверенным в том, какие файлы я включаю в любом случае.

Кроме того, это ручной шаг для установки действия сборки для всех таких файлов, поэтому добавление ручного шага в «Запуск пользовательского инструмента» один раз для каждой сборки не представляет для меня проблемы.

4 голосов
/ 17 сентября 2011

Это не API, встроенный в WP7, который позволяет вам перечислять содержимое Xap.Вам необходимо знать имя элементов содержимого, прежде чем вы сможете их восстановить.

Возможно, где-то где-то есть код, который может найти каталог Zip в XAP, однако я настоятельно рекомендую вамне заморачивайсяВместо этого включите какой-нибудь разумный ресурс, такой как XML-файл или ResourceDictionary, который перечисляет их.

1 голос
/ 19 сентября 2011

Нет способа перечислить файлы, установленные как «Содержимое».

Однако существует способ перечисления файлов во время выполнения, если вы установите файлы как «Встроенный ресурс».

Вот как вы можете это сделать:

  1. Установите действие по созданию ваших изображений как «Встроенный ресурс».
  2. Используйте Assembly.GetCallingAssembly().GetManifestResourceNames() для перечислить имена ресурсов
  3. Использование 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, поэтому, если вы используете большой объем изображений, время загрузки приложения может пострадать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...