読者になる銀の弾丸プログラミングに関して、いろいろ書き残していければと思っております。Tumblr「XAMLはなんだか複雑だ」と思ってました。あることに気が付いてから「なかなかシンプルなんじゃない?」と思えるようになりました。知っている方にとっては、当たり前のことかと思いますが、その「ちょっとしたこと」を出発点に、1段掘り下げて調べた結果を書いておきます。536,250Amazon.co.jpで詳細を見るXAMLの要素名はクラス名で、実行時には、そのクラスのデフォルトコンストラクタでインスタンスが生成される。クラス名であることは知っていましたが、デフォルトコンストラクタで生成されるという認識がありませんでした。実行時のオブジェクトの状態を正確に把握できていなかったんですわ。</Grid></Window>takamints.hatenablog.jp上のXAMLでは、次のクラスオブジェクトが生成されています。(ドットを含む要素名と、子要素の所在については後述します)MainWindowViewModelMessageBoxTriggerMessageBoxActionGridButton確かにビューモデルやボタンなどは、実行時に生成されていて、コードビハインドからアクセスできますよね。デフォルトコンストラクタとの関連は想像していなかったんです。このような、標準の部品に関しては、.NETフレームワーク内で特別なことが行われているのだろう・・・などと思ってました。自作クラスも生成されてるってことは・・・という段になって、やっと気付いた。思った以上にシンプルですね。そもそもフレームワークをそんなガチガチに作るわけ無いですし。190,062Amazon.co.jpで詳細を見る要素の属性はそのクラスオブジェクトのパブリックプロパティへの代入です。デフォルトコンストラクタで生成されたのち、プロパティが設定されます。属性値として直接記述できるのは、文字列とか数値といったプリミティブな型に制限されると思います。バインディングの解決は、少し複雑なことがなされているのかもしれませんね。プロパティへクラスオブジェクトを代入するところで、XAMLでデータコンテキストを生成しているところ(以下)。Window.DataContext要素のように、親エレメント.プロパティ名という要素は、親要素のインスタンスプロパティへの代入なんですね。Set)しているということです。静的クラスのプロパティへオブジェクトを代入する以下のInteraction.Triggersも似ていますが、ドットの前がInteractionとなっていて、親要素ではありません。これは、System.Windows.Interactivity.Interactionというスタティッククラスで、そのTriggersというプロパティにMessageBoxTriggerを追加しています。InteractionクラスにそのものスバリのTriggersというプロパティはありません。obj)というメソッドがありますので、XAMLのパーサーがうまくやってくれているのだと思います(詳細不明)。インスタンスが入っていました。}}ちなみにInitializeComponentの前では何も表示されなかったので、XAMLはInitializeComponentで処理されているのでしょう。そもそも子要素は何処に格納されるのかXAMLのパーサーは、子要素のインスタンスを親要素の何処に格納するの?という疑問。コレクションであることは間違いなさそうなのですが。XAMLの以下の部分などですね。</tr:MessageBoxTrigger></i:Interaction.Triggers>「XAMLのパーサーが、MessageBoxTriggerのインスタンスに、MessageBoxActionのインスタンスを保持させている」ということは明らか。このプロパティは、MessageBoxTriggerの基本クラスであるTriggerBaseに実装されています。XAMLだけを見る限りは、そんな事実はわからない。いうことで、System.Windows.Interactivity.TriggerBaseの説明を見てみると、以下のようになっています。XAMLのパーサーはこの宣言に従って子要素を親要素に格納している。いうことで、Interaction.Triggersの中身を、以下のように冗長に書き換えても同じように動作します。</tr:MessageBoxTrigger></i:Interaction.Triggers>まとめと所感このように、曖昧に済ませていたことを深掘りしてみて、かなりスッキリ気分爽快。XAMLで何でもできる気がしてきました。基本を押さえるのはホントに大切。知識やスキルを習得するときの効率性に直結しますね。いくつになってもお勉強です。全国的に梅雨も明け、本格的な夏ですね。9参加グループプログラミングはてなブログをはじめよう!takamintsさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。