Ktouth Brand. on Web

け〜くんこと K.Ktouth のだらだらした日常と突発的に作るプログラムや読み物とかの雑多サイト



[2007年11月27日]

VC#2008でWPFアプリに画像リソースを埋め込む

2007年11月28日 08:14更新 筆者:K.Ktouth

Visual C# 2008 Express 日本語β2でWPFアプリの勉強してますが、いざ画像を表示しようとしたとき、ちょっとした事で丸一日大ハマりしてしまったので忘れないようにトピックにしときます。

要はWinFormsアプリとリソースの設定方法が大幅に違ったって事です。

調べるのに丸一日かかったわけですが……WPFがきちんと使える正式な開発環境がまだ発売になってないとはいえ、情報が少なすぎましたかなし
やっぱみんなこのくらい普通に理解できてるって事なのかなぁ……T_T

RESXは不要

従来のWinFormsアプリで画像をリソースとして埋め込む場合、プロジェクトのプロパティのリソースタブで追加する事で、自動生成されたコードを用いた簡単な利用方法があったのですが、WPFでは使用できません。
なにせその場合、System.Drawing.Bitmap型になってしまうからです。
WPFで利用できる画像はSystem.Windows.Media.BitmapSource型である必要があります。
# プロジェクトのリソースタブはWPFアプリでは使用しません。

以下、登録方法の説明です。
プロジェクトのImagesフォルダ内にallocator.png画像ファイルを登録し、埋め込みリソースとして使用する方法です。

1.プロジェクトに普通に登録する

ソリューションウィンドウ画像のプロパティ

まず、プロジェクトに画像ファイルを登録します。追加から既存のファイルを選ぶかエクスプローラからドロップすると登録されます。
登録した画像を選択し、プロパティでビルドオプションが「Resource」、出力ディレクトリに「コピーしない」になっているかを確認し、必要なら変更します。
# 日本語正式版ではここの表示がResourceではない可能性あり。

2.XAMLファイルにリソースとして記述する

専用のリソースエディタみたいなものはないようですが、リソースとして定義するのは簡単です。
XAMLファイルのリソースタグの内部に名前付きで登録するだけです。

今回の例ではCategoryWindow.xamlでのみ使用する画像なので、この中で記述します。
画像の量が多かったり、いくつものソースで使用するならApp.xamlかリソースディレクトリをつくってそちらに登録する方が良いでしょう。

記述は以下の通り。

<Window.Resources>
 <BitmapImage x:Key="Allocator" UriSource="Images/allocator.png" />
</Window.Resources>

実にシンプル。
BitmapImage型は一般的な画像形式に対応してます。x:Keyでリソース名をつける事。
Image型のSourceプロパティには「ファイルパス名」を書きますが、BitmapImage型のUriSourceプロパティには「画像URI」を書くという事に注意。
今回のようにフォルダを別にしている場合、フォルダ区切りが「¥」ではなく「/」になる訳です。

あとは必要なところでこのリソースを名前で割り当てていけばOK。
たとえば……

<Image Width="200" Stretch="Fill" Source="{StaticResource Allocator}" />

こうなります。

本日のリンク元
アンテナ
その他のリンク元
検索