用户输入和表示体系结构
[本文档仅供预览,在以后的发行版中可能会发生更改。包含的空白主题用作占位符。]
生成设计器时,有几个关于用户输入的问题必须解决。 例如,元素焦点的控制、鼠标和键盘输入的传送、装饰器的添加和命令的调用都必须有一种处理用户输入的通用的集中化机制。 在 适用于 Visual Studio 的 WPF 设计器中,DesignerView 类提供对所有这些问题的管理并表示主设计图面。
装饰器
装饰器是只显示在“设计”视图中的可视元素,用于对设计过程提供协助。 例如,选择控件时,控件周围显示的调整大小控点就是装饰器的一个示例。 DesignerView 类包含一个 Adorners 集合,可以在其中添加装饰器,然后在“设计”视图中使用它们。 有关装饰器的更多信息,请参见装饰器体系结构。
输入传送
DesignerView 类提供了一种用于传送用户输入的标准集中化方法。 输入过程由以下通用步骤组成:
输入事件发生。
执行命中测试。
查找输入绑定。
执行命令绑定。
以下各节将更详细地说明这些步骤。
输入事件发生
输入事件发生后,它将被传送到 DesignerView 类,在这里执行命中测试。
执行命中测试
输入事件到达 DesignerView 实例后,就会执行命中测试扫描。 命中测试将会扫描装饰器层和对象层次结构中的可视对象,并返回以下信息:
鼠标位于哪个装饰器上面。
装饰器与哪个模型项相关联。
如果鼠标不是位于装饰器上面,那么鼠标位于哪个可视对象上面。
与该可视对象相关联的模型项。
查找输入绑定
命中测试之后,DesignerView 尝试将输入事件与输入绑定相匹配。 用于查找输入绑定的算法根据设计器当前状态的不同而不同:
如果当前活动的工具有活动任务,搜索与输入事件匹配的绑定时,将只搜索该任务的输入绑定。
对于鼠标输入,在查找具有与输入事件匹配的输入绑定的任务时,DesignerView 会检查经过命中测试的装饰器。 如果执行了捕获,使用的装饰器就是执行捕获时接受命中测试的装饰器。 如果尚未对任何装饰器执行命中测试,DesignerView 将检查包含在活动工具中的任务的输入绑定。
对于键盘输入,DesignerView 将检查包含在活动工具中的任务的输入绑定。 装饰器上的键盘输入绑定将被忽略。
备注
不会忽略鼠标输入的修改键。修改键可以在鼠标输入中正常使用。
执行命令绑定
获得输入绑定之后,将在绑定中的命令上调用 Execute 方法。 但是,命令是接口,因此 Execute 的行为由该命令的实现决定。