イメージや動画などのアセットの配置(その2):DLLにリソースとして配置

ちょいと間が空いてしまいました。続いてはリソースとして保持して、それを読み出すです。


Visual Studioでの設定ですが、まずは普通にプロジェクトに追加します。これは前のXAPの中に配置するのと同じです。


ここからが違うところで、その配置したファイルのプロパティで[ビルドアクション]を[Resource]にします。


どんな感じでリソースに入っているか、Reflectorで確認してみます。

[プロジェクト名 + g + resources]って形で管理されているようです。
で、よく見てみると XAML も同じ所に入ってます。ということは、 XAML を読み込んでいる部分を参考にすれば読み込み方がわかるかも知れません。


XAMLを実行時に読み込んでいる部分は、自動生成されるファイルで記述されてます。


Visual Studioのソリューションエクスプローラーですべてのファイルを表示するようにして、[obj] - [Debug]フォルダを開けてみてください。いろんなファイルがあります。

この中の xxx.g.cs っていうのが XAML に対応するコードファイルのパーシャルクラスになってます。開けて中のコードを確認すると、以下のようなコードを確認できます。

System.Windows.Application.LoadComponent(this, new System.Uri("/ImageLoadPath;component/Page.xaml", System.UriKind.Relative));

こいつですね。


このURIの部分のように、画像を指定してやると読み込めそうです。

<UserControl x:Class="ImageLoadPath.Page"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel>
    <Image Stretch="None" Source="/ImageLoadPath;component/Chicken1.png"/>
    <Image Stretch="None" Source="/ImageLoadPath;component/image/Chicken2.png"/>
  </StackPanel>
</UserControl>

無事に読み込めました。


と、長々書いてきましたが要はポイントは2つ。

  1. プロパティで[ビルドアクション]を[Resource]に設定する。
  2. URLを「/ + プロジェクト名 + ;component + ルートからのファイル名」で指定する。

です。