详解WPF中XAML动态工作流的创建

日期: 2009-12-22 来源:TechTarget中国 英文

    我们用.xaml,.cs 或.vb文件建立了工作流。这些文件都会被编译成类后包含在项目程序集中,然后被工作流运行时运行。虽然看上去好像文件的格式无关紧要,其实.xaml文件相比用C#或VB写工作流有独特的优势。

  ·工作流设计器只能基于.xaml文件,所以用C#或VB写的工作流没有设计器支持。

  · XAML可以在不被编译进程序集的情况下动态的被加载和运行。

  打开解决方案

  你可以选择继续使用上一个练习完成后的解决方案,或照一下步骤来开始本练习。

  ·从Start | All Programs | Microsoft Visual Studio 2010 启动Microsoft Visual Studio 2010

  · 打开位于%TrainingKitInstallFolder%Labs IntroToWFEx4-CodeActivityBegin里的初始方案,作为本练习的开始。

  ·按CTRL+SHIFT+B编译整个方案

  1.修改SayHello.xaml文件属性

  在这一步你将修改HelloWorkflow 程序来加载和运行SayHello.xaml文件。然后我们把SayHello.xaml里的text改掉,并在下一次运行程序时观察输出信息的改变。

  (1)我们先要让Visual Studio把SayHello.xaml当作已部署的内容来对待,而不是当成代码。方法如下

  ·在Solution Explorer选择SayHello.xaml,做以下设置

  ·Build Action: Content

  ·Copy To Output Directory: Copy Always

  ·把 Custom Tool 设为 空

Change the properties of SayHello.xaml to treat it as content

    Change the properties of SayHello.xaml to treat it as content

  2.修改Main()来加载SayHello.xaml文件

  之前我们的工作流是被编译成一个类的。如果我们要直接从.xaml文件调用工作流,我们必须用ActivityXamlServices 把.xaml文件读进内存并建立一个让WorkflowInvoker可以调用的活动实例。要记住任何我们的.xaml文件引用的程序集在工作流被调用时一定要存在并能使用。

  3.把下列命名空间加入program.cs或Module1.vs文件

以下是引用片段:
  using System.Activities.XamlIntegration;
  Visual Basic
  Imports System.Activities.XamlIntegration

  修改program.cs或Module1.vb去调用ActivityXamlServices,并添加Console.ReadKey的调用,这样能更容易的观察我们的程序在Windows Explorer中的运行。

以下是引用片段:
  static void Main(string[] args)
  {
  WorkflowInvoker.Invoke(ActivityXamlServices.Load(“SayHello.xaml”));
  Console.ReadKey(false);
  }
  (Code Snippet – Introduction to WF4 Lab – ActivityXamlServices VB)
  Visual Basic
  Shared Sub Main()
  WorkflowInvoker.Invoke(ActivityXamlServices.Load(“SayHello.xaml”))
  Console.ReadKey(False)
  End Sub

  4.验证

  在这次验证过程中,你会先运行HelloWorld程序,然后修改在binDebug文件夹下已经部署了的SayHello.xaml文件, 之后我们来看新的文字是否出现在控制台里。

  (1)按CTRL+F5在非调试模式下运行工作流。你的程序应该在控制台里运行,而且输出“Hello Workflow 4”。

  (2)在BinDebug目录下找到SayHello.xaml

Locate the SayHello.xaml file in the project’s BinDebug directory

    Locate the SayHello.xaml file in the project’s BinDebug directory

  (3)按SayHello.xaml右键菜单,选择Edit在Notepad中打开文件。

Right click and select Edit

Right click and select Edit

  (4)在Notepad中把WriteLine活动的Text属性的值改为“Hello Workflow 4 XAML”,保存并关闭文件。

Change the Text property in Notepad

Change the Text property in Notepad

  (5)从Windows Explorer运行HelloWorkflow.exe。 现在它应该显示”Hello Workflow4 from XAML”. 随便按个键退出。

HelloWorkflow.exe showing a new message from the .xaml file

HelloWorkflow.exe showing a new message from the .xaml file

  (6)回到Visual Studio, 把之前在SayHello.xaml上改过的设置恢复成初始状态, 这样可以进行之后的练习

  ·Build Action: XamlAppDef

  ·Copy to Output Directory: Do not copy

  ·Custom Tool: MSBuild:Compile

HelloWorkflow.exe showing a new message from the .xaml file

  Restore SayHello.xaml to the default properties for .xaml files

  注意!

  在Visual Studio 2010 Beta 2 里有可能找不到XamlAppDef Build Action。 如果你遇到这种情况,右键击中HelloWorkflow 项目,选择Add/New Item, 然后选Workflow/Activity来添加Activity.xaml。之后XamlAppDef Build Action 就会出现了。

  在Solution Explorer里,选中SayHello.xaml并把它的build action 设为XamlAppDef,之后你可以从项目中删掉Activity.xaml。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • API创建影响生产的六个方面

    在API创建方面,简单性至关重要。AnyPresence的Vivek Gupta讨论了开发者可以从6个方面处理好API的创建问题,从而加速API生产。

  • 微服务:是谁看上了这块小鲜肉

    微服务——IT领域的又一个新名词。但它是否能如同OpenStack,如同Docker那样成为众人疯抢的“肥肉”呢?从目前来看,可能还没有到达疯抢的地步,但也不乏支持者。

  • 应用开发工具帮助报社与时俱进

    新闻媒体业务要一直向顶尖技术看齐,如果他们想要打败竞争对手,成为社会的脉搏的话。心态一直是最重要的,无论是在收集和报道新闻方面,还是在内部运营方法。

  • 为移动工作者赋权构建API及工作流的步骤

    主管不能简单地把移动工作者认为是不坐在一起的人。相反,赋权要从评估员工需求开始,因为接下来关键的速度爆发当然就必须来自于移动设备和宽带服务的利用。