WPFでリソースファイルを参照するには、そのリソースを指すURIを指定する。
なお、前段となるリソースの登録は以下の通り(絶対コレと言うものではない)
- プロジェクト→既存項目の追加(サブフォルダに入れるのも可)
- リソースのプロパティ→ ビルドアクション:Resource(埋め込まれたリソースではない)
".\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 件のコメント:
コメントを投稿