ここから本文です。

Silverlight 2 チュートリアル

Silverlight でビデオプレイヤーを制作する

このチュートリアルでは、主に Expression Blend 2 を使用し、Silverlight 2 によるビデオ プレイヤーを制作する手順をご紹介します。

操作の流れ

使用するツール

Microsoft Expression Blend 2

Microsoft Visual Studio 2008

ダウンロード

このチュートリアルで使用する素材およびソース コードは以下よりダウンロードいただけます。

blend_movieplayer_tutorial.zip (10.9 MB)

制作するビデオプレイヤーを確認する

このチュートリアルでは、Microsoft Arc Mouse のビデオを再生するビデオプレイヤーを制作します。再生ボタンで再生、一時停止を行い、停止ボタンで停止、そしてボリュームスライダーで音声ボリュームの調節ができます。

ビデオ プレイヤー画面

デザインパーツを準備する

デザイン画像から、ビデオプレイヤーで使用できるように画像パーツへ書き出します。

ビデオプレイヤーのフレーム

このビデオプレイヤーは、ブラウザウィンドウに合わせてリサイズを行わないため、ビデオプレイヤーのフレーム画像は 1 枚で構成します。



各種ボタン・スライダー画像パーツ

各種ボタン・スライダーのデザイン適用においては、「通常」「マウスオーバー」「マウスダウン」の 3 種類の画像を切り換えることで実現します。

全ての画像は背景を透過させるため、PNG32 ビット形式とします。

Silverlight 2 プロジェクトを作成する

ここからビデオプレイヤーの制作を進めていきます。最初にSilverlight 2 プロジェクトを作成します。

  1. Expression Blend 2 を起動します。
  2. [プロジェクト] タブの [新しいプロジェクト] を選択します。
    → [新しいプロジェクト] ダイアログボックスが表示されます。
  1. [Silverlight 2 アプリケーション]を選択し、名前ボックスを "SilverlightMoviePlayer" と入力します。
  1. [OK] ボタンをクリックします。
    → 新規プロジェクトが作成されます。

画面要素をレイアウトする

  1. Silverlight の縦横サイズを変更します。
    [オブジェクトとタイムライン] タブの [UserControl] を選択し、[プロパティ] タブで以下のように設定します。
プロパティ
Width
420
Height
370
  1. ビデオプレイヤーは固定サイズのため、レイアウトの行いやすい "Canvas" コントロールを使用してレイアウトしていきます。はじめに最上位のコントロールを [Grid] コントロールから [Canvas] コントロールに変更します。
    [オブジェクトとタイムライン] タブで [LayoutRoot] を選択し、右クリックし、[レイアウトの種類の変更] - [Canvas] をクリックします。
  1. ビデオの背景色を削除します。[オブジェクトとタイムライン] タブの [LayoutRoot] を選択したまま、[プロパティ] タブで以下のように設定します。
プロパティ
Fill
ブラシなし
  1. ビデオプレイヤーの背景を配置します。[LayoutRoot] が黄色い枠の付いたアクティブ状態となっていることを確認し、[四角形] ツールをダブルクリックしてステージに配置します。さらに、配置した四角形を選択した状態のまま、[プロパティ] タブで以下のように設定します。
プロパティ
Fill
単色ブラシ
#FF333333
Stroke
ブラシなし
Width
378
Height
284
Left
20
Top
20
  1. デザイン画像ファイルおよび再生するビデオファイル一式を Silverlight プロジェクトへ追加します。ダウンロードファイル内の [素材] フォルダ>[Image] と [Movie] フォルダをエクスプローラ上でコピーし、Expression Blend 2 画面の [プロジェクト] タブの [SilverlightMoviePlayer] 上で右クリック - [貼り付け] を選択して、Image フォルダと Movie フォルダをプロジェクトに追加します。
  1. 再生するビデオを配置します。[オブジェクトとタイムライン] タブで [LayoutRoot] が黄色い枠の付いたアクティブ状態となっていることを確認し、[プロジェクト] タブから [Movie] フォルダ - [ArcMouseMovie.wmv] をダブルクリックして、ビデオを配置します。さらに、配置したビデオを選択した状態のまま、[プロパティ] タブで以下のように設定します。
プロパティ
Width
374
Height
284
Left
22
Top
22
AutoPlay
チェックなし
Stretch
Uniform
  1. ビデオプレイヤーのフレーム部分を配置します。[オブジェクトとタイムライン] タブで [LayoutRoot] が黄色い枠の付いたアクティブ状態となっていることを確認し、[プロジェクト] タブから [Image] フォルダ - [Img_Player_Frame.png] をダブルクリックして配置します。
  1. ビデオプレイヤーの再生ボタンとなる ToggleButton コントロールを配置します。[オブジェクトとタイムライン] タブで [LayoutRoot] が黄色い枠の付いたアクティブ状態となっていることを確認し、ツールボックスの [アセットライブラリ] - [すべて表示] チェックボックスにチェックした状態で、[ToggleButton] をクリックします。
    アセットライブラリのボタンの上にToggleButtonが表示されますので、ダブルクリックして配置します。さらに、配置した ToggleButton を選択した状態のまま、[プロパティ] タブで以下のように設定します。
プロパティ
名前
PlayToggleButton
Width
127
Height
124
Left
148
Top
245
  1. 停止ボタンとなる Button コントロールを配置します。[オブジェクトとタイムライン] タブで [LayoutRoot] が黄色い枠の付いたアクティブ状態となっていることを確認し、[Button] ツールをダブルクリックしてステージに配置します。さらに、配置した Button コントロールを選択した状態のまま、[プロパティ] タブで以下のように設定します。
プロパティ
名前
StopButton
Width
32
Height
32
Left
120
Top
314
  1. ボリュームスライダーとなる Slider コントロールを配置します。
    ツールボックスから [Button] を長押しし、 [Slider] を選択します。
    ツールボックスで [LayoutRoot] が黄色い枠の付いたアクティブ状態となっていることを確認し、[Slider] ツールをダブルクリックしてステージに配置します。さらに、配置した Slider コントロールを選択した状態のまま、[プロパティ] タブで以下のように設定します。
プロパティ
名前
VolumeSlider
Width
118
Height
18
Left
283
Top
320
LargeChange
0.1
Maximum
1
Value
0.5

コントロールにデザインを適用する

Silverlight では、コントロールの機能はそのままにデザインのカスタマイズを行うことができます。これを「スタイル」もしくは「テンプレート」と呼びます。今回は「スタイル」を利用した方法を解説します。配置したそれぞれの ToggleButton、Button、Slider コントロールに対して、ビデオプレイヤーのデザインを適用していきます。

再生ボタンにデザインを適用する

  1. ステージ上の再生ボタン [PlayToggleButton] を右クリックし、[コントロールパーツ (テンプレート) の編集] - [コピーの編集] を選択します。
    → [Style リソースの作成] ダイアログボックスが表示されます。
  1. 名前 (キー) ボックスに "PlayToggleButtonStyle" を入力して [OK] ボタンをクリックします。
    → 再生ボタンのスタイル編集画面となります。
  1. 再生ボタンのデザインは 3 種類 (通常/マウスオーバー/マウスダウン) の画像で実現しますので、現在のボタンに配置されているオブジェクトは一旦削除します。[オブジェクトとタイムライン] タブで [ [Grid] ] 以下のオブジェクトを削除します。
  1. 空の Grid に対し、再生ボタンのデザイン 3 種 (通常/マウスオーバー/マウスダウン)の画像を配置します。[プロジェクト] タブ> [Image] フォルダ内の以下の画像を順番にダブルクリックして配置します。

Img_Button_Normal.png (通常状態画像)

プロパティ
名前
NormalImage

Img_Button_Down.png (マウスダウン状態画像)

プロパティ
名前
DownImage

Img_Button_Over.png (マウスオーバー状態画像)

プロパティ
名前
OverImage

Img_PauseButton_Mark.png (一時停止マーク画像)

プロパティ
名前
PauseMarkImage
HorizontalAlignment
Center
VerticalAlignment
Center

Img_PlayButton_Mark.png (再生マーク画像)

プロパティ
名前
PlayMarkImage
HorizontalAlignment
Center
VerticalAlignment
Center
  1. 現状では、全ての状態の画像が表示されています。通常/マウスオーバー/マウスダウンのそれぞれの状態で画像が切り替わるように [ステート] パネルで設定します。
    [ステート] パネル- [Normal] を選択し、赤い丸と [ステート 記録オン] と表示されていることを確認します。ここで行った変更が、状態変化時の動きとなります。
  1. [ステート] パネル - [Normal] が選択された状態で、それぞれのオブジェクトの透明度 ([Opacity] プロパティ) の変更を行います。
オブジェクトの名前
透明度
NormalImage
100%
DownImage
0%
OverImage
0%

[オブジェクトとタイムライン] パネルにおいて赤いマークがついたものが、状態として記録されています。この場合の NormalImage のように、規定値の透明度 100% を記録させる場合は、一度 99% などの違う値に変更し、赤いマークが付いたことを確認してから、100% としてください。

  1. 上記ステップと同様の方法で、その他の状態を定義していきます。各状態と、透明度を変化させるオブジェクトの対応は以下のようになります。

[MouseOver] 状態

オブジェクトの名前
透明度
NormalImage
0%
DownImage
0%
OverImage
100%

[Pressed] 状態

オブジェクトの名前
透明度
NormalImage
0%
DownImage
100%
OverImage
0%

[Checked] 状態

オブジェクトの名前
透明度
PauseMarkImage
100%
PlayMarkImage
0%

[Unchecked] 状態

オブジェクトの名前
透明度
PauseMarkImage
0%
PlayMarkImage
100%
  1. 状態間の変化の時間を0秒以上に設定することで、滑らかに変化させることができます。
    [CommonStates] および [CheckStates] の右側の値を 0.1 に変更します。
  1. 以上で再生ボタンの設定は終了です。ステージ上部の [PlayToggleButton] をクリックすることで再生ボタンの編集モードを解除します。

再度編集する場合は、再生ボタンを右クリックし、[コントロールパーツ(テンプレート)の編集] - [テンプレートの編集] を選択します。

停止ボタンにデザインを適用する

次に停止ボタンのデザインを適用します。基本的な操作は再生ボタンと同様です。作成 Style リソース名は "StopButtonStyle" です。

  1. 使用する画像以下の 3 ファイルです。以下の順序で配置し、名前を設定します。

Img_StopButton_Normal.png (通常状態画像)

プロパティ
名前
NormalImage

Img_StopButton_Down.png (マウスダウン状態画像)

プロパティ
名前
DownImage

Img_StopButton_Over.png (マウスオーバー状態画像)

プロパティ
名前
OverImage
  1. 状態ごとの各オブジェクトの透明度を設定します。停止ボタンで設定するのは以下の 3 つの状態です。

[Normal] 状態

オブジェクトの名前
透明度
NormalImage
100%
DownImage
0%
OverImage
0%

[MouseOver] 状態

オブジェクトの名前
透明度
NormalImage
0%
DownImage
0%
OverImage
100%

[Pressed] 状態

オブジェクトの名前
透明度
NormalImage
0%
DownImage
100%
OverImage
0%

ボリュームスライダーにデザインを適用する

ボリュームスライダーのデザインを適用します。Slider コントロールは、これまでのボタン類よりも構造が複雑になっており、つまみ部分がThumbコントロールで構成されています。そのため、Slider コントロールのスタイルを作成し、さらに Thumb コントロールのスタイルを作成するという 2 段階の手順が必要となります。

  1. 再生ボタンと同様の手順で Slider コントロールに対して Style リソースを作成します。Style リソース名は "VolumeSliderStyle" とします。
  1. スタイル編集状態で [オブジェクトとタイムライン] パネルを確認すると、[HorizontalTemplate] と [VerticalTemplate] が確認できます。これは Slider コントロールの水平状態と垂直状態それぞれのデザインが定義されています。今回は水平状態を使用するため、 [HorizontalTemplate] に対して変更を加えます。
  1. [HorizontalTemplate] が黄色い枠の付いたアクティブ状態となっていることを確認し、[プロジェクト] タブから [Image] フォルダ - [Img_VolumeSlider_Bar.png] をダブルクリックして配置します。さらに、配置した Image を選択した状態のまま、[プロパティ] タブで以下のように設定します。
プロパティ
VerticalAlignment
Center
Margin
左: 5
右: 5
上: 0
下: 0
  1. オブジェクトとタイムライン] パネルにおいて上で配置した画像をドラッグして [TrackRectangle] の下まで移動します。そして、 [TrackRectangle] は削除します。
  1. ステージ上でつまみ部分の Thumb コントロール (名前: HorizontalThumb) を選択し、デザイン適用後のサイズと合うよう [プロパティ] タブで以下のように設定します。
プロパティ
Width
16
Height
16
  1. つまみ部分の Thumb コントロールに対し、再生ボタンなどと同様に Style リソースを作成します。Style リソース名は "VolumeThumbStyle" とします。
  1. Thumb コントロールのデザイン適用は停止ボタンと同様です。使用する画像以下の 3 ファイルです。以下の順序で配置し、名前を設定します。

Img_VolumeThumb_Normal.png (通常状態画像)

プロパティ
名前
NormalImage

Img_VolumeThumb_Down.png (マウスダウン状態画像)

プロパティ
名前
DownImage

Img_VolumeThumb_Over.png (マウスオーバー状態画像)

プロパティ
名前
OverImage
  1. 状態ごとの各オブジェクトの透明度を設定します。停止ボタンで設定するのは以下の 3 つの状態です。

[Normal] 状態

オブジェクトの名前
透明度
NormalImage
100%
DownImage
0%
OverImage
0%

[MouseOver] 状態

オブジェクトの名前
透明度
NormalImage
0%
DownImage
0%
OverImage
100%

[Pressed] 状態

オブジェクトの名前
透明度
NormalImage
0%
DownImage
100%
OverImage
0%

ビデオを制御する C# コードを記述する

最後に再生ボタン、停止ボタン、ボリュームスライダーが動作するよう C# コードを記述します。

  1. 再生ボタン (名前: PlayToggleButton) に Checked イベントを定義します。[オブジェクトとタイムライン] タブで [PlayToggleButton] を選択し、[プロパティ] タブ - [イベント] ボタンをクリックして、イベント表示状態にします。
    (もとのプロパティ表示状態にするには、その左側の [プロパティ] ボタンをクリックします。)
  1. [プロパティ] タブ (イベント表示状態) の [Checked] の右側の空欄をダブルクリックします。
    → Visual Studio 2008 がインストールされている環境では、Visual Studio 2008 が起動し、Page.xaml.cs ファイルの編集画面となります。
    Visual Studio 2008 の環境をお持ちでない場合は、ダイアログが表示されますので、[OK] ボタンをクリックします。ダイアログに従い、Page.xaml.cs をメモ帳などで開き、ペーストしてください。
  1. Page.xaml.cs にて、PlayToggleButton_Checked メソッドに、以下の 1 行を追記します。(青太字)
public partial class Page : UserControl
{
        public Page()
        {
                // 変数を初期化するときに必要となります
                InitializeComponent();
    }


        private void PlayToggleButton_Checked(object sender, System.Windows.RoutedEventArgs e)
        {
                this.ArcMouseMovie_wmv.Play();
        }
}
  1. 同様の方法で、以下の箇所にイベントを定義します。全てのイベントと C# コードを記述すると以下のようになります。(青太字)
public partial class Page : UserControl
{
        public Page()
        {
                // 変数を初期化するときに必要となります
                InitializeComponent();
    }

        private void PlayToggleButton_Checked(object sender, System.Windows.RoutedEventArgs e)
再生ボタン (名前: PlayToggleButton) Uncheckedイベント        {
                this.ArcMouseMovie_wmv.Play();
        }

        private void PlayToggleButton_Unchecked(object sender, System.Windows.RoutedEventArgs e)
停止ボタン (名前: StopButton) Click イベント        {"
                this.ArcMouseMovie_wmv.Pause();
        }

        private void StopButton_Click(object sender, System.Windows.RoutedEventArgs e)
ボリュームスライダー (名前: VolumeSlider) ValueChanged イベント        {"
                this.ArcMouseMovie_wmv.Stop();
                this.PlayToggleButton.IsChecked = false;
        }

        private void VolumeSlider_ValueChanged(object sender, System.Windows.
                RoutedPropertyChangedEventArgs<double> e)
        {
                 if (this.ArcMouseMovie_wmv != null)
                {
                        this.ArcMouseMovie_wmv.Volume = this.VolumeSlider.Value;
                }

        }
}

動作を確認する

  1. Page.xaml.cs を保存し、Expression Blend 2 画面から実行します。[プロジェクト] メニュー - [ソリューションのテスト] をクリックします。
    → Web ブラウザが開き、ビデオプレイヤーが表示されます。
このチュートリアルは、株式会社セカンドファクトリーさまに作成いただきました。
セカンドファクトリーさまでは、UX コンサルティングや UX トレーニングを展開されていますので、あわせてご覧下さい。
セカンドファクトリー様ホームページ
サイト共通フッターです。