工具体系结构
更新:2007 年 11 月
用户通过多种复杂方式与设计器上的内容交互。例如,用户可以通过单击、拖动、使用修改键拖动、键盘或菜单交互等方式与设计图面交互。为了能够扩展,设计器必须为处理所有这些用户交互类型提供一个基础。Visual Studio Windows Presentation Foundation (WPF) 设计器提供了一种灵活的结构化输入系统,该系统可扩展并且一致。工具体系结构的用户模型由命令、任务和工具组成。
命令
命令是一个表示某一行为的唯一标识符。“剪切”命令便是一个示例,它标识剪切文本或对象并将其添加到剪贴板中的过程。尽管实现命令的代码在应用程序之间甚至在一个应用程序内部可能会有所不同,但命令却保持不变。所有命令都实现 ICommand 接口。
除了命令本身外,还需要另外两个因素才能使命令起作用。首先,命令需要某种触发该命令的用户输入(称为操作)。例如,Ctrl+X 击键组合或者菜单中的选项可以是触发某个命令的一个操作。其次,命令需要某种在其被调用时执行的代码实现。
WPF 提供了一种称为 RoutedCommand 的 ICommand 接口的内置实现,该内置实现将有关用户输入的信息传递到指定的命令处理程序。WPF 设计器提供了另一种称为 ToolCommand 的命令类型,该命令类型扩展了传递到该命令处理程序的 EventArgs 类型的有关设计器状态的信息数量。
任务
Task 是一个对象,它表示可能发生在设计器中的实际任务。例如,Task 对象可能表示在设计器上拖动某一项。Task 包含三个集合:
一个输入绑定集合,其中的输入绑定描述由该任务处理的用户输入的类型。例如,表示击键组合或鼠标操作的绑定。
一个命令绑定集合,其中的命令绑定为标准 WPF 路由命令提供实现。
一个工具命令绑定集合,其中的工具命令绑定为 WPF 设计器的工具命令提供实现。
例如,前面提及的、表示在设计器上拖动项的 Task 对象可能包含表示鼠标按下、鼠标移动和鼠标释放的命令。Task 对象还可能包含将输入操作绑定到其中的每个命令的输入绑定。
工具
Tool 是一个用于处理用户输入的类。所有用户输入都作为一个或多个输入事件进入设计器,承载着表示所用输入操作的数据以及有关设计器状态的其他信息。输入事件路由到当前活动的 Tool 对象,后者将输入数据转换为输入绑定。如果找到针对指定输入操作的绑定,则执行该绑定内的命令。
Tool 对象用于表示设计器的全局模式。例如,如果用户正在选择设计图面上的组件,则启用该模式,因为当前工具提供的任务提供了输入绑定和命令的集合,而这些绑定和命令将特定的输入操作绑定到实现这些任务的特定命令。如果用户正在创建一个新控件,则活动工具可能会不一样并且可能将提供一组不同的绑定,这些绑定可能允许用户使用相同操作但将其绑定到不同的命令。