![]() |
連載:WPF入門 第3回 XAMLコードから生成されるプログラム・コードを理解する 2010/08/03 |
|
|
前回は主に、WPFによらないXAMLの一般的な仕組みについて説明を行った。今回からはWPF固有の機能に踏み込んで説明していく。
まず、WPFの内部的な挙動の理解を深めてもらうため、XAMLコードから自動生成される中間生成物のプログラム・コード(C#/VB)について説明を行う。また、プログラムの起点となるApplicationクラス(System.Windows名前空間)に関する説明も行う(Applicationクラスと並んでWPFアプリケーションの基礎となるWindowクラスに関しては、「コントロール」の一種と見なせるため、次回以降、「コントロール」に関する回にて説明を行う)。
さらに、データ・バインディングなどの高度な機能を実現するための要となる「依存関係プロパティ」と「ルーティング・イベント」に関する説明を行う。
■XAMLコードから自動生成される中間生成物のプログラム・コード
前回からの再掲になるが、標準的なWPFアプリケーションの作りをもう一度見てみよう。Visual StudioのテンプレートからWPFアプリケーション・プロジェクトを作成すると、Figure 1に示すような状態が得られるはずだ。
![]() |
| Figure 1: Visual StudioでWPFアプリケーション・プロジェクト(C#)を作成した直後の状態 |
前回は概要のみの説明だったが、今回はもう少し踏み込んで、XAMLコードから自動生成される中間生成物のプログラム・コード(.g.cs/.g.vbファイルなど。詳しくは第1回を参照)について説明していく。
●MainWindow.xamlファイルから生成されるプログラム・コード
MainWindow.xamlファイルの分離コードであるMainWindow.xaml.cs/MainWindow.xaml.vbファイル内に生成されるMainWindowクラスは、名前どおり、アプリケーション起動時に最初に開かれるメイン・ウィンドウで、その実体はWindowクラス(System.Windows名前空間)を継承したクラスである。MainWindowクラスはパーシャル・クラスとなっていて、MainWindow.xamlファイルから自動生成されるプログラム・コードと合わせて1つのクラスとなる。
Visual Studioのテンプレートから生成されたままのMainWindow.xamlファイル(+その分離コード)をビルド(=コンパイル)すると、List 1に示すようなプログラム・コードが(objフォルダ内に「MainWindow.g.cs/MainWindow.g.vb」などの名前で)自動生成される(見やすさを優先して、属性やコメントなどを一部削っている)。
|
||
| List 1: MainWindow.xamlファイルから自動生成される中間生成物のプログラム・コード(上:MainWindow.g.cs、下:MainWindow.g.vb) |
上記のコードを見ると分かるように、Visual Studioテンプレートからの生成時の状態では、XAMLコードのロード以外には特に何も行っていない。
ここで、XAMLコードに記述を追加すると、自動生成されるプログラム・コードに以下のような変化が生じる。
- XAMLコード中でUI要素にName属性を付けると、同名のフィールドが追加され、IComponentConnector.Connectメソッド中での初期化が行われる
- XAMLコード中でイベント・ハンドラの登録を行うと、IComponentConnector.Connectメソッド中でイベント・ハンドラの追加が行われる
- <x:Code>要素を追加すると、要素内の記述がそのまま自動生成されたクラス内部にコピーされる
例えば、MainWindow.xamlファイルをList 2のように書き換えると、自動生成されるプログラム・コードにList 3に示すようなコードが追加される。
|
|
| List 2: Name属性やClick属性を含むようにMainWindow.xamlファイルを書き換え(XAML)(C#) | |
VBの場合は、上記の<x:Code>要素内に記述しているC#のイベント・ハンドラの部分を下記のようにVBのコードに書き直す。
|
|
||
| List 3: List 2から自動生成される中間生成物のプログラム・コード(※部分的に抜粋)(上:MainWindow.g.cs、下:MainWindow.g.vb) |
XAMLコードに記述した<x:Code>要素は、HTMLでいうところの<script>タグによるスクリプト・コードの埋め込みと同じ感覚で利用できるが、実際のところWPFアプリケーション開発ではあまり利用されない。WPFの場合、プログラム・コードは分離コードの中に記述するのが一般的である。
また、XAMLコード中の属性構文で指定した値がプロパティの場合は、(InitializeComponentメソッド内で呼び出されている)LoadComponentメソッド内で自動的に読み出してもらえるが(すなわち、プログラム・コードの自動生成に頼らない、XAML自体の仕様)、その値がイベントの場合には、上記のようなプログラム・コードの追加が必要となる。
続いて、App.xamlファイルから生成されるプログラム・コードについて説明する。
| INDEX | ||
| [連載]WPF入門 | ||
| 第3回 XAMLコードから生成されるプログラム・コードを理解する | ||
| 1.MainWindow.xamlファイルから生成されるプログラム・コード | ||
| 2.App.xamlファイルから生成されるプログラム・コード | ||
| 3.依存関係プロパティ | ||
| 4.ルーティング・イベント | ||
| 「WPF入門」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
は.NET開発者中心に生まれ変わりました
スポンサーからのお知らせ
.NET開発者中心コーナー
- - PR -
イベントカレンダー
- - PR -



