#setlinebreak(on);
[[WP TIPS に戻る>wp7/tips]]
*ビルドアクション リソース/コンテンツ URI の指定方法 [#cac03fea]
**ビルドアクションについて [#y6f1a37f]
Visual Studio や Expression Blend で画像などのデータをプロジェクトに追加すると、プログラムと一緒にデバイスやエミュレータに配置することが出来ます。
この時 Visual Studio でデータのビルドアクションを指定し、どのように配置をするのか指定することが出来ます。
#ref(buildaction-01.jpg);
ビルドアクションは色々選択できますが、有効なのは "Resource"・"コンテンツ" の2種類だけ(?) で、それぞれデータの格納方式とデータの呼び出し方が異なります。
|種類|内容|
|Resource|アセンブリ内のリソースとして格納される|
|コンテンツ|アセンブリとは別のファイルとして格納される|
**データの読み込み方法について [#u2afc683]
では今度はデータの読み込み方法についてです。
プロジェクトで、01.jpg は "Resoruce"、02.jpg は "コンテンツ" でビルドした物とします。
この2つのデータを読み込むのが以下のコードです。
#ref(buildaction-02.jpg);
コンテンツ読み込みは、Visual Studio プロジェクト内のフォルダ構成と同じ URI になるので、分かりやすいかと思います。
Resource の方は、同一アセンブリ内のリソースを読み込む場合は、プロジェクト内にあるパスに ..\ を付けるだけで読み込みが出来ます。
次に他のアセンブリ内(=別の DLL など) に格納されている画像などを読み込む場合は、URI の先頭にアセンブリ名(この場合は ReadContents) と component というプリフィックスを付けてあげます。
※アセンブリ名は、プロジェクトプロパティの「アセンブリ名」になります。
private void button1_Click(object sender, RoutedEventArgs e)
{
// 同一アセンブリ内の Resource の読み込み
this.image1.Source = new BitmapImage(new Uri(@"..\Image\01.jpg", UriKind.Relative));
// 他のアセンブリ内の Resource の読み込み
this.image1.Source = new BitmapImage(new Uri(@"/ReadContents;component/Image/01.jpg", UriKind.Relative));
}
private void button2_Click(object sender, RoutedEventArgs e)
{
// コンテンツの読み込み
this.image1.Source = new BitmapImage(new Uri("Image/02.jpg", UriKind.Relative));
}
**リソースとコンテンツどちらが良いの? [#je8f66a3]
基本的にはビルドアクションは "コンテンツ" で良いかと思います。
というのも "Resource" にすると DLL 等のコードと一緒にビルドされるので、アセンブリのロードに多少時間がかかるようになります。
※詳しくベンチマークを取ってないですけれども、大量のデータになればアプリの起動時間が遅くなるかと。
"Resource" でビルドする場合は DLL を配布する場合など、コンテンツも含めて同一ファイルにしたい場合などと、メニューバーのアイコンに使用する場合だけだと思われます。
メニューバーのアイコンについては、以下のページの最後を参照して下さい。
[[ApplicationBar のコマンド実装・バインディングとメニューを動的に変更する>wp7/tips/dynamic_applicationbar]]