使用焦点
键盘焦点转发硬件按键消息到您的应用程序中的正确的用户界面元素。例如,用户可以按下键盘上的方向键移动滑块,也可以按下 Enter 键或点击一个按钮。 您可以使用Kanzi 用于导航的默认键,或者设置特定键盘键。请参阅默认键盘导航键和设置特定键盘键以移动焦点。
要在您的 Kanzi 应用程序中处理焦点,您可以:
通过完成教程学习如何使用焦点。请参阅教程:使用键盘输入来导航应用程序。
默认键盘导航键
这些是可用于在您的应用程序中导航焦点的默认键盘键:
设置焦点
当用户界面元素具有焦点时,用户可以使用键盘键与用户界面元素进行交互。屏幕 (Screen) 节点默认具有焦点。
要设置焦点:
- 在工程 (Project) 中,选择要设置焦点的那个节点,然后在节点组件 (Node Components) 中添加一个用于触发设置焦点动作的触发器。
例如,添加页面已激活 (Page Activated) 触发器。页面已激活 (Page Activated) 触发器在页面 (Page) 或主页面 (Page Host) 节点变为活动时触发。
- 在节点组件 (Node Components) 中,为页面已激活 (Page Activated) 触发器添加设置焦点 (Set Focus) 动作。
您设置应用程序在您添加触发器的页面 (Page) 或主页面 (Page Host) 节点活动时设置焦点到节点。
- 在设置焦点 (Set Focus) 动作中,将目标项 (Target Item) 设置为要设定焦点的节点。
例如,将目标项 (Target Item) 设置到2D 滑块 (Slider 2D) 节点,当节点活动时设置焦点到页面 (Page) 或主页面 (Page Host) 该节点的滑块。
当导航至添加了触发器的页面 (Page) 节点,会将焦点设置为您在该动作中设置的节点。例如,如果将焦点设置到滑块 (Slider) 节点,则您可以默认使用键盘上的方向键移动滑块。
表明用户界面元素何时具有焦点
您可以设置用户界面元素(例如按钮或滑块),以使其在具有焦点时更改外观。例如,您可以在按钮具有焦点时突出显示按钮,或者在滑块具有焦点时更改滑块旋钮的外观。
要表明用户界面元素何时具有焦点:
- 在 工程 (Project) 中,选择要为其创建焦点可视化的节点,并在状态工具 (State Tools) 中点击创建状态机 (Create State Manager) 以便为节点创建状态机。
- 在状态工具 (State Tools) 中点击创建状态 (Create State) 两次以创建两个状态。对它们进行命名,例如命名为 NotFocused 和 Focused。
NotFocused 状态定义了您的应用程序在节点没有焦点时的状态,而 Focused 状态定义了节点有焦点时的状态。
- 在 工程 (Project) 中,选择要为其创建焦点可视化的节点,并设置您希望在节点有焦点时更改的属性的值。
例如,当滑块具有焦点时,您可以对滑块旋钮使用另一幅图像。
- 在状态工具 (State Tools) 中,点击用于定义当节点有焦点时的节点外观的那个状态下方的 ,以便将当前属性值保存到该状态中。
例如,点击 Focused 状态下方的 。
- 在状态工具 (State Tools) 中点击<No Controller Property> 下拉菜单并选择节点 (Node) > 已聚焦 (Focused)属性。
将已聚焦 (Focused) 属性设置为状态机的控制器属性时,状态机会根据属性的值迁移到某个状态。
- 在状态工具 (State Tools) 中,在用于定义当节点具有焦点时的节点外观的那个状态的下方,将已聚焦 (Focused) 属性的值设置为 True。
- 在状态工具 (State Tools) 中点击编辑状态机 (Edit State Manager) 停用状态工具 (State Tools)。
将焦点设置为滑块时,滑块旋钮的外观会发生变化。
在焦点链中移动焦点
焦点链是节点序列,它定义了 Kanzi 设置焦点到这些节点的顺序。Kanzi 在焦点链中自动包括工程中的所有节点。默认情况下,焦点链将活动焦点从每个节点移动到下一个子节点。当节点没有能接收焦点的子节点,焦点移动到工程树中的下一个节点。您可以定义自定义焦点链,或设置哪个节点在当前获得焦点的节点之后接收焦点,以重定向默认焦点链导航。
要在焦点链中移动焦点:
- 在工程 (Project) 中选择要接收焦点的各节点,并在属性 (Properties) 中添加和设置要接收焦点的节点:
- 当用户在前进方向导航时,下一个焦点节点 (Next Focus Node) 属性设置焦点到您在该属性中设置的节点。
例如,将下一个焦点节点 (Next Focus Node) 属性设置为指向表示您在相同应用程序屏幕上显示的控件的节点,如列表框或按钮。 - 当用户在后退方向导航时,上一个焦点节点 (Previous Focus Node) 属性设置焦点到您在该属性中设置的节点。
您可以按下 Tab 键移动到焦点链中的下一个节点,按下 Shift Tab 键移动到上一个节点。
- 向左导航节点 (Left Navigation Node) 属性设置焦点到您在该属性中设置的节点,该属性在当前获得焦点的节点左侧渲染。
- 向右导航节点 (Right Navigation Node) 属性设置焦点到您在该属性中设置的节点,该属性在当前获得焦点的节点右侧渲染。
- 向上导航节点 (Up Navigation Node) 属性设置焦点到您在该属性中设置的节点,该属性在当前获得焦点的节点之上渲染。
- 向下导航节点 (Down Navigation Node) 属性设置焦点到您在该属性中设置的节点,该属性在当前获得焦点的节点之下渲染。
您可以按下←(左箭头)、→(右箭头)、↑(上箭头)和↓(下箭头)将焦点移动至左、右、上、下导航节点。
建议您可以使用别名或指向每个节点的路径定义焦点链。
别名提供设置焦点链中节点的便捷方式。请参阅使用别名。
- 在工程 (Project) 中选择禁用焦点的各节点,并在属性 (Properties) 中右键点击,选择添加属性 (Add Property) > 节点 (Node) > 可聚焦 (Focusable) 属性,并禁用该属性。
设置焦点范围
使用焦点范围处理在焦点链中的导航。您可以将节点设置为焦点范围,将焦点从该节点前进到子节点。当设置焦点到焦点范围时,Kanzi 将焦点前进到该范围具有逻辑焦点的子节点。
要设置焦点范围:
- 在工程 (Project) 中,选择要设置为焦点范围的节点,并在属性 (Properties) 中添加并启用焦点范围 (Focus Scope) 属性。
- 在工程 (Project) 中选择要设置焦点的焦点范围节点的子节点,并在属性 (Properties) 中添加并启用逻辑焦点 (Logical Focus) 属性。
当设置焦点到焦点范围节点时,启用逻辑焦点 (Logical Focus) 属性的子节点接收焦点。如果焦点范围有多个启用逻辑焦点 (Logical Focus) 属性的子节点,焦点管理器将焦点设置到最后一个子节点。
设置焦点围栏
使用焦点围栏在应用程序的一部分中导航焦点。焦点围栏允许用户在焦点范围边界内进行内容导航。例如,您可以使用焦点围栏为导航栏或弹出窗口创建键盘导航。
要设置焦点围栏:
- 在工程 (Project) 中,选择要设置为焦点围栏的节点,并将该节点设置为焦点范围。请参阅设置焦点范围。
- 在工程 (Project) 中,选择要设置为焦点范围的节点,并在可聚焦 (Focusable) 中添加属性 (Properties) 属性,并禁用该属性。
当设置焦点范围不接收焦点时,您不能导航至焦点范围边界或从焦点范围边界导航。
设置特定键盘键以移动焦点
在为您的应用程序创建键盘导航时,您可以设置用户可以使用哪些键盘键来导航应用程序。您可以重写默认焦点导航键,并使用特定键设置焦点到节点或在焦点链中移动焦点。
要设置特定键盘键以移动焦点:
- 在工程 (Project) 中选择要通过特定键盘键移动其焦点至另一个节点的节点。
- 在节点组件 (Node Components) 中右键点击触发器 (Triggers),并添加键盘 (Keyboard) > 键按下 (Key Down) 触发器。
使用键按下 (Key Down) 触发器触发动作,当用户按下键盘上的特定键时将焦点设置到节点。
- 在节点组件 (Node Components) 中点击触发器设置 (Trigger Settings),并在触发器设置编辑器 (Trigger Settings Editor) 中点击添加条件 (Add condition)。触发器条件编辑器 (Trigger Condition Editor) 即会打开。
您可以这里使用触发条件设置触发器必须满足哪些条件才能触发。当您添加触发器的节点具有焦点,并且用户按下键盘上的特定键,触发键按下 (Key Down) 触发器。
- 在触发器条件编辑器 (Trigger Condition Editor) 中,设置哪个键盘键触发键按下 (Key Down) 触发器:
- 值 A (Value A)
- 起始值 (Value From) 为消息 (Message)
键按下 (Key Down) 触发器会拦截用户按下键盘上的键时产生的消息。消息包含键代码,Kanzi 使用键代码来触发触发器。
- 运算符 (Operator) 为=
- 值 B (Value B)
- 起始值 (Value From) 为固定 (Fixed)
- 固定值 (Fixed Value) 为要用于触发触发器的键代码。
例如,使用 19。您可以对E 键使用键代码,以便在用户按下键盘上的键时触发触发器。关于 Kanzi 中使用的键盘键代码的列表,请参阅键盘输入代码参考。
在触发器条件编辑器 (Trigger Condition Editor) 和触发器设置编辑器 (Trigger Settings Editor) 窗口中点击保存 (Save)。
- 在节点组件 (Node Components) 中,为键按下 (Key Down) 触发器添加移动焦点 (Move Focus) 动作。
- 在移动焦点 (Move Focus) 动作中将方向 (Direction) 属性设置为您要移动焦点的焦点链中的方向。
例如,要移动焦点到焦点链中的下一个节点,将方向 (Direction) 属性设置为前进 (Forward)。请参阅在焦点链中移动焦点。
当用户按下E 键,键按下 (Key Down) 触发器触发动作,按照移动焦点 (Move Focus) 动作中设定的方向移动焦点到下一个可获得焦点的节点。
在 API 中使用焦点
有关详细信息,请参阅 API reference中的 FocusManager
类。
另请参阅
焦点
教程:使用键盘输入来导航应用程序
使用状态机
动作参考
打开导航