ブレイクスルー
いい響きだ。
日常でこれを実感できることはなかなか無い。
今日は久々にブレイクスルーがあったのでいつものようにメモするー。
コントローラーの種類が倍くらい増えた.NET3.0だが、やはり「欲しい」コントローラーは自作する必要がある。
当然、プロパティもニーズに合わせてぼこぼこ並べる。
.NET2.0ならなんの問題も無い。
だが、
C#ではアクセサがイベントドリブンのカギになっている。
値が変わったからイベント発生
この処理の最初の門はアクセサなのだ。
だから.NET2.0ではアクセサ内でイベントメッセージを発行させていた。
値が変わったから今すぐ画面の文字を書き換えて再描画しなさい
という具合だ。
これが.NET3.0のコーディングスタイルと矛盾するのだ。
.NET2.0ならコーディングで再描画させるが、
.NET3.0ではXAMLが定義する。
つまりあらかじめ「どのプロパティが変わったらこの描画パターンを実行するか」を決めておくのだ(そのXAMLのエディタがBlend)。
だから、なんとかしてプロパティが変わったことを.NET3.0に知らせなければいけない。
それが
プロパティトリガー
だ。
このプロパティトリガー
標準のプロパティならドロップダウンで選べるのだが、自作モノは出てこない。
デリゲートでメッセージ発行させても出てこない。
本を紐解いても載ってない(参考書というものは大抵現場のニーズに応えてくれない)。
仕方ないので無理やりXAMLを書き換えて自作プロパティをトリガー化してみた。
エラーが出た。
そりゃそうかとガッカリしたが、よく読むと「DependencyPropertyではありません」と出ているではないか。
そうか。
DependencyPropertyにすればいいんだな!?(-_☆)キラーン
グーグルで調べまくって
ここにたどり着いた。
ここのサンプル通りに書いてうまく行った。
DependencyPropertyで悩んでいる諸君は参考にされたし。
public static readonly DependencyProperty IconColorProperty =
DependencyProperty.Register(
“IconColor”,
typeof(Brush),
typeof(PlayButton),
new FrameworkPropertyMetadata(Brushes.Black,
new PropertyChangedCallback(OnIconColorChanged
)));
|
ご覧のとおり、DependencyPropertyという型を宣言して、実際のプロパティの型は第2引数で指定している(ちなみに第1引数はホンモノのアクセサ)。
なんちゅー無茶苦茶なテクニックだ。型とか超無視じゃん(いや無視してないんだけど)。なんでもありじゃないか。
ゲイツこんなのよく作ったなぁ。
ブログ一覧 |
プログラム | 日記
Posted at
2007/11/09 20:44:49