VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Objective-C编程 >
  • WF编程系列之工作流编写方式结合代码与XAML

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  2.4结合代码与XAML

  Visual Studio还提供另外一种生成工作流的方式:代码分离与XAML标记结合的方式,即通常我们所说的code-beside.采用这种方式时,设计器会将工作流标记存储到一个XOML文件中,我们则可以在C#或Visual Basic源代码文件里扩充定义.这种开发方式的项目模板是Sequential Worklow (with code separation).

《WF编程》系列之14 - 工作流编写方式:结合代码与XAML

  项目模板会在项目中添加两个文件,如果我们的工作流叫做CodeSeparation,那么这两个文件就是CodeSeparation.xoml和CodeSeparation.xoml.cs.如果这个工作流和之前的相同(内部有一个CodeActivity活动),那么CodeSeparation.xoml.cs文件会像下边的一样:

usingSystem;
usingSystem.Workflow.Activities;
namespacechapter2_library
{
 publicpartialclassCodeSeparation:
   SequentialWorkflowActivity
 {
   privatevoidcodeActivity1_ExecuteCode(objectsender,
  
EventArgse)
   {
   }
 }
}

  XOML文件会包含如下的XAML标记:

<SequentialWorkflowActivity
 x:Class="chapter2_library.CodeSeparation"
 x:Name="CodeSeparation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
 <CodeActivity
  x:Name="codeActivity1"
  ExecuteCode="codeActivity1_ExecuteCode"/>
</SequentialWorkflowActivity>

  XOML文件的默认编辑器是图形化的工作流设计器.如果我想要以XAML的方式查看XOML文件,我们可以右键单击这个文件并选择打开方式,在打开方式对话框中选择XML编辑器即可.

  工作流的项目文件中定义了MSBuild目标,这些目标知道怎样编译XOML文件中的XAML工作流定义. 首先,编译器在临时目录中生成C#源代码,源代码中包含一个叫做CodeSeparation的类,并用partial关键字将其修饰分部类.像之前我们所描述的,C#通过合并两个文件来得到最终的类定义.

《WF编程》系列之14 - 工作流编写方式:结合代码与XAML

  还记得使用纯代码方式创建工作流时,设计器生成的代码吗?工作流编译器生成的临时C#文件和它很像.

  另外,Visual Studio还会自动添加它能找到的任何自定义活动到当前解决方案的工具箱面板中.

  小结

  我们已经学习了一系列编写和生成工作流的方式.现在我们可以使用XOML,然后通过编程或者从命令行工具来编译生成工作流;也可以使用纯代码或者代码分的方式离生成工作流.当工作流执行时,这些方式的运行并结果并没有什么不同.所有的编写方式最终都会在内存中创建对象的一个集合,这些对象包含了父子关系并由工作流Runtime管理它们的执行过程.

  代码最适合用来定义通用且固定的工作流.使用工作流设计器时我们不需要查看设计器生成的代码,也不必去关心设计器如何组织工作流定义.

  基于XAML的工作流定义则带来了一些附加功能.如果把工作流完全定义在XAML中,我们就可以使用工作流激活来避免编译.激活在需要动态地生成很大数量的工作流时很有用.我们仅仅需要传递XML到工作流Runtime中就可以得到一个可运行的工作流实例.

  使用XAML和code‑beside文件结合的方式会把工作流定义在一个XML文件中.如果需要编写自定义工具(比如自定义工作流设计器),那么XAML是最好的选择.XAML可以被工具化,而且我们可以使用各种现有的XML API来编写我们需要的工具.XAML和CLR一样是语言无关的.基于XAML的工作流可以和任何.NET语言等效的工作.如果我们需要手工的调整工作流定义的话,相比基于代码的工作流定义而言,XML格式更容易理解.


相关教程