WPF で 共通するリソース(特に画像) を 別DLL へ切り出して共有利用する方法についてまとめました。
画像ファイルはパス設定をうまくやらないとエラーとなって動かないので、ポイントについて触れながら作成手順を記載します。
サンプルとして名前付きの BitmapImage
を作成します。
目次
サンプルコード
リソースDLL の 作成
ここではまず 共通で利用したい リソースDLL の作成を行います。
-
プロジェクトの作成は 「WPF カスタム コントロール ライブラリ」 を利用します。 空のプロジェクトからもできると思いますが…参照設定が面倒なので前述の「WPF カスタム コントロール ライブラリ」を作成します。
-
不要なコントロール CustomControl1.cs は削除します。 また、「Images」ディレクトリを作成し、画像リソースを「Images」ディレクトリ配下へ配置します。 (ここでは「comment.png」を配置しています。ディレクトリ名は「Images」である必要はないので、任意のディレクトリ名で構いません。)
補足ですが…追加した画像のプロパティは以下の通りです。
- ビルド アクション
- Resouce
- 出力ディレクトリにコピー
- コピーしない
-
プロジェクトのプロパティから「アセンブリ名」を変更します。 ここで変更した名前は、このリソースを参照する際に後で利用します。
-
Generic.xaml に もともとあった
Style
を削除し、BitmapImage
を追加します。 ここで指定するx:Name
は このDLL を利用する際に画像を呼び出すキーとなります。UriSource
へ記載するパスは Generic.xaml から見た相対パスで記述します。
リソースDLL の 利用
以下の手順では、前述で作成した リソースDLL を WPFアプリケーション にて実際に利用する手順を記載します。
-
参照の追加で作成したリソースDLLプロジェクトを参照します。
-
Resouces に 参照した ResouceDictionary を追加します。
Source
へ記載するパス名は以下のようなルールで記載します。 「アセンブリ名」は前述の DLL作成 で指定した アセンブリ名 を記載します。 サンプルでは App.xaml の Resouces へ記載しています。/[アセンブリ名];component/[パス]Generic.xaml
-
実際に画面上で利用する際は リソースDLL (Generic.xaml) で指定した 名前 を直接利用できます。
おまけ
画像リソースを利用している際に次のようなエラーがよく発生しましたが… 試行錯誤の末にこの記事にまとめたような解決策で解決しました。
エラーメッセージ例
リソース 'images/user.png' を検索できません。
エラー原因
原因はパス設定にあると思われますが…単純に解決できなかったので本記事掲載のカタチで構成するのが手っ取り早いと思います。
参考記事
- かずきのBlog@hatena - Windows ストア アプリリソースやアプリデータ内のファイルを指定するのに使えるURL
- @IT - 画像ファイルを表示するには?[Win 8]
- MSDN - WPF デザイナ読み込みエラーのトラブルシューティング
- MSDN - Windows Presentation Foundation におけるパッケージの URI
- (憂国のプログラマ Hatena版 改め) 周回遅れのブルース - Q115. ソリューション全体でアイコンを統一管理したい
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!