昨夜飘风
昨 夜, 风, 飘 过; 枯 树, 叶, 飞 落。
    有关这部分的文章,我花了好久也没有找到比较好的,最后发现原来MSDN中就有很多例子和解释,不过理解起来相对困难,但是也算是有了一个头,大概截取点主要的说明,看下是否合大家的要求,详细的我研究明白了再说。
    

虽然有 Windows Workflow Foundation 工作流可视化设计器的 Visual Studio 版本,但是可以在 Visual Studio 外部的 Windows 应用程序中承载工作流设计器。 您可以在自己的自定义 Windows 应用程序中承载基于图形的工作流设计器。 自定义应用程序可以实现具有基本设计器功能(如以图形方式显示预建工作流)的简单形式的工作流设计器,也可以实现具有更可靠功能集的工作流设计器版本(类似于 Visual Studio 版本的设计器)。

承载工作流设计器时必须使用的主要类如下:

  • .NET DesignSurface 类,该类通过提供一个完全独立的设计图面来实现用户心目中的设计器。

  • WorkflowView 类,该类显示在工作流标记中描述的工作流的可视化表示形式。

  • WorkflowDesignerLoader 类,该类支持对工作流设计器及其组件的加载进行自定义。

  • WorkflowDesignerMessageFilter 类,可以通过重写相应的虚拟方法从该类进行派生,以创建可处理拖动操作、布局和绘画操作等工作流设计器事件以及其他设计器事件的自定义消息筛选器。

Basic Designer Hosting示例演示如何使用这些类来创建在 Windows 应用程序中承载的工作流设计器的一个简单版本。

WorkflowDesigner 控件是Workflow Tracking Profile Designer的一部分,它为自定义工作流设计器宿主应用程序提供了很好的起点。 WorkflowDesigner 控件提供了一种在宿主应用程序中添加和扩展工作流设计器功能的简便方式。

添加菜单命令功能

由于工作流设计器是在 .NET Framework SDK 中的设计器基类的基础之上生成的,因此为了访问自定义应用程序中的菜单命令,必须从 MenuCommandService 类派生,重写其某些成员,然后将其作为服务添加到工作流加载程序对象所使用的设计器加载程序宿主。

下面的示例演示如何创建自定义 MenuCommandService。 在此示例中,当调用 ShowContextMenu 时会创建一个上下文菜单。 在 GetSelectionMenuItems 方法中,使用 WorkflowMenuCommands 类将工作流设计器提供的适当菜单命令与其对应文本相关联。 此操作完成后,将一个事件处理程序与每个命令相关联,以便在选择该命令时,调用相应的 MenuCommand

下面的示例演示如何在从 WorkflowDesignerLoader 派生的类型上的 Initialize 重写方法中,将派生的 MenuCommandService 类型添加到设计器加载程序宿主。

下面是可在应用程序中使用的具有默认实现的命令:

  • Collapse

  • Copy

  • CopyToClipboard

  • CreateTheme

  • Cut

  • DefaultFilter

  • Delete

  • Disable

  • Enable

  • Expand

  • PageDown

  • PageSetup

  • PageUp

  • Pan

  • Paste

  • Print

  • PrintPreview

  • PrintPreviewPage

  • SaveAsImage

  • SelectAll

  • ShowAll

  • Zoom100Mode

  • Zoom150Mode

  • Zoom200Mode

  • Zoom300Mode

  • Zoom400Mode

  • Zoom50Mode

  • Zoom75Mode

  • ZoomIn

  • ZoomOut

WorkflowMenuCommandsStandardCommands 中的其余命令必须由您自己实现。

对于 UndoMultiLevelUndo 等命令,必须从以下接口和类进行派生,并实现它们:

  • IDesignerSerializationService

  • IComponentChangeService

  • UndoEngine(用于实现撤消功能)

在创建这些派生的服务类之后,必须将它们添加到本节前面描述的经过重写的 Initialize 方法中。

另外,必须使用 AddCommand 方法将任何用户实现的命令添加到派生的 MenuCommandService 类型中,这样每当在设计器中访问该命令时,都会调用相应的事件处理程序。

有关更多信息,请参见 .NET Framework SDK 中的Extending Design-Time Support

“设计器宿主”示例

posted on 2008-02-28 17:16  昨夜飘风  阅读(924)  评论(0编辑  收藏  举报