トリガーの使用

ユーザー入力に基づいてインタラクションを作成するには、トリガーとアクションを使用します。

トリガーは条件を定義し、アクションはその条件が満たされたときにトリガーが行うことを定義します。例えば、ノードがノードツリーにアタッチされたときに Log ウィンドウにメッセージを表示するには、そのノードに On Attached トリガーを追加し、そのトリガーに Write Log アクションを追加します。

Kanzi Studio には、トリガーに追加できるさまざまなアクションがあります。たとえば、Log ウィンドウに出力するアクション (Write Log)、プロパティを特定の値に設定するアクション (Set Property)、Activity ノードをアクティブにするアクション (Activate Activity)、アプリケーションのテーマを変更するアクション (Activate Theme) を追加できます。

トリガーメッセージ

トリガーがアクションから発信されたメッセージを受け取ったときに、そのメッセージに対してトリガーが行う処理を設定できます。次のことが可能です:

  • メッセージをインターセプトし、それに対してアクションを実行し、プロジェクトツリーを上下に移動し続けさせます。

  • メッセージをインターセプトし、それに基づいて行動し、処理します。トリガーがメッセージを処理すると、そのメッセージは消費され、処理したトリガーでメッセージが停止し、他のノードがそれをインターセプトすることはできません。

トリガーを使用すると、メッセージが発生したノード、またはその祖先ノードや子孫ノードのいずれかのトリガーでメッセージをインターセプトできます。同じノードで多くの異なるメッセージタイプをインターセプトすることができます。メッセージがプロジェクトツリーを上に移動するとき、メッセージはバブルします。メッセージがプロジェクトツリーを下に移動するとき、メッセージはトンネルします。メッセージを作成するアクションで、メッセージがバブルするか、トンネルするか、またはバブルとトンネルの両方を行うかを設定できます。

例えば、アクションがバブリングメッセージを作成する場合、アクションがメッセージを生成した後、そのメッセージは入力を受け取ったノードからその親ノードへ、さらにその親の親へとバブリングし、トリガーがメッセージをインターセプトするまで続きます。トリガーがメッセージを処理する場合、メッセージはバブリング(プロジェクトツリーを上に移動)を停止します。もし祖先のどれもメッセージを処理しない場合、メッセージはプロジェクトのルートノードまで移動します。

デフォルトで、すべてのトリガーはそれぞれのメッセージを処理します。トリガーメッセージの処理を制御するには、トリガー内の Set Message Handled プロパティを設定します。

データトリガー

Data Trigger を使用して:

Data Trigger は、Data Trigger の条件式が満たされている限り、ノードに対する変更を適用し続けます。その Data Trigger の条件が満たされなくなると、Kanzi はその Data Trigger を使用して適用した変更を元に戻します。

条件は、True または False のいずれかに評価されるバインディング式の形式で Data Trigger に設定します。条件では、プロパティまたはデータソースのいずれかを入力として使用できます。

例えば、Activity Host 内で Data Trigger を使用して、Activities のロジックとアクティベーション状態を制御することができます。

Apply Activation Action と Apply Property Action アクションは、他のどのアクションよりも優先度が高いです。例えば、Apply Activation Action を使用して Active Index プロパティを設定し、同じプロパティに異なる値を設定する Set Property アクションを使用した場合、Set Property アクションの効果は、Kanzi が Apply Activation Action を解除した後にのみ表示されます。

はじめに

トリガーを始めるには、以下を参照してください:

Kanzi Studio で使用できるすべてのトリガーのリストについては、トリガーリファレンス を参照してください。

Kanzi Studio でトリガーに追加できるすべてのアクションのリストについては、アクションとメッセージのリファレンス を参照してください。

トリガーを追加する

トリガーを追加する最も一般的な場所は、トリガーを使用するノードですが、トリガーは任意のノードに追加することができます。

トリガーを追加するには:

  1. Node Tree で、トリガーを追加したいノードを作成または選択します。

    例えば、Button 2D ノードを作成します。Button 2D ノードを作成すると、すでに Button: Click トリガーが含まれています。

    ../../_images/button-2d.png
  2. Node Components で Triggers を右クリックし、インターセプトしたいメッセージのタイプをインターセプトするトリガーを選択します。トリガーリファレンス を参照してください。

    例えば、On Attached トリガーを追加します。On Attached トリガーは、Kanzi がノードをノードツリーにアタッチしたときに発動します。

    ../../_images/add-on-attached-trigger.png
  3. Node Components > Triggers Alt を押しながら右クリック で、前のステップで追加したトリガーを選択し、アクションを選択します。

    アクションとメッセージのリファレンス を参照してください。

    例えば、Write Log アクションを選択し、トリガーが発動されたときに Log ウィンドウに書き込みたいメッセージを Log Text に設定します。Write Log アクションは、ノードが入力を受け取ったことを確認したい場合に便利です。

    任意の数のアクションを追加できます。Kanzi は、最初のアクションから始めて順番にアクションを実行します。

    ../../_images/add-write-log-action.png ../../_images/log-message.png

    Kanzi がノードにアタッチされると、Log Text プロパティの値として入力したメッセージが Log ウィンドウに表示されます。

    Write Log アクションについて詳しく知るには、Write Log アクションを使用する を参照してください。

    Log ウィンドウを開くには、メインメニューで Window > Log を選択します。

    ../../_images/message-in-the-log-window.png
  4. (オプション) 特定の条件下でのみトリガーを発動させたい場合、条件を設定したいトリガーの Node Components > Triggers で、Conditions を右クリックし、Trigger Condition を選択します。トリガーに条件を追加する を参照してください。

    ../../_images/click-add-condition.png

トリガーメッセージの処理設定

トリガーがメッセージを処理すると、そのメッセージを消費し、メッセージはそれを処理するトリガーで停止し、他のノードがそれを傍受することはできません。Kanzi Studio でカスタムメッセージを作成する を参照してください。

トリガーメッセージの処理を設定するには、Node Components > Triggers で、メッセージ処理を設定したいトリガーにおいて、次のように設定します。

Set Message Handled プロパティ:

  • Set Message Handled プロパティを有効にすると、このトリガーがメッセージをインターセプトして処理します。メッセージはここで停止し、プロジェクトツリー内でバブリングもトンネリングも続行しません。

  • Set Message Handled プロパティを無効にすると、このトリガーはメッセージをインターセプトしますが、メッセージはプロジェクトツリー内でバブリングまたはトンネリングを続けます。

Routing Mode プロパティ:

  • Bubbling がバブリングメッセージのみをインターセプトするようにします。

  • Tunneling がトンネリングメッセージのみをインターセプトするようにします。

  • Tunneling and bubbling がトンネリングメッセージとバブリングメッセージをインターセプトします。

Message Source プロパティ:

  • 特定のターゲットアイテムからのメッセージをインターセプトするには、次のいずれかを行います。

    • ドロップダウンメニューからアイテムを選択してください。

    • <Relative> を選択し、アイテムへのパスを設定します。

      • ノード名を / で区切ってパスを構築します。

      • . を使用して、現在のアイテムにアクセスします。

      • .. を使用して、現在のアイテムの親アイテムにアクセスします。

      • 現在のノードのリソースディクショナリにあるエイリアスを使用してノードにアクセスするには、# を使用します。エイリアスの使用 を参照してください。

  • すべてのソースからのメッセージをインターセプトするには、<Any> を選択します。

../../_images/set-message-handled-property.png

トリガーに条件を追加する

トリガー条件を使用すると、トリガーが発動するために満たすべき条件を設定できます。たとえば、ユーザーが特定の Page ノードに移動したときにトリガーを発動する条件を定義したり、特定の Page ノードがアクティブなときにのみユーザーがスクロールビューをスクロールできるようにすることができます。

トリガー条件を作成するには、A セクションで定義した値を、B セクションで定義した値と、Operation プロパティで設定した演算子を使用して比較します。

../../_images/trigger-condition-editor-default.png

次の条件を作成してトリガーを発動させることができます:

プロパティからの値を使用して条件を作成する

プロパティが設定した条件で設定した値を取得したときにトリガーを発動するトリガー条件を定義できます。例えば、特定の Page ノードがアクティブなときにのみ、ユーザーが Scroll View ノードをスクロールできるようにする条件を作成できます。

プロパティの値を使用して条件を作成するには:

  1. Node Tree で、条件を追加したいトリガーを持つノードを選択または作成し、そのトリガー内の Node Components で Conditions を右クリックし、Trigger Condition を選択します。トリガーを追加する を参照してください。

    例えば、Scroll View 2D ノードを Scroll View: Scrolled トリガーで作成し、そのトリガー内で Conditions を右クリックし、Trigger Condition を選択します。Scroll View ノードを使用する を参照してください。

    ../../_images/create-scroll-view.png ../../_images/scrolled-trigger-add-trigger-condition.png
  2. 作成したトリガー条件で、トリガーが作動するために満たすべき条件を設定します。

    トリガー条件を作成するには、A セクションで定義した値を、B セクションで定義した値と、Operation プロパティで設定した演算子を使用して比較します。

    トリガー条件セットで:

    • A セクションで、条件に使用したいプロパティのタイプと値を定義します。プロパティから値を使用するには、次のように設定します:

      • Type of A から Property へ

      • 条件に使用したいプロパティを持つノードに Item します。

        たとえば、それを Page ノードに設定します。

      • 条件に使用したいプロパティタイプに Property します。

        例えば、Item プロパティで選択した Page ノードの Activation State プロパティに設定します。

        Activation State プロパティを使用して、Page または Page Host ノードがアクティブかどうかを確認します。

      ../../_images/value-a.png
    • Operation を、A セクションで定義した値と B セクションで定義する値を比較するために使用したい演算子に設定します。

      例えば、= に設定して、A セクションで定義した値が B セクションで定義した値と等しい場合にのみトリガーが作動する条件を作成します。

      ../../_images/operator.png
    • B セクションで、A セクションで定義した値と比較したい値を定義します。Type of B プロパティは、B の値がどこから来るかを定義します。Type of B プロパティを次のように設定します:

      • プロジェクト内の任意のノードの任意のプロパティからの値と比較するための Property

      • Message argument が Item プロパティの A セクションで設定したノードのトリガーからメッセージ引数の値を使用するようにします。

      • Fixed は、A セクションで設定したノードの同じプロパティを使用し、そのプロパティに値を設定したい場合に使用します。

      例えば、Type of B プロパティを Fixed に設定し、その後 Fixed Value プロパティを有効にします。

      Fixed Value プロパティのデータ型は、A セクションで設定したプロパティタイプに依存します。この例では、Page ノードのブール型プロパティタイプ Activation State です。

      ../../_images/value-b.png

    ここでは、ユーザーが Page ノード Media に移動したときに Scroll View: Scrolled トリガーを発動する条件を作成しました。

    ../../_images/trigger-condition-editor-settings.png

メッセージからの値を使用して条件を作成する

トリガー条件を定義して、選択したメッセージがその条件で設定した値を取得したときにトリガーを発動させることができます。これらのトリガーのメッセージから値を使用できます:

例えば、ユーザーが List Box ノード内の特定のアイテムを選択したときにトリガーを発動させることができます。

メッセージからの値を使用して条件を作成するには:

  1. Node Tree で、条件を追加したいトリガーを持つノードを選択または作成し、そのトリガー内の Node Components で Conditions を右クリックし、Trigger Condition を選択します。トリガーを追加する を参照してください。

    例えば、Grid List Box 2D ノードを List Box: Item Selected トリガーで作成し、Node Components の List Box: Item Selected トリガーで右クリックして Conditions を選択し、Trigger Condition を選択します。Grid List Box ノードを使用する を参照してください。

    ../../_images/grid-list-box-2d.png ../../_images/list-box-item-selected-add-trigger-condition.png
  2. 作成したトリガー条件で、トリガーが作動するために満たすべき条件を設定します。

    トリガー条件を作成するには、A セクションで定義した値を、B セクションで定義した値と、Operation プロパティで設定した演算子を使用して比較します。

    トリガー条件セットで:

    • A セクションで、条件に使用したいメッセージ引数を設定します。メッセージ引数から値を使用するには、次のように設定します:

      • Type of A から Message argument へ

      • 条件に使用したいメッセージ引数に Message Argument を設定します。

        例えば、List Box: Item Selected トリガーを作成した場合、Message Argument を Selection に設定します。

      ../../_images/value-a-list-box.png
    • Operation を、A セクションで定義した値と B セクションで定義する値を比較するために使用したい演算子に設定します。

      例えば、= に設定して、A セクションで定義した値が B セクションで定義した値と等しい場合にのみトリガーが作動する条件を作成します。

      ../../_images/operator.png
    • B セクションで、A セクションで定義した値と比較したい値を定義します。Type of B プロパティは、B の値がどこから来るかを定義します。Type of B プロパティを次のように設定します:

      • プロジェクト内の任意のノードの任意のプロパティからの値と比較するための Property

      • Message argument が Item プロパティの A セクションで設定したノードのトリガーからメッセージ引数の値を使用するようにします。

      • Fixed は、A セクションで設定したメッセージ引数を使用し、そのメッセージ引数に値を設定したい場合に使用します。

      例えば、Type of B プロパティを Fixed に設定し、その後 Fixed Value プロパティを 0 に設定します。

      Fixed Value プロパティのデータ型は、A セクションで設定したメッセージタイプに依存します。この例では、これは整数です。

      ../../_images/value-b-list-box.png

    この例では、ユーザーが Grid List Box 2D ノードの最初のアイテムを選択したときに List Box: Item Selected を起動する条件を作成しました。

    ../../_images/trigger-condition-editor-list-box.png

トリガーを削除する

トリガーを削除するには、Node Components > Triggers で次のいずれかを行います。

  • 削除したいトリガーを選択し、Delete を押します。

  • 削除したいトリガーを右クリックして、Delete を選択します。

    ../../_images/remove-toggle-button-trigger.png

APIでトリガーを使用する

詳細については、Trigger クラスを参照してください。

関連項目

トリガー (Triggers)

メッセージの使用

トリガーリファレンス

アクションとメッセージのリファレンス

ノードがステートに入るまたは離れるときに反応する

Scroll View ノードを使用する

Grid List Box ノードを使用する

ユーザー入力の処理