2012年2月19日日曜日

リソースファイルへの参照URI

かなり嵌ってしまったので備忘録として残しておく。

WPFでリソースファイルを参照するには、そのリソースを指すURIを指定する。
なお、前段となるリソースの登録は以下の通り(絶対コレと言うものではない)
  • プロジェクト→既存項目の追加(サブフォルダに入れるのも可)
  • リソースのプロパティ→ ビルドアクション:Resource(埋め込まれたリソースではない)
今回はプロジェクトルート直下のImagesフォルダに画像を登録したとする。
".\Images\picture.png"

リソースがローカルアセンブリに格納している場合には、このリソースを指し示す絶対パス(パッケージ)のURIは次のようになる。
"pack://application:,,,/Images/picture.png"

パッケージのURIについては詳しくはここを見てもらうとして、今回嵌ったのは相対URIになる。
上記絶対URIの相対URIは"/Images/picture.png"となるはずだが、今回BitmapImage.StreamSourceにこの相対URIを指定すると、全く意図した動作をしなかった。
具体的には、先頭に"/"を付けるとアセンブリが置かれているドライブのルートを起点としたURIとして、"/"を付けないとアセンブリを起点としたURIとして扱われた。
なお、XAMLでは問題なく相対URIを指定して想定通りの動作になる。
加えて、これはWPFの話でSilverlightでは相対URIでパッケージを指し示すことができるようだが、う~んよく分からん状態。。。

クラスによって相対URIの扱いが変わるのは分かっているが、それは通常のファイルパスだけだと思っていたんだけど、パッケージについても同様のようだ。
#ファイルパスもURIだから当たり前と言っては当たり前なのかもしれないが…

あまり時間が取れないのできちんと調べることができず、明確な仕様は分からなかった。
現時点では解決策としては絶対URIで指定することくらいかな。
もし同じ問題で嵌った人がいれば、解決策だけでも少しはヒントになれば幸いですね。

0 件のコメント:

コメントを投稿