使用触发器

触发器和动作可用于创建基于用户输入的交互。

触发器定义了一个条件,动作定义了当满足该条件时触发器执行的操作。例如,要在节点附加到节点树时向 Log 窗口打印一条消息,请将 On Attached 触发器添加到该节点,并将 Write Log 动作添加到该触发器。

Kanzi Studio 具有一系列可以添加到触发器的操作。例如,您可以添加一个操作以打印到 Log 窗口 (Write Log),将属性设置为某个值 (Set Property),导航到 Page 节点 (Navigate to Page),或更改应用程序主题 (Activate Theme)。

触发器消息

当触发器拦截根据动作生成的消息时,您可以设置触发器对该消息执行的动作。您可以:

  • 拦截消息,对其进行操作,并让它继续在工程树中向上或向下传递。

  • 拦截消息,对其进行处理。当触发器处理消息时,它会消耗该消息,使消息在处理它的触发器处停止,其他节点无法拦截它。

使用触发器,您可以在消息源节点或其任何祖先或后代节点的触发器中拦截消息。您可以在同一节点中拦截多种不同的消息类型。当消息向上穿过项目树时,消息会冒泡。当消息向下穿过项目树时,消息会隧道。您可以在创建消息的操作中设置消息是冒泡、隧道,还是同时冒泡和隧道。

例如,如果动作创建冒泡消息,在动作产生消息后,消息从接收输入的节点冒泡至其父节点,然后到父节点的父节点,以此类推,直到触发器拦截该消息。如果触发器也处理该消息,消息将停止冒泡(在项目树中向上传播)。如果没有任何祖先节点处理该消息,消息将一直传播到项目的根节点。

默认情况下,所有触发器处理它们自己的消息。您可以通过在触发器中设置 Set Message Handled 属性来控制触发器消息的处理。

数据触发器

使用 Data Trigger 来:

Data Trigger 在该 Data Trigger 中的条件表达式满足时,会保持对节点的更改。 当该 Data Trigger 中的条件不再满足时,Kanzi 将使用该 Data Trigger 撤销其应用的更改。

您在 Data Trigger 中设置条件,形式为一个绑定表达式,该表达式计算为 True 或 False。在条件中,您可以使用属性或数据源作为输入。

例如,您可以使用 Data Trigger 来控制 Activity Host 中 Activities 的逻辑和激活状态。

Apply Activation Action 和 Apply Property Action 操作比其他任何操作具有更高的优先级。例如,如果您使用一个设置 Active Index 属性的 Apply Activation Action 和一个将同一属性设置为不同值的 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 触发器。当 Kanzi 将节点附加到节点树时,On Attached 触发器被触发。

    ../../_images/add-on-attached-trigger.png
  3. 在 Node Components > Triggers 按 Alt 并右键单击 中,触发您在上一步中添加的触发器,然后选择一个操作。

    请参阅 操作和消息参考。

    例如,选择 Write Log 操作,并将 Log Text 设置为您希望在触发器被触发时写入 Log 窗口的消息。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 使用来自您在 A 部分的节点中触发器的消息参数的值在 Item 属性中。

      • 当您想使用与您在 A 部分中设置的节点相同的属性并为该属性设置一个值时,请使用 Fixed。

      例如,将 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 使用来自您在 A 部分的节点中触发器的消息参数的值在 Item 属性中。

      • 当您想使用在 A 部分中设置的相同消息参数并为该消息参数设置一个值时,请使用 Fixed。

      例如,将 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 节点

处理用户输入