使用触发器¶
触发器和动作可用于创建基于用户输入的交互。
触发器定义了一个条件,动作定义了当满足该条件时触发器执行的操作。例如,要在节点附加到节点树时向 Log 窗口打印一条消息,请将 On Attached 触发器添加到该节点,并将 Write Log 动作添加到该触发器。
Kanzi Studio 具有一系列可以添加到触发器的操作。例如,您可以添加一个操作以打印到 Log 窗口 (Write Log),将属性设置为某个值 (Set Property),导航到 Page 节点 (Navigate to Page),或更改应用程序主题 (Activate Theme)。
触发器消息¶
当触发器拦截根据动作生成的消息时,您可以设置触发器对该消息执行的动作。您可以:
拦截消息,对其进行操作,并让它继续在工程树中向上或向下传递。
拦截消息,对其进行处理。当触发器处理消息时,它会消耗该消息,使消息在处理它的触发器处停止,其他节点无法拦截它。
使用触发器,您可以在消息源节点或其任何祖先或后代节点的触发器中拦截消息。您可以在同一节点中拦截多种不同的消息类型。当消息向上穿过项目树时,消息会冒泡。当消息向下穿过项目树时,消息会隧道。您可以在创建消息的操作中设置消息是冒泡、隧道,还是同时冒泡和隧道。
例如,如果动作创建冒泡消息,在动作产生消息后,消息从接收输入的节点冒泡至其父节点,然后到父节点的父节点,以此类推,直到触发器拦截该消息。如果触发器也处理该消息,消息将停止冒泡(在项目树中向上传播)。如果没有任何祖先节点处理该消息,消息将一直传播到项目的根节点。
默认情况下,所有触发器处理它们自己的消息。您可以通过在触发器中设置 Set Message Handled 属性来控制触发器消息的处理。
数据触发器¶
使用 Data Trigger 来:
将值应用于具有 Apply Property Action 的属性。
使用 Apply Activation Action 激活 Activity。请参阅 使用 Apply Activation Action 激活活动 和 教程:控制应用程序 UI。
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 中添加到触发器的所有操作的列表,请参阅 操作和消息参考。
添加触发器¶
添加触发器最常见的位置是使用触发器的节点,但您可以将触发器添加到任何节点。
要添加触发器:
在 Node Tree 中创建或选择要添加触发器的节点。
例如,创建一个 Button 2D 节点。当您创建 Button 2D 节点时,它已经有一个 Button: Click 触发器。
在 Node Components 中,右键单击 Triggers 并选择一个拦截您想要拦截的消息类型的触发器。请参阅 触发器参考。
例如,添加一个 On Attached 触发器。当 Kanzi 将节点附加到节点树时,On Attached 触发器被触发。
在 Node Components > Triggers 按 Alt 并右键单击 中,触发您在上一步中添加的触发器,然后选择一个操作。
请参阅 操作和消息参考。
例如,选择 Write Log 操作,并将 Log Text 设置为您希望在触发器被触发时写入 Log 窗口的消息。Write Log 操作在您想验证节点是否接收到输入时很有用。
您可以添加任意数量的操作。Kanzi 按照从第一个操作开始的顺序执行这些操作。
当 Kanzi 附加节点时,它会将您输入为 Log Text 属性的值的消息打印到 Log 窗口。
要了解有关 Write Log 操作的更多信息,请参阅 使用 Write Log 操作。
要打开 Log 窗口,在主菜单中选择 Window > Log。
(可选) 如果您希望触发器仅在特定条件下被触发,在您要设置条件的触发器的 Node Components > Triggers 中,右键单击 Conditions,然后选择 Trigger Condition。请参阅 为触发器添加条件。
设置触发器消息的处理¶
当触发器处理一个消息时,会消耗这个消息,使消息停在该触发器处,而其他节点不能拦截它。请参阅 在 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>。
为触发器添加条件¶
触发条件使您能够设置必须满足哪些条件才能触发。例如,您可以定义条件以便在用户导航到特定的 Page 节点时触发,或者仅当特定的 Page 节点处于活动状态时,才允许用户滚动滚动视图。
通过将您在 A 部分中定义的值与您在 B 部分中定义的值进行比较,并使用您在 Operation 属性中设置的运算符,来创建触发条件。
您可以创建条件,使触发器在以下条件下启动:
来自属性类型的值符合某个规则。请参阅 使用属性中的值创建条件。
来自消息参数的值符合某个规则。请参阅 使用消息中的值创建条件。
使用属性中的值创建条件¶
您可以定义一个触发条件,在您选择的属性获得您在该条件中设置的值时启动触发器。例如,您可以创建一个条件,仅当特定的 Page 节点处于活动状态时,允许用户滚动 Scroll View 节点。
要使用属性中的值创建条件:
在 Node Tree 中,选择或创建一个触发器节点,您希望在其中添加条件,在该触发器的 Node Components 中,右键单击 Conditions,并选择 Trigger Condition。请参阅 添加触发器。
例如,创建一个 Scroll View 2D 节点,并使用 Scroll View: Scrolled 触发器,在该触发器中右键单击 Conditions,然后选择 Trigger Condition。请参阅 使用 Scroll View 节点。
在您创建的触发条件中,设置必须满足的条件以触发启动。
通过将您在 A 部分中定义的值与您在 B 部分中定义的值进行比较,并使用您在 Operation 属性中设置的运算符,来创建触发条件。
在触发条件集中:
在 A 部分定义您要用于条件的属性类型和值。要使用属性中的值,请设置:
Type of A 到 Property
Item 到您想要用于条件的节点的属性。
例如,将其设为 Page 节点。
Property 到您要用于条件的属性类型。
例如,将其设置为您在 Item 属性中选择的 Page 节点的 Activation State 属性。
使用 Activation State 属性来确定 Page 或 Page Host 节点是否处于活动状态。
Operation 到您要使用的运算符,以将您在 A 部分中定义的值与您在 B 部分中定义的值进行比较。
例如,将其设置为 =,以创建一个条件,其中触发器仅在您在 A 部分中定义的值等于您在 B 部分中定义的值时触发。
在 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。
在这里您创建了一个条件,当用户导航到 Page 节点 Media 时触发 Scroll View: Scrolled。
使用消息中的值创建条件¶
您可以定义一个触发条件,在您选择的消息获得您在该条件中设置的值时启动触发器。您可以使用来自这些触发器消息的值:
Key Input。请参阅 设置特定键以移动焦点。
List Box。
Scroll View。
State Manager。请参阅 节点进入或离开某个状态时的反应。
例如,可以在用户在 List Box 节点中选择特定项目时触发一个触发器。
要使用消息中的值创建条件:
在 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 节点。
在您创建的触发条件中,设置必须满足的条件以触发启动。
通过将您在 A 部分中定义的值与您在 B 部分中定义的值进行比较,并使用您在 Operation 属性中设置的运算符,来创建触发条件。
在触发条件集中:
在 A 部分设置您要用于条件的消息参数。要使用消息参数中的值,请设置:
Type of A 到 Message argument
将 Message Argument 到您要用于条件的消息参数。
例如,如果您创建了一个 List Box: Item Selected 触发器,请将 Message Argument 设置为 Selection。
Operation 到您要使用的运算符,以将您在 A 部分中定义的值与您在 B 部分中定义的值进行比较。
例如,将其设置为 =,以创建一个条件,其中触发器仅在您在 A 部分中定义的值等于您在 B 部分中定义的值时触发。
在 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 部分中设置的消息类型。在此示例中,这是一个整数。
在本示例中,您创建了一个条件,当用户选择 Grid List Box 2D 节点中的第一个项目时,会触发一个 List Box: Item Selected。
移除触发器¶
要移除触发器,在 Node Components > Triggers 中可以:
选择您要删除的触发器,然后按 Delete。
右键单击您要删除的触发器,然后选择 Delete。
在 API 中使用触发器¶
有关详细信息,请参阅 Trigger 类。