上一篇:宿主工作流设计器(一)
接着上一篇文章说,前面已经定义了一个WorkflowLoader类来完成工作流的导入与导出,下面我们接着完成工作流设计器的工作。
本章我们主要讲述使用WorkflowView这个类在UI上呈现出一个工作流设计器。
首先我们创建DesignSurface的一个实例:
![](/Images/OutliningIndicators/None.gif)
前面已经讲过这个类是负责完成UI呈现工作的,这个类起到一个服务容器的作用,采用了微软经典的Service/Component模型,里面装载UI呈现设计器所需的各种服务,我们可以从其中取得一个设计器宿主对象,它是一个IDesignerHost接口,然后从这个宿主中获取到宿主在其中的工作流设计器,关于设计器设计器宿主结构可以参看MSDN。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
前面文章说过,我们的设计器是面向客户的,而VS中的设计器顶部标题是“顺序工作流”,“状态机工作流“之类的专业字眼,因此我们必须让它变成我们定义的文字,刚开始我一直觉得这个标题应该是存在于WorkflowView的Title之类的属性中,然而仔细研究后发现问题并不是这么简单,微软的设计比我想象的要灵活得多,先汗一个!
设计器标题并不由设计器对象所决定,而是由载入到WorkflowView中的WorkFlow决定,Framework中所有的Activity对象都可以应用DesignerAttribute特性(SequentialWorkflowActivity也是继承了Activity),我们都知道Control类也可以用这个特性影响控件的设计时外观,而WorkFlow设计器也这样做了,我们可以定义个设计类来定制WorkFlow的设计时外观,我们看看一个DesignerAttribute构造函数的定义:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
读到这里相信大家已经托管出一个属于自己的工作流设计器了,后面我们接着说说工具箱的定义和其他一些相关内容。