Silverlightのリソースの分類
リソースは意味の広い言葉ですがここではプログラミング上実態のあるものを挙げます。
わたしは充分こんがらがっています。勝手に名前を付けたいと思います。
1.System.Windows.ResourceDictionary
XAMLで、<Window.Resources>、<UserControl.Resources> や <Grid.Resources> のように、任意の場所に ResourceDictionary を作って、いろいろなものが格納できます。
ビハンドコードでは、this.Resources などプロパティとして扱います。Addメソッドがあるので、ビハインドコードでもリソースを追加できます。文字列で表現されない BitmapImage なども追加できます。
XAMLでの参照は、"{StaticResource res1}" のような記述で行います。
Silverlight の XamlReader は、リソースを参照できませんでした。(LoadメソッドにContextがない。)
2.マニフェスト・リソース
Visual Studio のソリューションエクスプローラにファイルを追加して、ビルドアクションでリソースを指定したファイルのことです。
試したことは「Silverlightのマニフェスト・リソース」に書きました。
名前は、アクセス手段から採りました。
以下の2つは、アセンブリ(DLL)の同じ区分に格納されます。
2.1.埋め込まれたリソース
ビルドアクションで「埋め込まれたリソース」を指定したファイルです。
- Assembly asm = Assembly.GetExecutingAssembly();
- string[] sa = asm.GetManifestResourceNames();
の、ようにして一覧を取得できます。他のリソースは、あえて一覧を取得するメソッドを用意していないようです。
以下のようにして、ファイルとして開くことができます。
Stream stream = asm.GetManifestResourceStream("名前空間.ファイル名");
「埋め込まれたリソース」は、アプリケーションようであるらしく、XAMLにファイル名を書いた場合、自動的に探される範疇には無いようです。
2.2.Resource
ビルドアクションで「Resource」を指定したファイルです。
これも同じ区分に格納されるようですが、名前空間.g.resources と言う名前でまとめて格納されます。
ResourceManager を使って、ファイルを開くことはできます。一覧を得ることはできないようです。
その代わり、ここにあるファイルはXAMLに記述したファイルの検索対象になっています。
logo.png ファイルを「Resource」としてプロジェクトに加えます。
<image Source="logo.png"/>
と、すると表示されました。
3.その他
|