用語が難しいのが一番の障害だと思います。
(私が順にしっかり覚えていっていないだけかもしれませんが。。)
というわけで、自分用の用語集を自分なりの言葉で書いています。
正確ではなかったり、間違っていたり、
他の人にとっては余計にわからなくなるかもしれませんが、あしからず。
データ
ユーザーが入力したりWebから取得したりした情報そのもの
Control
ButtonやListBoxなど。
データを表示したり選択したり、表示を変化させたり、など、『コントロール』するクラス。
多くの場合、.net frameworkで用意されているものを使うが、
カスタムコントロールもある。
※Controlというクラス自体もあるが、ここで説明しているのは
「なんとかControl」や「Controlなんとか」(ControlTemplateなど)のように使う
言葉としてのControl
Content
Controlの上に『表示するもの』。
『表示するもの』はデータの場合もあれば、他のControlの場合もある。
ControlにはContentプロパティがありobject型のインスタンスを1つだけ持てる。
複数のContentを持てるControlもあるが、その場合はContentプロパティではなく
ItemsプロパティがContentのリストを表す。
ContentControl
上記で示したような『Contentを1つ取るようなタイプのControl』を示すクラス。
ButtonやListBoxItemなどの具体的なクラスは、このクラスから派生している。
ContentPresenter
Content(=ContentControlクラスが持っているプロパティでobject型)などを、
実行時のデータ型に応じて表示するための仕組みを持つクラス。
Imageだったらそのまま表示したり、テンプレートが指定されていたらそれに従って表示したり、
最悪ToString()した文字列を表示したり、といったことをやってくれる。
具体的にどのように表示方法を決めるのかはエッセンシャルWPFのp.107など参照。
ContentControlはContentPresenterを持ち、
これによってContentプロパティに入っているインスタンスの表示をしている
ContentTemplate
ContentControlの1プロパティ。
Contentの表示用のテンプレートを指定したいときに使う。
ContentTemplateプロパティにはDataTemplateを入れる。
DataTemplate
データはあくまで文字列や数値、またはそれらを含むクラス(主にプログラマが作ったクラス)であり、
UIとしてWindow上にどう描画されるかはわからない。
単純な文字列でさえ、TextBlockという表示要素に格納され、
TextBlockが文字列を表示している。
(特に意識しない場合でもContentPresenterが勝手にやってくれてる)
DetaTemplateは、あるデータがどのようなUI要素(ImageやTextBlock)の組み合わせで
表示されるべきかを決めるもの。
Keyを割り当てておけば、使う場面に応じて、
同じデータを違うテンプレートで表示することができる。
表示ツリー
表示要素は、Windowの上にButtonとTextBlockをおいて、
Buttonの上にはさらにTextBlockがおいてあり、・・・というツリー上になっている。
正確に言えば、
<Button>OK</Button>
とXAMLで書いただけで、
Button→ButtonChrome→ContentPresenter→TextBlock
というツリーができている。このツリーのこと。
Button自体はClickなどのイベントロジックなどボタンの基礎要素であり、
ButtonChromeはButtonの背景イメージであり、
TextBlockはContentPresenterがOKという文字列から判断して生成したもの。
当然OKの部分が文字列ではなかったら、
ContentPresenterはTextBlockじゃないものを生成するかもしれない。
ちなみにこのツリーを作るファクトリがあるが、XAMLで書くときは意識しないでいい。
ControlTemplate
上記のようにControlごとに表示ツリーがある程度決まっているが、
この表示ツリーをカスタマイズするもの。
Button→Ellipse→TextBlock
のように表示ツリーを替えることができる。
Style
Templateがツリー全体をごっそり入れ替えるのに対して、
Styleは一部のプロパティ(たとえばBorderBrushなど)を変更するもの。
Triggerを組み合わせることによって、~したとき色を変える、などができる。
※この文書は公開後も随時更新予定です。
0 件のコメント:
コメントを投稿