2010の開発サポートや標準機能の充実で本格的な実用が進むことが期待できるGUI技術の「WPF」。WPFを基礎から学べる連載スタート。Frameworkに含まれるプレゼンテーション層技術(GUI開発ライブラリ)である。Frameworkに標準搭載されている。APIをマネージ・コードでラップしたものであるのに対して、WPFはマネージ・コードで新たに実装されたGUI開発ライブラリであり、豊かなユーザー体験を提供する先進的なGUI開発基盤である(詳細後述)。Frameworkが3.0、3.5、4とバージョン・アップし、WPFはすでに3世代目を迎える。Studioによる開発サポートも充実し、実用するのに必要十分な環境がようやく整った。WPFの時代がやって来たといっても過言ではないだろう。そこで、読者の皆さま方には本連載を通じて、ぜひともWPFを学んでいただきたい。連載第1回なる今回は、WPFの概要について説明する。●グラフィックス・ハードウェアWPFはコアの部分にグラフィックス・ハードウェアを活用したベクター・ベースのレンダリング・エンジンを採用している。ベクター・ベースであるため、UI要素にスムーズな拡大・縮小/回転を掛けることができる。ハードウェア・アクセラレーションにより、CPUへの負担を最小限に抑えている。●コントロール、メディア、文書の統合WPFは、ボタンやリストボックスなどのコントロール、ラスター画像やベクター・グラフィックス、頂点メッシュを用いた3D描画、動画などのメディア、リッチテキストなどの整形済み文書に対して、統一的な開発機能を提供する。それぞれに別個のプログラミング・モデルを覚える必要がないだけではなく、例えばボタンの中に動画を表示するといった組み合わせも簡単に行える。既存のGUI開発ライブラリでは、ボタンなどのUI要素をカスタマイズするにしても、サイズや背景色の変更程度の機能しか持っていないものも多い。これに対してWPFでは、例えば任意の形状のボタンを作成したり、背景に動画を流したり、動的に回転や拡大・縮小を行ったりといった非常に柔軟なカスタマイズが可能である。Language)と呼ばれる、XML形式の宣言的言語を用いてユーザー・インターフェイスを記述する。見た目(=外観デザイン)に関する部分をXAML言語で記述し、ロジックをC#言語などを用いて記述することで、アプリケーションの見た目に関する部分をロジックから完全に切り離す構造になっている。これは、ビジュアル・デザイナーとロジック開発者との協業を意識したものである。■プログラミング・モデルWPFでは、以下のようなプログラミング・モデルに基づいた開発を行うことになる。XAMLコード+分離コードツリー構造のUI要素データ・バインディングプログラミング・モデルに関して、1つ特筆すべきことがある。Application)開発環境であるSilverlightもWPFと同じプログラミング・モデルに基づいているという点だ。WPFとSilverlightでは、さすがにソース・コードの丸々コピーで動くということはないが、プログラミング・モデルにさえ慣れ親しんでしまえば相互の移植は簡単である。それでは、これらの詳細ついて説明していこう。●XAMLコード+分離コード前述したとおり、WPFでは、XAML言語と、C#などのプログラミング言語を用いてアプリケーションを開発する。1に示すように、C#などで記述する(「分離コード」と呼ぶ)。XAMLコード+(C#などの)分離コードXAMLコードと、それに付随する(C#などの)分離コードは、ビルド時に1つのクラスに合成され(部分クラスという機能を用いている)、コンパイルされる。Languageと呼ばれるもので、ファイル・サイズの縮小と読み込み負荷の軽減を目的としてXAMLコードをバイナリ化したものである。BAMLコードはリソースとして実行可能ファイル(=.exeファイル)に埋め込まれる。中間生成物の.g.csファイルは、XAMLコード内で定義したUI要素(=ボタンやテキストボックスなど)を(C#などの)分離コード側から参照するためのコードや、BAMLコードを読み込むためのコードを含んでいる。このような、XAMLコードと(C#などの)分離コードを分けることには以下の利点がある。ビジュアル・デザイナー向けのツールを用いた外観デザインが容易UI要素の階層が深くなった場合に、(一般的なプログラミング言語よりも)階層構造を把握しやすいWeb開発で一般的に用いられているHTML+JavaScriptに似た感覚でアプリケーションを開発可能C#のようなプログラミング言語では書けない、あるいは、書きにくい記述が容易1と2はXML形式を用いることによる利点である。XMLのコードはツールでの解析が容易であり、また、階層的なデータ構造を取り扱うのに向いている。3に関して、Web開発におけるHTML+JavaScriptの流行は「見た目とロジックの分離が容易である」という利点が支持されたという側面がある。WPFのXAML+分離コード(C#など)という構成はこの流れをくむものだ。4に関しては、詳細は後述することになるが、依存関係プロパティやデータ・バインディングと呼ばれる機能がこれに該当する。続いて、ツリー構造のUI要素を説明する。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。