XAML 中的 WPF 和 WF 集成

本主题适用于 Windows Workflow Foundation 4。

此示例演示如何创建在一个 XAML 文档中使用 Windows Presentation Foundation (WPF) 和 Windows Workflow Foundation (WF) 功能的应用程序。为实现此目的,示例使用 Windows Workflow Foundation (WF) 和 XAML 可扩展性。

示例详细信息

ShowWindow.xaml 文件反序列化为一个具有两个字符串变量的 Sequence 活动,这两个变量由序列的 ShowWindowWriteLine 活动操作。WriteLine 活动将它分配给 Text 属性中的表达式输出到控制台窗口。作为其执行逻辑的一部分,ShowWindow 活动显示一个 WPF 窗口。窗口的 DataContext 包含在序列中声明的变量。在 ShowWindow 活动中声明的窗口控件使用数据来操作这些变量。最后,窗口将包含一个按钮控件。该按钮的 Click 事件由一个名为 MarkupExtension 且包含 CloseWindow 活动的 ActivityDelegate 来处理。MarkUpExtension 将调用包含的这个活动,用于提供由 x:Name 和包含窗口的 DataContext 所标识的任意对象(作为上下文)。因此,可以使用一个引用窗口名称的表达式来绑定 CloseWindow.InArgument<Window>

ShowWindow 活动从 AsyncCodeActivity 类派生以显示一个 WPF 窗口,并在该窗口关闭时完成。Window 属性的类型为 Func<Window>,该类型允许在每次执行活动时按需创建窗口。Window 属性使用一个 XamlDeferringLoader 来启用此延迟计算模型。FuncFactoryDeferringLoader 允许在序列化期间捕获一个 XamlReader,然后在活动执行期间读取它。

正确编写的活动从不会阻塞计划程序线程。然而,ShowWindow 活动只有在它显示的窗口关闭之后才能完成。ShowWindow 活动通过以下方式来实现此行为:从 AsyncCodeActivity 派生,在 BeginExecute 方法中调用 BeginInvoke 方法,然后显示有模式窗口。将通过 WPF SynchronizationContext 调用此委托。ShowWindow 活动将 DataContext 属性分配给 Window.DataContext 属性,以便任何数据绑定控件能够访问范围内变量。

此示例中需要注意的最后一个内容是名为 DelegateActivityExtensionMarkupExtension。此标记扩展 ProvideValue 的方法将返回一个调用嵌入活动的委托。此活动在一个包含 WPF 数据上下文和任何有效的 x:Name 值的环境中运行。在 GenericInvoke 方法中,可通过一个 SymbolResolver 扩展来将此环境提供给相应的活动。将此扩展添加到 WorkflowInvoker 中,然后在调用标记扩展的委托时,使用后者来调用嵌入的活动。

Dd807386.note(zh-cn,VS.100).gif注意:
默认设计器不支持 ShowWindow 活动;同样,ShowWindow.Xaml 文件无法在设计器上正确显示。

使用此示例

  1. 使用 Visual Studio 2010 打开 WPFWFIntegration.sln 解决方案文件。

  2. 若要生成解决方案,请按 F6。

  3. 若要运行解决方案,请按 F5。

  4. 在对话框中键入您的名字和姓氏。

  5. 关闭对话框,控制台将回显您的姓名。

Dd807386.Important(zh-cn,VS.100).gif 注意:
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:

<安装驱动器>:\WF_WCF_Samples

如果此目录不存在,请转到 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:

<安装驱动器>:\WF_WCF_Samples\WF\Scenario\WPFWFIntegration