SilverlightのXAPにファイルを含め、そのファイルにアクセスする

前回、アセンブリにファイルを埋め込む方法を紹介しました。今回は、アセンブリではなくXAPファイル内にファイルを含める方法を紹介します。

サンプルコードのダウンロード

今回の記事用のサンプルコードを下記からダウンロードすることができます。参考にしてください。

XAPにファイルを含める

XAPにファイルを含めるたには、ファイルのビルドアクションを「コンテンツ」に指定します。XAPにファイルを含めるときの注意する点は、「Mainプロジェクトに配置されているファイルのみXAPに配置することができる」ということです。下の例では、Library1のImage/Desert.jpgファイルのビルドアクションを「コンテンツ」にしてもXAPに含まれません。


設定が終わった後ビルドしてXAPの中身を見てみましょう。XAPはZipファイルの拡張子が.xapになっただけなので、簡単に中身をのぞくことができます。
XAP内にはSilverlightアプリの構成を記述したAppManifest.xamlアセンブリのほかにImageフォルダが作成されていることがわかります。このImageフォルダの中に画像ファイルは格納されています。

試しに、ContentBuildActionSampleプロジェクトのImaeg/sample.jpgファイルのビルドアクションを「なし」にしてリビルドしてみると、XAP内にはImageフォルダごと消えていることがわかります。

XAPに含めたファイルを読み込む

XAPに含めたファイルを読み込む方法は、基本的にアセンブリに含めたファイルを読み込む方法と同様となります。
異なる点は指定するURIの指定方法です。URIは以下のように指定します。

/{XAPの直下をルートとした相対URI}

具体的には、

<Image x:Name="Sample1Image" Source="/Image/sample.jpg" Width="100" Height="100"/>

となります。
また、アセンブリに埋め込んだ場合と異なりフォントファイルをコンテンツに指定しても、フォントファミリに指定することはできません。これはSilverlightの制約です。フォントファイルはResourceビルドアクションを指定してください。
参考ページ

まとめ

XAPファイル内にファイルを含める方法を紹介しました。