- 作者: Adam Nathan
- 出版社/メーカー: Sams
- 発売日: 2010/06/04
- メディア: ペーパーバック
- 購入: 3人 クリック: 13回
- この商品を含むブログ (4件) を見る
上記を参考にしつつ。
画像とかのバイナリデータをプロジェクト内に含み入れる時に、リソースに追加して使うのはWindowsフォームでもWPFでも一緒。で、ビルドアクションの中にContentとResourceってのがある。Contentは外部参照だけで、Resourceはリソースディクショナリに登録され、XAMLから参照できる。
<Image Source="images/logo.jpg"/>
みたいな。こういうのは、バイナリリソース(Binary Resource)と呼ばれる。それに対して、ロジカルリソース(Logical Resource)という概念がWPFにはある。
Logical resources, henceforth called resources are new to WPF. In XAML, resources are simply objects stored in an element’s Resource property so that they can be shared by child elements. Just about any object in WPF can be a resource, like a brush, a color, some text, some style etc.
WPF Simplified Part 9: Logical Resources | I.Net
XAMLでは、リソースっていうのはUIElementのResourceという依存プロパティで参照できるもんなんだよ、と。だからどんなWPF上のオブジェクトでもリソースとして参照できるので、論理的なリソース(バイナリと一線を画してる)という区分けをしてる。Styleを使ってスパっと見た目を切り替えたり出来るのもこのおかげだね。
ロジカルリソースへのアクセス
こんな感じでマークアップ拡張で参照する。
<Grid> <Grid.Resources> <FontStyle x:Key="GridFontStyle">Italic</FontStyle> </Grid.Resources> <!-- ここね --> <RadioButton Content="Some Text" FontStyle="{StaticResource GridFontStyle}" /> </Grid>
StaticResource と Dynamic Resource
StaticとDynamicにあるように、リソース元の変更を追跡するかどうかが大きく違う。当然トラックする分だけオーバーロードがある。が、Static ResourceはWindowやPageが読み込まれたら初期化されるのに対し、Dynamic Resourceはそのオブジェクトが実際に利用されるまで初期化されない。
なので、何かのアクションを起こして変動するような相互参照があるリソースを活用してかつリソース自体のオブジェクト容量が少ない場合、ダイナミックの方が適していることもある、と。
そうはいってもDynamicの場合は依存プロパティにしかセットできないので、使い所は限定されそう。StaticはどのプロパティでもOK。
Static ResourceはXAMLで宣言してから出ないと利用できない
上記の例で言うと、例えばGrid.Resourcesの宣言より前にリソースをバインドすることは出来ない。Dynamic Resourceの場合は依存プロパティだからエスカレーションして初期化出来る。