Silverlight 2のマネージコードは、一般的なアプリケーションで広く用いられている標準コントロールを利用できます。Silverlight 2で提供されている標準コントロールには、例えばボタンやチェックボックス、リストボックス、コンボボックス、進捗バー、スライダーなどがあります。これらを利用することで、WindowsフォームやHTMLフォームで作られていたアプリケーションと同等のUIを構築できます。単純に、これまでのWindowsアプリケーションをSilverlightに移行させるだけであれば、標準コントロールの組み合わせだけでもある程度のことは実現できるでしょう。

加えてSilverlightでは、コントロールの視覚的な要素をカスタマイズすることができます。コントロールのカスタマイズは、従来のWindowsフォームやWindows APIなどのコントロールでも可能でしたが、コントロールのデザインを変更するにはプログラムで細かい調整を行う必要がありました。古い手法では、既存のクラスを継承して描画メソッドをオーバーライドし、手続き的な処理でコントロールの外観となる図形を描画しなければなりません。ところが、この方法ではツール上でデザインを確認できないため、プログラムをビルドして結果を確認しなければなりません。この作業は、デザイナにとっても開発者にとっても苦痛となるでしょう。

Silverlightのコントロールは、視覚的な要素とロジックが分離されています。よって、コントロール本来の機能を失わずにデザインだけを取り換えることができます。コントロールの外観は、アプリケーションのデザインと同じようにXAMLで宣言できます。従って、プログラマの手を煩わせることなくデザイナの判断でコントロールのデザインを開発及びテストできます。

コントロールのデザインは、XAMLのテンプレートと呼ばれる機能を用いて宣言します。テンプレートでは、コントロールのデザインを形成するインスタンス(図形などのUIElement)の構造を宣言します。コントロールにテンプレートが設定されると、テンプレートの宣言に従ってコントロールの外観が構築されます。正しいコントロールのデザインのためには、プロパティの値との関連付けや、コントロールの状態に応じたデザインの遷移などのテクニックが必要ですがExpression Blendを用いれば、技術的な知識がなくても設定できます。

図01 Expression Blendによるコントロールのデザイン

上の図は、標準コントロールのボタンをカスタマイズした状態です。Expression Blendであればコントロール内部のUIElement構造を、通常のデザインと同じように編集できます。テンプレートの設定によってデザインが楕円形に変更されていますが、アプリケーションから見たインスタンスはButton型であるため、標準コントロールのボタンとしての機能は失われません。

ただし、拡張したコントロールが独自の振る舞いやデータ表現を提供する場合、テンプレートによって提供するインスタンスと、コントロールを制御するプログラムが適切に結合されなければ正しく動作しません。例えば、進捗バーのようにプロパティに設定される値によってデザインが変更される場合、プロパティの変更によってプログラムからデザインを制御しなければなりません。このとき、制御対象となるインスタンスを取得できなければ問題が発生します。カスタムコントロールの開発では、開発者とデザイナがコミュニケーションを十分にとり、認識を一致させることが重要になります。

再利用可能なコントロール

テンプレートを既存のインスタンスに設定することで、容易にコントロールのデザインを切り替えられますが、一般には標準コントロールを継承する新しいコントロールを用意し、この中にデザインとロジックの結合などの主な作業を隠ぺいするべきです。新しい機能を持つ独自のコントロールを開発する場合も、やはりデザイン部分はテンプレートを使うことになります。再利用可能なカスタムコントロールを用意すれば、利用者は他の標準コントロールと同じように貼り付けるだけなので使えます。

オープンソースで開発されているSilverlight Toolkitは、Silverlightの拡張コントロール集として代表的な存在です。これを使えば、標準コントロールで不足している機能を補ってくれるでしょう。ソースコードが公開されているため、カスタムコントロール開発の例としても参考になります。

図02 Silverlight Toolkitのオンラインサンプル

ビジネス分野では、プレゼンテーション層のコンポーネント開発を専門とするインフラジスティックス社の製品であるNetAdvantageに含まれるSilverlight LOBコントロールが参考になるでしょう。こちらのサンプルページで、製品に含まれている各種コントロールを体験できます。現在はCTP版として公開されており、間もなくリリース予定となっています。

図03 インフラジスティックス社のSilverlightコントロール

このような再利用可能なコントロール群を使えば、テンプレートなどのデザインの仕組みに詳しくない開発者でも、高品質なデザインをアプリケーションに適用できます。また、インフラジスティックス社のように幅広く業務で応用できるカスタムコントロール群を開発し、ライセンスを販売することでビジネスにもできるでしょう。

標準コントロールを貼り付けているだけでは従来のアプリケーションとの差別化ができません。Silverlightの柔軟で自由なデザイン性を応用してコントロールをカスタマイズし、業務に特化したデータ表現や操作性を実現することで、高品質なユーザー体験を提供できます。

著者プロフィール:赤坂玲音

フリーランスのテクニカルライタ兼アプリケーション開発者。主にクライアント技術、プレゼンテーション技術が専門。2005年から現在まで「Microsoft MVP Visual C++」受賞。技術解説書を中心に著書多数。近著に『Silverlight入門』(翔泳社)などがある。