Silverlight 2 Beta2 が本日リリースされました。Silverlight 2 Beta2 および それをターゲットとしたVisual Studio とExpression Blend ツールはここからダウンロード可能です
Beta2 には多くの新機能(詳細は以下)が追加されましたが、ダウンロードは4.6MBしかありませんので、マシン上へのインストールは10秒かかりません。.NET Frameworkやその他のソフトは不要で、全ての機能はMacおよびWindowsマシン両方でクロスブラウザとして動作します。これらの機能はMoonlight 2リリースによりLinux上でもサポート予定です。
Silverlight 2 Beta2 はゴーライブライセンスをサポートしており、商用アプリケーションにもSilverlight2の利用および配備することができます。Beta2と最終リリースではいくつかAPIの変更がありますので、Beta2で書いたアプリケーションは最終リリースが出た際にいくつか更新する必要が出てきます。しかし、これらの変更は単純で比較的軽いものですので、商用プロジェクトも今から企画・開始することができると考えています。
VS 2008 Tools for Silverlight およびExpression Blend 2.5 June Preview を使用すれば Silverlight Beta2 アプリケーションを構築することができます。両方ともここからダウンロードすることができます。VS 2008 Tools for Silverlight
はVS 2008 および最近リリースされた VS 2008 SP1 betaで動作します。
UI およびコントロールの改善
Silverlight 2 Beta2 ではUIおよびコントロールの部分で数多くの改善が行われています。:
さらなるビルドインのコントロール
Beta 1 では数個のコントロールのみが、コアなSilverlightセットアップと共に提供されていました。多くの通常のコントロール(Button, ListBox, Slider など)は、別で出荷されたアセンブリをアプリケーションにバンドルする必要がありました(それによりアプリケーションのダウンロードサイズが増加)。Beta2では通常よく使われるコントロールが30個以上コアのSilverlight2の一部としてインストールされます。つまり、コアなコントロールを使用するSilverlight2アプリケーションを約3KBというサイズで構築することができるため、Silverlightアプリケーションのダウンロードは軽く、スタートアップも早くなります。
ベースのSilverlight2セットアップにはコアなコントロールが追加されましたが、今週さらによりハイレベルのコントロールが出荷される予定です。それらは、別のアセンブリで実装されており、作成したアプリケーションに追加して参照することができます。これには、例えば、DataGrid (詳細は以下のBeta2の新機能で。)、Calendar (Beta2では複数の日付選択および特別制限期間のサポート)、TabPanel (Beta2での新機能)などがあります。
最終的にはSilverlight用のコントロールが100個以上出荷できればと思っています。
コントロール・テンプレート編集サポート
WPFとSilverlightのプログラミングモデルで最も強力な機能の1つに、コントロールのルックアンドフィールが完全にカスタマイズできることがあります。これにより、開発者やデザイナたちはコントロールのUIを微妙でも劇的にでも飾り付けることができ、大きな柔軟性を得ることができます。これらの概念については以前のSilverlightコントロールのテンプレート化のブログで少しカバーしてあります。
今週のExpression Blend 2.5 June Preview にはコントロールテンプレートの編集が新たにサポートされており、それを行うためのXAMLソースをドロップダウンせずに 全てのコントロールの外観を簡単に変更できるようになっています。
実際にコントロールテンプレートを確認するには、2つのSliderコントロールをExpression Blendのデザインビューにドラッグアンドドロップするだけです。
デフォルトのSliderコントロールテンプレートのスライダーのヘッドがアプリケーションに対してサイズが大きい場合があります。デザイナ上にあるスライダ上で右クリックし、コンテキストメニューから"コントロール・パーツの編集"を選択すれば、コントロールテンプレート編集が使用できます。スライダーに対して、コントロールテンプレートを最初から新規作成することも、ビルドインのコントロールテンプレートをコピーして編集することも可能です。:
既存のコントロールテンプレートをコピーして編集する場合、Blendはコントロールテンプレートの中で定義していく再利用可能なスタイルのリソースを新規作成し、名前を付けて保存するようにポップアップします。それに名前を付けて、アプリケーションレベル(App.xaml内)または現在のページおよびユーザコントロール内でそのスタイルを保存します。
"OK" をクリックすると、Sliderコントロールのテンプレートの編集モードに戻ります。そのSliderコントロールのテンプレート内にある要素はどれも変更、調整、追加、削除を行うことができます。以下のテンプレート編集モードの様子をご覧ください。スライダーのコントロールテンプレートを構成している全ての要素を確認・選択することができます。("Objects"ウィンドウ内で赤で囲まれたものです。)
スライダーのヘッドを狭めるには、コントロールテンプレート内の"HorizontalThumb" 要素を選択して、(GUIからまたはプロパティグリッドから)幅を調整します。
デザイナ上部のパンくずナビゲーションバーを使用して、ページに戻り、コントロールテンプレートに変更が適用されているかを確認します。
ご覧頂くと、スライダーコントロールの1つだけが、コントロールテンプレートで定義した新しいスタイルリソースを使用しています。
他のスライダーコントロールにも同じスタイルリソースを適用するには、それらを選択し、右クリックで コンテキストメニューから"リソースの適用"を選択し、それらにも"ScottSlider"スタイルを適用します。
両方のスライダーの参照に同じスタイルを適用した場合。:
今後"ScottSlider" スタイルに適用された変更は、自動的に両方のコントロールに適用されるようになります。
Silverlight2で出荷された 全てのコントロールはコントロールテンプレートをサポートしているため、今後上記のExpression Blendでの編集もサポートされます。
Visual State Manager (VSM) のサポート
SilverlightやWPFのコントロールテンプレートではコントロールの"外観"および"操作"を共にカスタマイズすることができます。つまり、対話的なリスポンスが変更できます。例えば、押下時、フォーカスのある時、ない時などに、押下されたままの状態なのか、利用不可の状態なのか、何かが内部で選択された状態なのかなど、どのように反応するかです。この様なコントロールをユーザが利用した場合、よく動画を実行したりします。
Silverlight 2 Beta2で導入した新機能の1つが、"Visual State Manager" (VSM) で、これにより対話的なコントロールテンプレートの構築が非常に簡単になります。VSMには、コントロールテンプレート内で利用できる2つの基本的な概念("Visual States" および"State Transitions")が導入されています。 例えば、 Buttonの様なコントロールは複数の外観状態が定義されています。- "通常"、"マウスオーバー", "押下", "利用不可", "選択時", "未選択時"。Blendのテンプレートが編集モードの時に、デザイナは、ボタンの各状態の外観の編集や状態遷移で動画にかかる時間の設定などを
行うことができます。編集されると、起動時にSilverlightは動的に適切な動画のストーリボードを起動し、スムーズにその状態遷移を行います。
このモデルのいいところは、デザイナがコードを書く必要が なく、動画のストーリーボードを手動で作成する必要もなく 、生産的するためにコントロールのオブジェクトモデルについて理解する必要もないところです。つまり、対話的なコントロールテンプレートを新規作成するラーニングカーブが非常に簡単になり、既存のグラフィックデザイナは非常に簡単にSilverlightのプロジェクトで作業できるのです。今年後半に、WPFでもVisual State Manager(VSM) をサポートする予定で、これによりWindowsアプリケーションや、WPFとSilverlightプロジェクト間の共有コントロールテンプレートに対しても同じ方法を使用できるようになります。
実際の動作の例を確認するために、デザイン画面にButtonコントロールを追加してみます。
ボタンを右クリックして、コントロールテンプレートを編集します。既存のデフォルトのコントロールテンプレートから開始せず(上記のスライダーの例で行ったように)、コントロールテンプレートを新規作成し、初めから行っていきます。
Blend がスタイルリソースの名前に対してポップアップしますので、そこへ"ScottButton"と入力しOKをクリックします。そうすると、デザイナはそのButtonの編集ができるようになり、コントロールテンプレートの新規作成ができるようになります。
上記でご確認頂きたいことの1つが "Visual States" ウィンドウがBlendに追加されたことです。ここでは、Buttonコントロールが公開する全ての利用可能な"Visual States" が確認できます。現在上記の
"Base" 状態は選択されていますので、Buttonのコントロールテンプレートのビジュアルツリーが定義できる状態です。
以下のような独自のボタンの外観を定義するベース状態にいくつかベクター要素を追加していくことができます。これらの画像の編集には、Blendが提供しているビルドインのベクター描画ツールを使用するか、代わりにExpression DesignまたはAdobe Illustratorを使用してベクター画像を作成し、それをBlendにインポートします。以下は、4つの"Path" 要素をコントロールテンプレートに追加しています。1つが丸い背景のもの("background")と、1つが陰影のもの("shadow")、1つが透明度40% "shine"で上部に輝きが追加されているもの、1つがデフォルトの内部コンテンツを定義したもの(この場合は家の絵)です。
注:代わりに画像をインポートすることもできますが、ベクター要素を使用すれば、後で解像度や大きさがきれいなままボタンのサイズや形状の変更する柔軟性を持たせることができます。(特にSilverlightのモバイル利用の場合など、スクリーンの解像度が異なったり、小さい場合には便利です。)。またそれにより、アートワークの中で、簡単に動画させたり、変更することができるようになります。
上記のベース状態のデザインが終わったところで、F5を押下しアプリケーションをブラウザで起動します。:
上記でご覧のように、Buttonコントロールは現在外観がよくなっています。新しい外観にも関わらず、ボタンには同じ様に、フォーカス、クリック、マウスオーバーなどのイベントが以前と同じ様に発生しますので、新しいコントロールテンプレートを使用しているボタンの作業時に、開発者はコードの変更を行う必要がありません。
ボタンコントロールテンプレートの悪い点ですが、対話的ではないところです。つまり、そのボタンの選択時・未選択時やマウスオーバーの時に、何も外観的にフィードバックがないということです。またそれをクリックした時に、押下されていない状態および戻る時に対していい動きがないのです。
ボタンに対話性を追加するために、Blendに戻って、ボタンのコントロールテンプレートを編集します。以前ベクター画像要素をButtonコントロールの"Base"状態へ追加し、Buttonのデフォルトの状態の外観を定義しました。ではこれから各Buttonの外観をさらにカスタマイズしていきます。
例えば、ボタンにマウスオーバー動作を実装する場合、"MouseOver" 状態を"States"ウィンドウで選択し、ボタンの外観を微調整します。以下では、コントロールテンプレートの中で"shine"ベクター要素を選択して、透明度プロパティをプロパティグリッドで調整して、マウスオーバーの状態でより見やすくしました。Blendは自動的に"Shine"要素を赤の点線でハイライトし、オブジェクトウィンドウで以下の透明度プロパティ を表示します。これによりコントロールテンプレートの"Base" および"MouseOver"状態の間に加えた変更を全て簡単にトラックすることができます。
そして、"Pressed" を"States"ウィンドウで選択し、 押下時での外観を編集します。"base" から2つ変更を行います。1つ目が "shine"要素をVisibleに設定(MouseOver状態の様に)、2つ目がボタンコントロールのコンテンツを、陰影要素はそのままにして、少しオフセットします。 これにより、ボタンの"depressed"の状態での外観がよくなり、通常の外観とのコントラストがよくなります。:
デザイナで選択すれば、背景、コンテンツ、輝度要素にオフセット変更の実装、およびプロパティブラウザでオフセットレンダー変換を適用することができます。:
ブラウザでアプリケーションを再起動すると、ボタンは使用された時に対話的な外観の変更が確認できると思います。以下はボタンの"normal"での外観です。
ボタンにマウスオーバーすると、以下のように輝きます。:
ボタンをクリックすると押下され陰影がなくなります。(ボタンが離されると跳ね戻ります。)
ボタンのルックアンドフィールを変更するのにコードやXAMLを変更する必要はありません。新しいVisual State Manager機能が自動的に外観の状態遷移を処理します。
デフォルトで、Silverlightは状態遷移が起こった場合に(2つの状態間でスムーズな動画を提供しながら)自動的にストーリーボードを構築し起動します。これを発生するためにコードを書く必要はありません 。(注:必要に応じて、独自のストーリーボード遷移をドロップダウンして追加することも可能ですが、通常のケースではおそらく自動のストーリーボード遷移が利用できると思います。)
Silverlightの遷移機能と一緒に利用できる機能に、状態遷移での時間設定があります。外観状態の右にある矢印をクリックすると、時間設定をすることができます。
例えば、0.2秒を"Normal" から "MouseOver" への遷移に設定するには、以下のルールを追加します。
0.2秒でNormal->MouseOver 間を遷移する設定のルールを以下のように構成します。:
"MouseOver" 状態をクリックし、 MouseOver->Normalへの遷移が0.4秒になるようなルールを設定します。
アプリケーションを再起動してマウスオーバーすれば、動画遷移が先ほどよりゆっくりになっていると思います。これにより、アプリケーションにややスムーズで洗練された感じが出ます。
Silverlight 2と出荷される全てのコントロールは、上記の様なコントロール・テンプレートと Visual State Managerのカスタマイズがビルドインでサポートされる予定です。
新しいVisual State Manager およびコントロールテンプレート編集機能についての詳細は、 ここ、ここ、そのビデオ関係は、ここ、ここ、 ここなどをご参照ください。
TextBox
Beta2 では、ビルドインのTextBox編集コントロールにいくらか大きな改善点が加えられています。折り返し付きでの文字のスクロール、複数行の文字選択、ドキュメントナビゲーションキー、クリップボードからのコピーアンドペーストなどがあります。
またBeta2で西洋文字セット以外に対してもIMEのレベル3入力をサポートしています。
入力サポート
Beta2 では、フルスクリーン・モード時に新たにキーボードのキー(矢印、Tab、Enter、Home、Page Up、Page Dn、スペース)がサポートされています。注:フルキー入力サポートでは、偽造パスワードのケースを避けることはできません。
またBeta2 には新しいAPIが追加され、インク入力やスタイラスペン入力がサポートされています。
UI の自動化と利便性
Beta2で SilverlightにUI Automation Frameworkのサポートが追加されました。UI Automation Framework (UIA)は、スクリーンリーダやその他の補助ツールを使用してSilverlight2のアプリケーションを構成しているコンポーネントを確認し、処理を行います。
Beta2 は、UIA framework を使用し、UIAベースの動作を初期設定のSilverlightコントロール一式に追加します。Silverlight2の最終リリースで、全てのコントロールはUIAベースの動作をビルドインで設定される予定です。またハイコントラストのケースのサポートも追加される予定です。これらの機能で、508セクションに準拠した利便性のあるアプリケーションを構築することができます。このUIAサポートでアプリケーションの自動UIテストが可能になります。
動画と画像のシステム
Beta2 では独自の依存プロパティが動画化できるようになりました。また、オブジェクトの動画化(Structsの動画化)もサポートされるようになりました。Beta2では、コードでストーリーボードが作成できるようになっているので、追加しなくてもレンダーツリーの部品を動画化させることができます。(コードの中に動画全体を埋め込むことができます。)最終リリースでは、フレーム毎の動画コールバックもサポートされるようになります。
Beta2 では、新しく Visual Tree Helper スタティック クラスが追加されたことにより、さらに進化したビジュアルツリー検証APIが利用できます。機能として、子要素の列挙や参照要素の祖先・親要素を取得することができます。これらのAPIは引き渡した全てのUIElement で動作します。
DeepZoom
Beta2 はDeepZoomコレクションに対して、現在XMLベースのマニフェストファイルをサポートしています。またBeta2ではDeepZoom に対して、拡張性のあるMultiScaleTileSource も追加されています。(これにより、開発者は、Deep Zoomのパフォーマンスの高い描画に対するそのDeep Zoom形式と合致していない既存の画像ピラミッドを接続することができます。)
※Deep Zoomとは、複数の解像度を持つ画像を階層的に管理し,ユーザーの操作に応じてピンポイントで任意の解像度の画像を表示させることで,スムーズな操作を実現する機能。
WPF の互換性
Silverlight Beta2 では多数の修正や変更が行われており、SilverlightとWPF間のAPI互換性が改善されています。(注:最終のSilverlightリリースにはさらに互換性の改善が行われたものになります。)さらに、今夏.NET 3.5 SP1でSilverlightに導入した新しいAPIをWPFにも追加する予定です。
この作業により、今年の後半にWPFに追加予定のVMSサポートと共に、ブラウザとデスクトップアプリケーション間で再利用可能できれいなコードが可能になります。
メディアの改善
Silverlight 2 Beta2 には大きなメディア関係の機能が追加されています。:
Adaptive Streaming
Beta2 では"Adaptive streaming"がサポートされています。これはメディアを複数のビットレートでエンコードし、ネットワークやCPUの状況に応じてそれらをSilverlightアプリケーションが動的にスイッチできるようにするものです。
これにより、コンテンツのプロバイダーは低いビットレートおよび高いビットレートの両方のビデオが提供できるため、エンドユーザのマシンのハードとネットワークの性能に基づいて適切なものをSilverlightに選択させることで、
エンドユーザのメディア体験がよりリッチなものになります。
もしマシンまたはネットワークの状況がビデオ再生中に変化しても、Silverlightはバッファリングや中断などすることなく自動的に適切なビットレートに変換することができます。
SilverlightのAdaputive streamingサポートには拡張性があり、メディアのコンテンツの配信先や使用されているビットレートを制御する独自のロジックにプラグインすることができます。つまり、全てのCDNやメディア配信プロバイダーが簡単に独自のシステムにSilverlightを統合させることができ、超高品質なビデオの配信を行うことができるようになります。
コンテンツのプロテクション
Beta2 にはDRM(デジタル著作権管理)のコンテンツ・プロテクションが追加され、Windows DRMおよびPlayReady DRMがサポートされています。両者ともクロスブラウザ、クロスプラットフォームで動作します。
サーバサイドのプレーリスト
Beta2 にはサーバサイドのプレイリストがサポートされています。(前回までのリリースではクライアントサイドのプレイリストのみでした。)
ネットワークの改善
Silverlight 2 Beta2ではネットワークの部分で多数の改善点が追加されています。
クロスドメイン ソケット
Beta2 ではHTTPとソケットの両方を使用したクロスドメインネットワークが利用できます。(つまり、アプリケーションはそのアプリケーションがダウンロードされたところだけではなく、他のサイトを呼び出すことができるのです。)
Silverlight は、ターゲットのサーバ上にあるXML形式のポリシーファイルをチェックして、ネットワークアクセスがクロスドメインを許可しているかどうかを確認します。Sliverlightは弊社が開発した新しいXML形式のポリシーファイルもそうですが、同様にFlashのポリシーファイルもサポートしています。(つまり、Flash用の既存のサイトをSilverlightから追加作業なく呼び出すことが可能です。)
バックグラウンドでのスレッドネットワーキング
Beta2 は現在Silverlightアプリケーションでバックグラウンドのスレッドでネットワークへのリクエストの初期化や、ネットワークのリスポンスの処理を行うことができます。これにより、いろんな強力なケースが可能となり、HTTPおよびソケットのネットワークコミュニケーションが行われている間にブラウザのUIスレッドをブロックしなくてもよくなります。
二重通信(サーバープッシュ)
Beta2 では、サーバ上でWCFサービスと共に二重通信チャネルが設定できるようになりました。これにより、開発者がポーリングするために手動でサーバに変更を加えることなくSilverlightクライアントへサーバがメッセージを"プッシュ"することができるという、クリーンなプログラミングモデルが可能となります。このプログラミングモデルはいろんなケースで非常に役に立ちます。例えば、メッセンジャーやチャットアプリケーションや、株価やトレーダー用アプリケーションなどのモニタリングおよび更新系アプリケーションなど。
Web サービス
Beta2 ではSOAPベースのWebサービスとの相互運用が大きく改善されました。WebサービスプロキシクラスのエンドポイントURLは現在アプリケーションをリコンパイルしなくても構成することができます。Visual Studioに現在新しい"Silverlight対応 WCF サービス" プロジェクトのテンプレートも用意されており、クライアントにサービスを公開するためにASP.NETのWebプロジェクトに追加することができます。
REST および ADO.NET データ サービス
Silverlight ではRESTベースのWebサービスを利用できます。
Beta2 にはADO.NETデータサービス(以前までのコードネーム:"Astoria")の呼び出しと消費がサポートされています。ADO.NETデータサービスは.NET 3.5 SP1の一部として出荷される予定で、REST URIを使用する全てのクライアントが消費可能なASP.NETのWebプロジェクト内でデータのエンドポイントを簡単に公開できるようになります。Silverlight Beta2は現在ADO.NETデータサービスのクライアントをサポートしており、これらのサービスを簡単の呼び出すことができます。(また、オプションとして、Silverlight内でリモートのRESTクエリを表示させるのにLINQ文を使用することも可能です。)
JSON
Silverlight はJSONベースのサービスをWeb上で呼び出すことができます。
Beta2 には Silverlightアプリケーションで.NETオブジェクトに簡単にJSONの結果を検索、絞込み、マッピングできるLINQ to JSON が追加されています。これによりWeb上に公開されている既存のAJAXのエンドポイントやサービスの呼び出しや処理が簡単になります。
データの改善
Silverlight 2 Beta2 にはデータ分野に多数の更新が行われています。
DataGrid
Beta2 は DataGridコントロールに多数の新機能を追加しました。例えば、
- 列・行の自動サイズ調整
- 列のソート(単一・複数両方のソートをサポート)
- 列のユーザによる並び替え(ドラッグアンドドロップでの並び替えが可能)
- 列の凍結(特定の列が変更されないように固定)
- パフォーマンスとバグ修正
データバインディング
Beta2 にはコアなデータバインディング機能の追加と検証機能の改善が行われています。例えば、
- コントローラー上での事前バインディングの検証とBindingValidationErrorイベントハンドラのサポート(二方向バインディングの入力検証の処理が可能)
- 添付プロパティ上のバンディング文のサポート
- バインドする値のリッチな変換サポート(値変換に失敗した場合のサポートも含まれる)
隔離保存
Silverlight ではアプリケーションがクライアントでローカルにデータを保存することができます。("Isolated Storage(隔離保存)"と呼んでいる機能)アプリケーションはユーザにポップアップでこの保存領域サイズの確認をします。(例えば、ユーザがローカル保存の電子メールプログラム50MBを認可するなど。)
Beta2 がSilverlightアプリケーションに提供するデフォルトのローカル保存領域を1MBサイズへ増加しました。Beta2ではエンドユーザによる各サイトの保存許可の管理の改善や、アプリケーションのローカル保存を簡単に取り消しおよび削除できる機能も提供されています。これを管理する管理UIは現在エンドユーザがSilverlightアプリケーション上で右クリックし"Silverlight Configuration" というメニューオプションを選択すると表示されるようになっています。
Silverlight 1.0 とSilverlight 2 Beta 1の互換性に対する理解
Silverlight 2 Beta2 は、Silverlight 1.0を対象にしたアプリケーションとの互換性があります。
Silverlight 2 Beta2 はSilverlight 2 Beta1をターゲットにしたアプリケーションを起動できません。これは、Silverlight 2に追加された新機能のために、これら2つのベータ間でAPIが数多く変更されたためです。Silverlight 2 Beta1がインストールされたブラウザがSilverlight Beta2アプリケーションをホストしているサイトを表示しようとする場合、新しいベータの方のSilverlightにアップグレードするようにポップアップされると思います。これが行われると、Beta2をアンインストールしない限り、Beta1のアプリケーションは起動されなくなります。ですので、Web上でBeta1で構築されたサンプルを公開されている場合、すぐにBeta2に更新された方がいいと思います。
Beta1 と Beta2間の変更についてまとめたドキュメントを
ここ で公開しています。
また、Shawn WildermuthのSilverlight 2 Beta2で変更されたもの や、
Silverlight 2 プロジェクトをBeta2へアップグレードで、Beta1とBeta2間の変更についていくつか詳細がありますのでお読み頂く事をお勧めします。
まとめ
Silverlight 2 の詳細について、またBeta2リリースのダウンロードは、
http://www.silverlight.net および
http://expression.microsoft.comのサイトでご確認ください。これらのサイトでは、今後、記事、チュートリアル、ビデオなどを投稿していく予定です。また、こちらのブログでも個人的にいくつかチュートリアルを投稿していく予定です。
数ヶ月前Beta1が出荷された時に、
最初のSilverlight 2 や
最初のSilverlight 2でExpression Blendの使用 を投稿させて頂きましたが、もしまだお読みで無い場合はお読み頂く事をお勧めします。ここにはSilverlightのプログラミングモデルの概要やそれを行うためのVisual Studio 2008とExpression Blendを使用する方法などが書かれています。
Hope this helps,
Scott