本主题适用于 Windows Workflow Foundation 4。
此示例演示如何创建在一个 XAML 文档中使用 Windows Presentation Foundation (WPF) 和 Windows Workflow Foundation (WF) 功能的应用程序。为实现此目的,示例使用 Windows Workflow Foundation (WF) 和 XAML 可扩展性。
示例详细信息
ShowWindow.xaml 文件反序列化为一个具有两个字符串变量的 Sequence 活动,这两个变量由序列的 ShowWindow
和 WriteLine
活动操作。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
属性,以便任何数据绑定控件能够访问范围内变量。
此示例中需要注意的最后一个内容是名为 DelegateActivityExtension
的 MarkupExtension。此标记扩展 ProvideValue
的方法将返回一个调用嵌入活动的委托。此活动在一个包含 WPF 数据上下文和任何有效的 x:Name
值的环境中运行。在 GenericInvoke
方法中,可通过一个 SymbolResolver 扩展来将此环境提供给相应的活动。将此扩展添加到 WorkflowInvoker 中,然后在调用标记扩展的委托时,使用后者来调用嵌入的活动。
![]() |
---|
默认设计器不支持 ShowWindow 活动;同样,ShowWindow.Xaml 文件无法在设计器上正确显示。 |
使用此示例
使用 Visual Studio 2010 打开 WPFWFIntegration.sln 解决方案文件。
若要生成解决方案,请按 F6。
若要运行解决方案,请按 F5。
在对话框中键入您的名字和姓氏。
关闭对话框,控制台将回显您的姓名。
![]() |
---|
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\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
|