使用触发器
触发器和动作可用于创建基于用户输入的交互。 触发器定义条件,动作定义触发器在符合条件时的动作。例如,要在节点附加在场景图时执行 JavaScript 脚本,将附加时 (On Attached) 触发器添加至该节点,并将执行脚本 (Execute Script) 动作添加至该触发器。
Kanzi Studio 有各种可以添加到触发器的动作。例如,您可以添加打印至 日志 (Log) 窗口 (写入日志 (Write Log)) 的动作,将属性设置为特定值 (设置属性 (Set Property)),导航至页面 (Page) 节点 (导航至页面 (Navigate to Page)),或者更改应用程序主题 (激活主题 (Activate Theme))。
触发器消息
当触发器拦截根据动作生成的消息时,您可以设置触发器对该消息执行的动作。您可以:
- 拦截消息,对其进行操作,并让它继续在工程树中向上或向下传递。
- 拦截消息,对其进行操作,并处理该消息。触发器处理一个消息时,会消耗这个消息,使消息停在该触发器处,而其他节点不能拦截它。
通过触发器,您可以在消息产生的节点拦截消息,或者在其任何祖先节点或子孙节点的触发器中拦截消息。您可以在相同节点拦截许多不同的消息类型。当消息沿工程树向上传递时,消息为冒泡式传递。当消息沿工程树向下传递时,消息为隧道式传递。您可以在创建消息的动作中设置消息是否通过冒泡式、隧道式或二者结合的方式传递。
例如,如果动作创建冒泡消息,在动作产生消息后,消息从接收输入的节点冒泡至其父节点,然后到父节点的父节点,以此类推,直到触发器拦截该消息。如果该触发器也处理该消息,消息停止冒泡(即在工程树中向上传递)。如果没有祖先节点处理该消息,消息一直传递至工程的根节点。
默认情况下,所有触发器处理各自的消息。您可以通过在 触发器设置 (Trigger Settings) 中设置 设置已处理消息 (Set Message Handled) 属性控制触发器消息处理。
使用入门
要开始使用触发器,请参阅:
关于您可以在 Kanzi Studio 中使用的所有触发器列表,请参阅触发器参考。
关于您可以在 Kanzi Studio 中添加到触发器的所有动作列表,请参阅动作参考。
添加触发器
添加触发器最常见的位置是使用触发器的节点,但您可以将触发器添加到任何节点。
要添加触发器:
- 在 工程 (Project) 中创建或选择要添加触发器的节点。
例如,创建一个2D 按钮 (Button 2D) 节点。当您创建2D 按钮 (Button 2D) 节点时,它已有一个 按钮: 点击 (Button:Click) 触发器。
- 在节点组件 (Node Components) > 触发器 (Triggers) 部分中右键点击,选择添加触发器 (Add Trigger),然后选择一个触发器拦截您想要拦截的消息类型。
例如,添加附加时 (On Attached) 触发器。附加时 (On Attached) 触发器在 Kanzi 将节点附加到场景图时触发。
- 在节点组件 (Node Components) > 触发器 (Triggers) 部分中,为您在上一步中添加的触发器点击 的下拉菜单,然后选择动作。
例如,选择写入日志 (Write Log) 动作并输入在触发器触发时要写入日志 (Log) 窗口的消息。要验证节点是否接收到输入,写入日志 (Write Log) 动作非常有用。
您可以添加任意数量的动作。Kanzi 从第一个动作开始按顺序执行动作。
当 Kanzi 附加到节点时,它打印您输入的消息,作为日志 (Log) 窗口的日志消息 (Log Message) 属性值。要打开日志 (Log) 窗口,在主菜单中选择 > 日志 (Log)。
- (可选) 如果您希望触发器仅在特定条件下触发,在要设置条件的触发器下的 节点组件 (Node Components) > 触发器 (Triggers) 部分,点击 触发器设置 (Trigger Settings),在 触发器设置编辑器 (Trigger Settings Editor) 中点击 添加条件 (Add condition),并定义条件。请参阅为触发器添加条件。
设置触发器消息的处理
触发器处理一个消息时,会消耗这个消息,使消息停在该触发器处,而其他节点不能拦截它。请参阅在 Kanzi Studio 中创建自定义消息。
要设置触发器消息的处理:
- 在要设置消息处理的触发器下 节点组件 (Node Components) > 触发器 (Triggers) 部分,点击 触发器设置 (Trigger Settings)。
- 在触发器设置编辑器 (Trigger Settings Editor) 中设置:
- 设置已处理消息 (Set Message Handled) 属性:
- 当您启用 设置已处理消息 (Set Message Handled) 属性时,触发器拦截并处理消息。消息在此处停止,不继续在工程树中进行冒泡式或隧道式传递。
- 当您禁用 设置已处理消息 (Set Message Handled) 属性时,触发器拦截消息,但消息继续在工程树中进行冒泡式或隧道式传递。
- 路由模式 (Routing Mode) 属性:
- 冒泡 (Bubbling) 仅拦截冒泡消息。
- 隧道 (Tunneling) 仅拦截隧道消息。
- 隧道和冒泡 (Tunneling and bubbling) 拦截隧道和冒泡消息。
- 消息源 (Message Source) 属性:
- 要拦截特定目标项的消息,执行以下操作之一:
- 从下拉菜单选择该项。
- 选择 <Relative> 并将路径设置为该项:
- 分离含
/
的节点名称,以构建路径。 - 使用
.
访问当前项。 - 使用
..
访问当前项的父项。 - 使用
#
访问在当前节点资源字典中使用别名的节点。请参阅使用别名。
- 要拦截所有来源的消息,选择 <No Item>。
为触发器添加条件
您可以这里使用触发条件设置触发器必须满足哪些条件才能触发。例如,您可以定义条件以在用户导航到特定页面 (Page) 节点时启动触发器,仅当该按钮可见时用户才能点击按钮,或者只有当特定页面 (Page) 节点活动时用户才能滚动视图。
您可以在触发器条件编辑器 (Trigger Condition Editor) 中向触发器添加条件。通过使用和 运算符 (Operator) 属性一起设置的运算符比较您在 值 A (Value A) 部分定义的值和在 值 B (Value B) 部分定义的值,您可以创建条件。
您可以创建条件,使触发器在以下条件下启动:
使用属性中的值创建条件
您可以定义一个触发条件,在您选择的属性获得您在该条件中设置的值时启动触发器。例如,您可以创建一个条件,只有当特定页面 (Page) 节点处于活动状态时,才允许用户滚动滚动视图 (Scroll View) 节点。
要使用属性中的值创建条件:
- 在工程 (Project) 中选择或创建一个带有您要添加条件的触发器的节点并在触发器的节点组件 (Node Components) 中点击触发器设置 (Trigger Settings)。请参阅添加触发器。
触发器设置编辑器 (Trigger Settings Editor) 即会打开。
例如,创建一个带有已滚动 (Scrolled) 触发器的2D 滚动视图 (Scroll view 2D) 节点,在节点组件 (Node Components) 中点击该出触发器的 触发器设置 (Trigger Settings)。请参阅使用滚动视图 (Scroll View) 节点。
- 在触发器设置编辑器 (Trigger Settings Editor) 中点击添加条件 (Add condition)。
触发器条件编辑器 (Trigger Condition Editor) 即会打开。
- 在触发器条件编辑器 (Trigger Condition Editor) 中设置必须满足才能启动触发器的条件。通过使用和 运算符 (Operator) 属性一起设置的运算符比较您在 值 A (Value A) 部分定义的值和在 值 B (Value B) 部分定义的值,您可以创建条件。
在触发器条件编辑器 (Trigger Condition Editor) 中设置:- 在 值 A (Value A) 部分定义您要用于条件的属性类型和值。要使用属性的值,设置:
- 起始值 (Value From) 为属性 (Property)
- 项 (Item) 为您想要将其属性用于条件的节点
例如,将其设为页面 (Page) 节点。 - 属性 (Property) 为您想要用于条件的属性类型
例如,将其设置为您在项 (Item) 属性中选择的页面 (Page) 节点的激活状态 (Activation State) 属性。
使用激活状态 (Activation State) 属性查看页面 (Page) 或主页面 (Page Host) 节点是否活动。
- 运算符 (Operator) 为您要使用的运算符,用于比较在 值 A (Value A) 部分定义的值和在 值 B (Value B) 部分定义的值。
例如,将其设置为 =,以创建仅当您在 值 A (Value A) 部分定义的值等于在 值 B (Value B) 部分定义的值时触发器触发的条件。
- 在 值 B (Value B) 部分定义值,用于比较在 值 A (Value A) 部分定义的值。 起始值 (Value From) 属性定义 值 B (Value B) 值的来源。 将起始值 (Value From) 属性设置为:
- 属性 (Property) 比较工程中任何节点任何属性的值
- 消息 (Message) 使用您在 项 (Item) 属性的 值 A (Value A) 部分设置的节点中触发器消息的值
- 固定 (Fixed)当您要使用在 值 A (Value A) 部分设置的节点的属性并为该属性设置一个值时
例如,将起始值 (Value From) 属性设置为固定 (Fixed),然后将固定值 (Fixed Value) 属性设置为启用。
固定值 (Fixed Value) 属性的数据类型取决于您在值 A (Value A) 部分中设置的属性类型。在本示例中,这是页面 (Page) 节点的 Boolean 属性类型 激活状态 (Activation State)。
点击保存 (Save)。
在这里您创建了一个条件,当用户导航到页面 (Page) 节点 Media 时,会触发触发器。
使用消息中的值创建条件
您可以定义一个触发条件,在您选择的消息获得您在该条件中设置的值时启动触发器。您可以使用这些触发器的消息中的值:
例如,可以在用户选择列表框 (List Box) 节点中的特定项时启动触发器。
要使用消息中的值创建条件:
- 在工程 (Project) 中选择或创建一个带有您要添加条件的触发器的节点并在触发器的节点组件 (Node Components) 中点击触发器设置 (Trigger Settings)。请参阅添加触发器。
触发器设置编辑器 (Trigger Settings Editor) 即会打开。
例如,创建一个带有列表框: 选定项 (List Box: Item Selected) 触发器的2D 网格列表框 (Grid List Box 2D) 节点,在节点组件 (Node Components) 中点击该出触发器的 触发器设置 (Trigger Settings)。请参阅使用网格列表框 (Grid List Box) 节点。
- 在触发器设置编辑器 (Trigger Settings Editor) 中点击添加条件 (Add condition)。
触发器条件编辑器 (Trigger Condition Editor) 即会打开。
- 在触发器条件编辑器 (Trigger Condition Editor) 中设置必须满足才能启动触发器的条件。通过使用和 运算符 (Operator) 属性一起设置的运算符比较您在 值 A (Value A) 部分定义的值和在 值 B (Value B) 部分定义的值,您可以创建条件。
在触发器条件编辑器 (Trigger Condition Editor) 中设置:- 在 值 A (Value A) 部分设置您要用于条件的消息。要使用消息的值,设置:
- 起始值 (Value From) 为消息 (Message)
- 参数 (Argument) 为您想要用于条件的消息
例如,如果您创建了列表框: 选定项 (List Box: Item Selected) 触发器,将参数 (Argument) 设为选择 (Selection)。
- 运算符 (Operator) 为您要使用的运算符,用于比较在 值 A (Value A) 部分定义的值和在 值 B (Value B) 部分定义的值。
例如,将其设置为 =,以创建仅当您在 值 A (Value A) 部分定义的值等于在 值 B (Value B) 部分定义的值时触发器触发的条件。
- 在 值 B (Value B) 部分定义值,用于比较在 值 A (Value A) 部分定义的值。 起始值 (Value From) 属性定义 值 B (Value B) 值的来源。 将起始值 (Value From) 属性设置为:
- 属性 (Property) 比较工程中任何节点任何属性的值
- 消息 (Message) 使用您在 项 (Item) 属性的 值 A (Value A) 部分设置的节点中触发器消息的值
- 固定 (Fixed)当您要使用在 值 A (Value A) 部分设置的消息并为该消息设置一个值时
例如,将起始值 (Value From) 属性设置为固定 (Fixed),然后将固定值 (Fixed Value) 属性设置为 0。
固定值 (Fixed Value) 属性的数据类型取决于您在 值 A (Value A) 部分中设置的消息类型。在本示例中是一个整数。
点击保存 (Save)。
在本示例中,您创建了一个条件,在用户选择 2D 网格列表框 (Grid List Box 2D) 节点中的第一个项时触发触发器。
移除触发器
要移除触发器,在节点组件 (Node Components) > 触发器 (Triggers) 部分,右键点击要移除的触发器并选择 移除 (Remove)。
在 API 中使用触发器
有关详细信息,请参阅 API reference中的 Trigger
类。
另请参阅
触发器
使用消息
触发器参考
动作参考
设置应用程序以从键盘接收输入
节点进入或离开某个状态时的反应
使用滚动视图 (Scroll View) 节点
使用网格列表框 (Grid List Box) 节点
处理用户输入
键盘输入代码参考
使用脚本
打开导航