XAML 中的 WPF 和 Windows Workflow Foundation 整合
WPFWFIntegration 範例會示範如何在單一 XAML 文件中建立使用 Windows Presentation Foundation (WPF) 和 Windows Workflow Foundation (WF) 功能的應用程式。 為了完成這項作業,此範例會使用 Windows Workflow Foundation 和 XAML 擴充性。
範例詳細資料
ShowWindow.xaml 檔案會還原序列化為 Sequence 活動,其包含的兩個字串變數是由序列的活動所操作:ShowWindow
和 WriteLine
。 WriteLine 活動會將指派給 Text 屬性的運算式輸出到主控台視窗。 ShowWindow
活動的執行邏輯中會顯示 WPF 視窗。 視窗的 DataContext 包含序列中宣告的變數。 ShowWindow
活動中宣告的視窗控制項使用資料繫結來操作這些變數。 最後,視窗包含按鈕控制項。 按鈕的 Click
事件是由名為 ActivityDelegate 的 MarkupExtension
處理,其中包含 CloseWindow
活動。 MarkUpExtension
會叫用所包含的活動,以內容形式提供 x:Name
所識別的任何物件,以及包含視窗的 DataContext。 因此,CloseWindow.InArgument<Window>
可使用參考視窗名稱的運算式來繫結。
ShowWindow
活動衍生自 AsyncCodeActivity<TResult> 類別以顯示 WPF 視窗,並於視窗關閉時完成。 Window
屬性是 Func<Window>
類型,允許視每次活動執行的需要來建立視窗。 Window
屬性使用 XamlDeferringLoader,以啟用此延遲的評估模型。 FuncFactoryDeferringLoader
允許於序列化期間擷取 XamlReader
,然後於活動執行期間讀取它。
良好撰寫的活動絕不會封鎖排程器執行緒。 不過,ShowWindow
活動在顯示此活動的視窗關閉之前無法完成。 ShowWindow
活動達成此行為的方式是衍生自 AsyncCodeActivity、呼叫 BeginInvoke 方法中的 BeginExecute 方法,以及強制顯示視窗。 接著透過 WPF SynchronizationContext 叫用委派。 ShowWindow
活動會將 DataContext 屬性指派給 Window.DataContext
屬性,讓任何資料繫結控制項能夠存取範圍中變數。
在這個範例中值得注意的最後一點是名為 MarkupExtension 的 DelegateActivityExtension
。 這個標記延伸的 ProvideValue
方法會傳回可叫用內嵌活動的委派。 此活動會在包含 WPF 資料內容和範圍中任何 x:Name
值的環境中執行。 在 GenericInvoke
方法中,這個環境是透過 SymbolResolver 延伸提供給活動。 此延伸會加入至 WorkflowInvoker,每當叫用標記延伸的委派時,便會用它來叫用內嵌的活動。
注意
預設設計工具不支援 ShowWindow 活動,因此在設計工具中不會正確顯示 ShowWindow.Xaml 檔案。
執行範例
使用 Visual Studio 來開啟 WPFWFIntegration.sln 解決方案檔。
若要建置解決方案,請按 Ctrl+Shift+B。
若要執行解決方案,請按 F5。
在對話方塊中輸入您的名字和姓氏。
關閉對話方塊,然後主控台會回應您的姓名。