2011-09-17 5 views
5

配備したMangoのXAPに「コンテンツ」として数多くの画像が含まれています。XAPで "コンテンツ"として含まれる画像を列挙するには?

実行時にこれらを列挙したいと思います。これを行う方法はありますか?

私は次のようにリソースを列挙しようとしました:

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

しかし、画像がリストに含まれていません。私は埋め込みリソースを代わりに使ってみましたが、それは助けになりませんでした。私はApplication.GetResourceStream(uri)を使ってストリームを読むことができますが、明らかにこれを行うために名前を知る必要があります。

+0

これを行う目的を明確にすることはできますか? –

+0

この特定のケースでは、約100個のアイコンが私がメモリ内であらかじめ記憶しておきたいものです。私は知らないが、これは私が見ているパフォーマンスの問題に役立つだろうと思う。以前のケース(iron7の破産)では、私はスタートアップ時にrubyスクリプトでいっぱいのディレクトリをロードしたかったのです。どちらの場合でも、C#でリストをハードコードできますが、方法がある場合はこれを避けることをお勧めします。フォルダに何が追加されたかを列挙できれば素晴らしいでしょう。 – Stuart

+0

それらを「プリロードする」ことから注目すべき性能増分を得る。ビルドタイプをコンテンツにすることは、すばやく行う必要があります。少なくとも私のすべてのアプリ用です。 –

答えて

1

「コンテンツ」として設定されたファイルを列挙する方法はありません。

ただし、ファイルを「埋め込みリソース」として設定すると、実行時にファイルを列挙する方法があります。 「埋め込まれたリソース」としてあなたのイメージのビルドアクションを設定し

  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); 
    } 

EDIT:ケツァルコアトルが指摘したように、この解決策の欠点は、画像がDLLに埋め込まれていることですので、画像のあなたであれば、高容量、アプリケーションの負荷時間がかかることがあります。

+1

ええ、しかし、OAに忘れてしまったことは、提案したことが大きな影響を1つ持っていることです:EmbeddedResourceはファイルを結果のDLLに組み込みます。 "コンテンツ"では、それらは通常のファイルとしてDLLとともに置かれます。したがって、大量のファイルを "EmbeddedResource"に変換すると、DLLが大幅に増加し、起動に時間がかかることになります。 「コンテンツ」を使用するポイントはモジュールを小さくすることです!セキュリティ上の制約のためにWP7の「コンテンツ」を列挙する方法はありませんが、ビルドプロセス中にリストを生成し、実行時にそのリストを読み取ることは可能です。 – quetzalcoatl

+0

そうですね、その欠点を強調する答えを編集しました。 –

4

これは、Xapのコンテンツを列挙できるWP7に組み込まれたAPIではありません。コンテンツアイテムを検索するには、コンテンツアイテムの名前を知る必要があります。

XAPでZipカタログを盗聴できるコードがあるかもしれませんが、気にしないことを強くお勧めします。代わりに、それらをリストするXmlファイルまたはResourceDictionaryなどの賢明なリソースを含めます。

4

実際にXAPからコンテンツファイルを読み取る方法が見つからないので、設計時にT4を使用してそのようなリストを作成します。 A)私はむしろ、設計時ではなく、コードを必要とするすべての携帯電話に一度リストを作成したい

は、これは行くための正しい方法だhttps://github.com/mrlacey/phonegap-wp7/blob/master/WP7Gap/WP7Gap/MainPage.xaml.cs

で例を参照してください。

b)私はとにかく含まれているファイルを特定せずにXAPを構築するべきではありません。

さらに、このようなすべてのファイルに対してビルドアクションを設定する手動の手順で、ビルドごとに「カスタムツールの実行」を手動で追加することは問題ではありません。

+1

すばらしいスニペット、ありがとう。 – Echilon

関連する問題