通常您可以区别控件的两个部分,即区别数据元素与核心部分,数据元素表示数据的各个部分,核心部分负责将数据组织为一个整体。图表数据元素由节点和边组成。当需要时,核心部分会使用数据元素的自定义版本来提供一些功能,如滚动、缩放、绘图和事件处理。例如,当您单击鼠标按钮时,核心部分会定义这个事件发生的位置。如果事件发生在某个数据元素上,那么事件信息会传递到这个数据元素的处理程序,此外核心部分会处理事件本身。
图表中有两样东西项目会随着不同应用程序而改变,您应当进行自定义。一个是数据元素的外观与行为;另一个是组织元素的方式。如果要很容易地自定义控件,就需要为这些东西定义界面,然后仅通过界面将这些东西用于控件。所以,如果要进行某种更改,只需要采用新的方式实现界面,无需更改控件中的代码。这就是所谓的“策略”模式。
图表控件采用了以下策略:
- INodeHandler
- IEdgeHandler
- ILayout
以上类定义了三种不同情况下的布局策略函数,即:
- 图表需要完全重新排列时
- 图表结构已部分更改,只需要重新排列更改部分时
- 只有节点尺寸更改了,需要重新计算坐标(不需要定义节点和边的相对位置)时
定义这种区别的主要目的是为了减少布局计算时间。如果向某个大型图表中添加一个节点,就不需要重新计算整个图表的布局。