Silverlight 3 Betaと同時にExpression Blend 3 Previewが公開されていますが、便利な新機能が搭載されています。
ここでは、Behaviorについて紹介したいと思います。
Blend 1/Blend 2を使ってSilverlight のアプリケーションを開発されたことがある人は、いつも次のような疑問を感じていたと思います。
「何かをクリックしたタイミングでタイムラインのアニメーションを簡単に呼び出す方法はないのだろうか」
「よく使うオブジェクトの操作をコードを書かないで実行できないのだろうか」
Blend 3からは、これらの疑問を解決する「Behavior」機能が搭載されています。
この記事では、いくつかを使って、Silverlight 3でのメディア再生をコーディングを行わないで実現してみたいと思います。
GridをMediaElement側とButton側で分けて、上側にMediaElement (myME)、下側にButtonを3つ (playButton, pauseButton, stopButton)を配置します。
※ ここでは省略しますが、MediaElementに対しては何らかのSourceプロパティを割り当て、AutoPlayプロパティをFalseに指定してください。[Add Existing Item]でプロジェクトにメディアファイル追加する場合、現時点のビルドだと自動的にWeb Site側のプロジェクトにコピーされずテスト時エラーとなることが分かっています。
今までの開発ですと、それぞれのボタンのイベントハンドラをC#やVisual Basicで記述する必要がありました。Blend 3は違います。
貼り付けた3つのボタンにBehaviorを使い、MediaElementのメソッドを呼び出すためのトリガーを記述します。
[Asset Library]を開き、[Behaviors]をクリックすると、次のような画面になります。
この画面から[CallMethodAction]をドラッグして、[Objects and Timeline]で一覧になっているplayButton、pauseButton、stopButtonへドロップします。 例: pauseButtonにドロップしている途中の画像
それぞれのButtonに対するCallMethodActionを指定します。
[playButton]に対して、[Miscellaneous]を展開し、 TargetName: myME MethodName: Play
と指定します。
[pauseButton]に対して、[Miscellaneous]を展開し、 TargetName: myME MethodName: Pause
[stopButton]に対して、[Miscellaneous]を展開し、 TargetName: myME MethodName: Stop
[F5]を押してテスト実行します。
※ メディアファイルを追加した場合は、エラーとなるので、いったんBlend 3に戻り、プロジェクトのメディアファイルをWeb siteプロジェクトのClientBinにコピーして、再度[F5]で実行してください。
実行結果:
続いて、Storyboardを定義して動かしてみましょう。Blend 3に戻り、[Objects and Timeline]の下にある[+]ボタンをクリックして、Storyboardを作ります。名前は「MyStory」としてください。
ここでは、Perspective 3Dを利用して、12秒かけて、myMEというMediaElementをx軸、y軸、z軸、それぞれ360度回転させてみます。
緑色の+をクリックして、0秒時点で、myMEに対してキーフレームを割り当てます。
タイムライン上、12秒後の位置に移動し、TransformのProjectionのX, Y, Zをそれぞれ360と設定します。
タイムラインを再生してみると、回転していることがわかります。
赤色の丸をクリックして、タイムラインの記録をオフにします。
[Asset Library]から[Behaviors]を選択肢、[ControlStoryboardAction] をplayButtonにドラッグ&ドロップします。
実行結果の例:
というわけで、Blend 3を利用すると、今までコーディングが必要だった処理がBehaviorを使って、コーディングレスで実現できます。
参考までに、XAMLの中身は次のような感じになります。
今後もBlend 3を使ったSilverlight 3アプリケーションのデザインと開発について、紹介していきたいと考えています。