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