ストーリーボードの実行タイミングの制御
ストーリーボードを Microsoft Expression Blend アプリケーションで実行するタイミングを次の方法で制御できます。
ボタン クリックなどのイベントの発生時、またはストーリーボードがコントロール テンプレート内にある場合はプロパティの変更時にストーリーボードを実行するトリガを作成する。
メモ : トリガは、Microsoft Silverlight 1.0 または Silverlight 2 プロジェクトでは使用できません。
ストーリーボードの Begin メソッドを呼び出すコードビハインド ファイル内にイベント ハンドラ メソッドを作成する。
これらのメソッドを使用して、ストーリーボードを停止、一時停止、再開、削除するタイミングやストーリーボードの末尾にスキップするタイミングを制御することもできます。
これらのメソッドは、作業しているスコープによって若干異なります。
メモ : |
---|
次の手順はビジュアル アニメーションが含まれているストーリーボードの場合を示していますが、この手順をオーディオまたはビデオのストーリーボードにも適用できます。詳細については、「作業中のドキュメントへのイメージ、オーディオ、またはビデオ ファイルの挿入」を参照してください。 |
ドキュメントのメイン スコープ内のストーリーボード
ストーリーボードがドキュメントのメイン機能である場合は、ドキュメントのメイン スコープ内にストーリーボードを作成します。このストーリーボードは、ドキュメントのメイン スコープ内のコントロールを操作しているユーザーによってトリガされます。Expression Blend でメイン ドキュメントのスコープ内にストーリーボードを作成すると、アプリケーション ウィンドウの読み込み時にストーリーボードを実行する新しいトリガが自動的に作成されます。トリガは、[組み合わせ] パネルの [トリガ] に表示されます。
ストーリーボードの作成時に Expression Blend で設定される既定のトリガ
このトリガをそのままにした場合、ストーリーボードはアプリケーションの起動時にすぐに実行されます。または、この動作を変更する場合は、次の手順に従います。
イベント トリガを使用して、ドキュメントのメイン スコープ内でストーリーボードを制御するには
ストーリーボードの作成時に Window.Loaded イベントの既定のトリガが作成された場合に、アプリケーションの起動時にストーリーボードが実行されないようにするには、[トリガ] で Window.Loaded を選択します。それ以外の場合は、[イベント トリガの追加] ボタンをクリックして、新しい既定のイベント トリガを作成します。
[オブジェクトとタイムライン] で、操作されたときにストーリーボードを実行するオブジェクトを選択します。たとえば、ユーザーがマウス ポインタをテキスト ブロックに合わせたときにストーリーボードを実行する場合は、テキスト ブロックを選択します。
[トリガ] ウィンドウの下半分にあるドロップダウン メニューで、アニメーションをトリガするイベント (Window.Loaded) を変更します。たとえば、[Window.Loaded の発生時] を [textblock.MouseEnter の発生時] に変更します。
イベントがトリガされたときに発生するアクションを定義します。アクションが表示されない場合は [新しいアクションの追加] ボタンをクリックします。アクションが目的のストーリーボード名 (たとえば、Storyboard1) に設定されていること、および呼び出すメソッドが Begin であることを確認します。または、ストーリーボードで有効な任意のメソッドを選択することもできます。詳細については、「トリガの追加と削除」を参照してください。
イベント ハンドラ メソッドを使用して、ドキュメントのメイン スコープ内でストーリーボードを制御するには
ストーリーボードの作成時に Window.Loaded イベントの既定のトリガが作成された場合に、アプリケーションの起動時にストーリーボードが実行されないようにするには、[トリガ] で Window.Loaded を選択し、次のいずれかの操作を行います。
[トリガ] ウィンドウの下半分に複数のアクションが表示されている場合は、目的のストーリーボードを制御するアクション (たとえば、Storyboard1.Begin) を選択し、横にある [このアクションの削除] ボタンをクリックします。
ストーリーボードを制御するアクションのみが表示された場合は、[トリガの削除] ボタンをクリックしてトリガ全体を削除することができます。
[オブジェクトとタイムライン] で、操作されたときにストーリーボードを実行するオブジェクトを選択します。たとえば、ユーザーがマウス ポインタをテキスト ブロックに合わせたときにストーリーボードを実行する場合は、テキスト ブロックを選択します。
[プロパティ] パネルの [イベント] ボタンをクリックします。選択した要素で使用できるすべてのイベントがアルファベット順で一覧表示されます。
ヒント : マウス ポインタをイベント名の上に置くと、そのイベントの短い説明が表示されます。ツールヒントは、イベントの説明を表示します。使用可能なイベントとその説明の一覧については、「WPF イベント クイック リファレンス」を参照してください。
プログラミング ロジックの追加先のイベント (たとえば、MouseEnter イベント) を探します。
空のイベント ハンドラ メソッドを生成する方法は 2 つあります。
イベント名の横にあるテキスト ブロック内をダブルクリックします。Expression Blend によってイベント ハンドラ メソッド用に既定の名前が生成され、テキスト ブロックに入力されます。空のメソッドのコードも生成されます。
イベント名の横にあるテキスト ブロックに名前を入力し、Enter キーを押すか、テキスト ブロックの外部をクリックしてテキスト ブロックからフォーカスを外します。イベント メソッド名は文字で始める必要があります。指定したメソッド名がコードビハインド ファイル内で使用されていない場合は、Expression Blend によって空のメソッドのコードが生成され、その名前が使用されます。
メモ : Expression Blend を構成することにより、Microsoft Visual Studio 2008 がインストールされている場合でもクリップボードを使用できます。[ツール] メニューの [オプション] をクリックし、[イベント ハンドラ] をクリックします。[使用したエディタ] で [クリップボードのみ] をクリックします。
この時点で、Expression Blend によって次の 2 つの操作のいずれかが行われます。
Visual Studio 2008 Standard Edition 以降がインストールされている場合は、Expression Blend プロジェクトが Visual Studio 2008 で開き、コードビハインド ファイルが自動的に開いて、このファイルに空のイベント ハンドラ メソッドが貼り付けられます。
メモ : Visual Studio 2008 と Visual Studio 2005 の両方がインストールされている場合、Visual Studio のバージョン選択ツールで Visual Studio 2008 ではなく、Visual Studio 2005 を開こうとすると、エラーが発生することがあります。これは、Expression Blend で作成された Visual Studio 2008 プロジェクトを Visual Studio 2005 で開くことができないためです。この場合、プロジェクトを Visual Studio 2008 で開いてから、Expression Blend の [プロパティ] パネルでイベント ハンドラを作成します。
Visual Studio 2008 Standard Edition 以降がインストールされていない場合は、Expression Blend によって空のイベント ハンドラ メソッドがクリップボードにコピーされ、次に実行できる操作を説明するポップアップ ウィンドウが表示されます。この場合、別のテキスト エディタでコードビハインド ファイルを手動で開いて、次に示すように、ウィンドウのクラス定義内にメソッドを貼り付けることができます。
private void TextBlock_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) { }
Private Sub textBlock_MouseEnter(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseEventArgs) End Sub
メモ : .cs または .vb のファイル拡張子にアプリケーション (メモ帳など) を関連付けている場合は、[プロジェクト] パネルの [ファイル] でファイル名をダブルクリックして、コードビハインド ファイルを手動で開くことができます。この場合は、Expression Blend 内から該当アプリケーションを起動してファイルを表示できます。
.cs または .vb のファイル拡張子にアプリケーションを関連付けていない場合、Expression Blend から直接外部ファイルを開くことはできません。ファイルを開くには、Windows エクスプローラで該当ファイルを見つけ (Expression Blend でプロジェクトを保存した場合は、[プロジェクト] メニューの [プロジェクトの探索] をクリックし)、変更する .cs ファイルまたは .vb ファイルを右クリックして [プログラムから開く] を選択し、[メモ帳] (または他の編集アプリケーション) を選択します。その後、Expression Blend の [プロジェクト] パネルからコードビハインド ファイルを手動で開けるようになります。
コードビハインド ファイルを開き、イベント ハンドラ メソッドを貼り付けたら、次のコードのうち太字の行をイベント ハンドラ メソッドに追加します。
private void TextBlock_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) { Storyboard myStoryboard; myStoryboard = (Storyboard)this.Resources["Storyboard1"]; myStoryboard.Begin(this); }
Private Sub textBlock_MouseEnter(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseEventArgs) Dim myStoryboard As New Storyboard myStoryboard = CType(Me.Resources("Storyboard1"), Storyboard) myStoryboard.Begin(Me) End Sub
すべてのファイルを保存し、F5 キーを押してアプリケーションをビルドおよびテストします。たとえば、実行中のアプリケーションでテキスト ブロックの上にマウス ポインタを移動して、アニメーションが開始するかどうかを確認します。
メモ : テキスト ブロック上に再度マウス ポインタを移動してもアニメーションが開始点を返さない場合、0 秒のマークでキーフレームを設定していないことが原因である可能性があります。
コントロール テンプレートおよびスタイル内のストーリーボード
コントロール テンプレートの変更時にプロパティ トリガまたはイベント トリガにアクションを追加する場合などに、Microsoft Expression Blend でストーリーボードが自動作成される場合があります。スタイルとテンプレートの使用方法の詳細については、「スタイルとテンプレート」を参照してください。
テンプレートのスコープ内のストーリーボードを制御するには
次のいずれかの方法で、変更するスタイルまたはテンプレートを開きます。
メモ : スタイルまたはテンプレートを使用するかどうかの判断方法については、「スタイルとテンプレートの概要」を参照してください。
メモ : パス オブジェクトなどのオブジェクトは、テンプレートをサポートしていません。Button や RadioButton などのコントロールはテンプレートをサポートしています。
新しいテンプレートを作成するには、アートボード上または [オブジェクトとタイムライン] でオブジェクトを選択し、[オブジェクト] メニューの [コントロール パーツ (テンプレート) の編集] をクリックし、[コピーの編集] を選択します。[スタイル リソースの作成] ダイアログ ボックスが表示されます。リソースを定義する場所を選択し、[OK] をクリックします。詳細については、「スタイル リソースの作成」を参照してください。
新しいスタイルを作成するには、アートボード上または [オブジェクトとタイムライン] でオブジェクトを選択し、[オブジェクト] メニューの [スタイルの編集] をクリックし、[コピーの編集] を選択します。[スタイル リソースの作成] ダイアログ ボックスが表示されます。リソースを定義する場所を選択し、[OK] をクリックします。詳細については、「スタイル リソースの作成」を参照してください。
既存のテンプレートを開くには、[リソース] パネルでスタイルの横にある [リソースの編集] ボタンをクリックし、[オブジェクトとタイムライン] に表示される Style 要素を右クリックします。次に、[コントロール パーツ (テンプレート) の編集] をクリックし、[テンプレートの編集] を選択します。または、カスタム スタイルを適用済みのコントロールを選択し、[オブジェクト] メニューの [コントロール パーツ (テンプレート) の編集] をクリックして、[テンプレートの編集] を選択します。
既存のスタイルを開くには、[リソース] パネルでスタイルの横にある [リソースの編集] ボタンをクリックします。または、カスタム スタイルを適用済みのコントロールを選択し、[オブジェクト] メニューの [スタイルの編集] をクリックして、[スタイルの編集] を選択します。
Expression Blend に付属の簡易スタイルを変更するには、ツールボックスから [アセット ライブラリ] を開き、[コントロール] タブの [簡易スタイル] リソース ディクショナリをクリックします。次に、あらかじめスタイルが設定されたコントロールを選択し、そのコントロールをアートボード上で描画して、Simple Styles.xaml リソース ディクショナリを [リソース] パネルで使用できるようにしてから、前述のいずれかのオプションを使用して簡易スタイルまたはテンプレートを開きます。現在のプロジェクトで Simple Styles.xaml リソース ディクショナリを変更しても、現在のプロジェクトから別のプロジェクトに Simple Styles.xaml ファイルをコピーしない限り、別のプロジェクトの Simple Styles.xaml リソース ディクショナリには影響しません。
スタイルまたはテンプレートの編集スコープ内では、アートボード上部の新しい Expression Blend 2 階層リンク バーを確認します。
テンプレート編集モード選択時の階層リンク バー
階層リンク バーのボタンをクリックすることで、選択済みのオブジェクトに対するテンプレート編集モード、スタイル編集モード、およびオブジェクト編集スコープを簡単に切り替えることができます。階層リンク バーは、選択したオブジェクトにカスタム スタイルまたはテンプレートが適用されている場合に表示されます。
[オブジェクトとタイムライン] で、[新規作成] ボタンをクリックします。
[ストーリーボード リソースの作成] ダイアログ ボックスが表示されます。
名前を入力して [OK] をクリックします。[ストーリーボード リソースの作成] ダイアログ ボックスが閉じて、Expression Blend はタイムライン記録モードに入ります。
編集中のスタイルまたはテンプレート内のオブジェクトのみに適用されるアニメーションを作成します。
メモ : 変更中のテンプレートまたはスタイルの外部にあるオブジェクトをアニメーション化することはできませんただし、スタイルまたはテンプレート内の既存のオブジェクトはアニメーション化できます。また、テンプレートを変更するときに、テンプレート ノード内の項目をグリッドなどのレイアウト パネルにグループ化し、そのレイアウト パネルにオブジェクトを追加してアニメーション化することもできます。
次のいずれかの方法で、新しいストーリーボードをトリガします。
ストーリーボードを既存のプロパティ トリガに追加するには、[組み合わせ] パネルの [トリガ] でトリガを選択し、ストーリーボードをトリガがアクティブ化したときと非アクティブ化したときのいずれで実行するかに応じて、[トリガ] ウィンドウの下半分にある [アクティブ化する際のアクション] または [非アクティブ化する際のアクション] の横の [新しいアクションの追加] ボタンをクリックします。トリガがアクティブになったときに発生するアクションとして、新しいストーリーボードが自動的に追加されます。
ストーリーボードを新しいプロパティ トリガに追加するには、[プロパティ トリガの追加] ボタンをクリックし、[トリガ] ウィンドウの下半分で、既定の target-element.IsCancel = False を目的のプロパティと値 (たとえば、target-element.IsPressed = True) に変更して、[新しいアクションの追加] ボタンをクリックします。イベントが発生したときに発生するアクションとして、新しいストーリーボードが自動的に追加されます。
ストーリーボードを新しいイベント トリガに追加するには、[イベント トリガの追加] ボタンをクリックし、[トリガ] ウィンドウの下半分で、既定の [target-element.Loaded の発生時] を目的のイベント (たとえば、[target-element.Click の発生時]) に変更して、[新しいアクションの追加] ボタンをクリックします。イベントが発生したときに発生するアクションとして、新しいストーリーボードが自動的に追加されます。
重要 : テンプレートの一般的な変更を行う前に、常に [既定] トリガを選択してトリガ記録モードをオフにしてください。そうしないと、誤って既存のトリガを変更する可能性があります。
注意 : スタイルおよびテンプレートの変更時には、スタイルまたはテンプレートの適用先のシステム コントロールの機能を損なう可能性があります。注意事項の一覧については、「スタイルとテンプレートの概要」の「ベスト プラクティス」を参照してください。
すべてのファイルを保存し、F5 キーを押してアプリケーションをビルドおよびテストします。
テンプレートの具体的な変更例については、「試してみよう : ボタンへのアニメーションの追加」を参照してください。
ユーザー コントロール内のストーリーボード
ストーリーボードをユーザー コントロール内に配置することにより、オブジェクトおよびストーリーボードをカプセル化して、1 つの XAML ドキュメントおよびコードビハインド ファイル内でこれらのオブジェクトをアニメーション化することができます。ユーザー コントロールを他のドキュメント内で複数回インスタンス化できます。
ユーザー コントロール内のストーリーボードを制御するには
次のいずれかの方法で、編集するユーザー コントロールを作成して開きます。
[ファイル] メニューで [新しいアイテム] を選択します。[新しいアイテム] ダイアログ ボックスで [UserControl] を選択し、[名前] を設定して、[OK] をクリックします。
アニメーション ストーリーボードを作成し、ユーザー コントロール内のオブジェクトの一部をアニメーション化します。
「Storyboards in the main scope of your document」に記載されているタスクのいずれかで、イベント トリガまたはイベント ハンドラ メソッドを使用してアニメーションを制御できます。
メモ : [コントロールの作成] コマンドでオブジェクトをユーザー コントロールに変換する前にオブジェクトのイベント トリガをオブジェクトに作成した場合、ユーザー コントロールのスコープ内でイベント トリガを再作成する必要があります。これは、メイン ドキュメントのスコープ内とユーザー コントロールのスコープ内とで使用可能なイベントが異なるためです。たとえば、[UserControl.MouseDown の発生時] などのイベントは、Storyboard1.Begin などのアクションで構成できます。[コントロールの作成] コマンドを使用すると、リソースおよびアニメーションは新しいコントロールにリファクタリングされるため、再作成の必要はありません。
メモ : [コントロールの作成] コマンドでオブジェクトをユーザー コントロールに変換する前にオブジェクトのイベント ハンドラ メソッドを作成した場合、メイン ドキュメントのコードビハインド ファイル内のイベント ハンドラ メソッド コードはユーザー コントロールのコードビハインド ファイルに移動されません。これは、同じイベント ハンドラ メソッドが他のオブジェクトで使用されている可能性があるためです。イベント ハンドラ メソッドをユーザー コントロールのコードビハインド ファイルにコピーして貼り付けることができます。
Silverlight 1.0 アプリケーション内のストーリーボード
Silverlight 1.0 アプリケーション内のストーリーボードはリソースであり、Windows Presentation Foundation アプリケーションのようにキーで識別するのではなく、Silverlight 1.0 のすべてのリソースと同様に名前で識別されます。
Silverlight 1.0 アプリケーションでストーリーボードを制御するには
- 「Silverlight アプリケーションのストーリーボードを制御するボタンの作成」を参照してください。
Silverlight 2 アプリケーション内のストーリーボード
Silverlight 2 アプリケーション内のストーリーボードは、イベント ハンドラまたは状態を使用して制御できます。
Silverlight 2 アプリケーションでストーリーボードを制御するには
イベント ハンドラ メソッドで、次のコードを使用します。
private void TextBlock_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) { Storyboard myStoryboard; myStoryboard = (Storyboard)this.Resources["Storyboard1"]; myStoryboard.Begin(); }
状態で、状態の変化後に再生するアニメーションを追加します (「状態の変更後に再生されるアニメーションの追加」を参照)。