共用方式為


XAML 中的 WPF 和 Windows Workflow Foundation 整合

WPFWFIntegration 範例示範如何在單一 XAML 檔中建立使用 Windows Presentation Foundation (WPF) 和 Windows Workflow Foundation (WF) 功能的應用程式。 為了達成此目的,此範例會使用 Windows Workflow Foundation 和 XAML 擴充性。

範例資料詳情

ShowWindow.xaml 檔案會還原序列化為 Sequence 活動,其中包含的兩個字串變數會由該序列的活動 ShowWindowWriteLine 進行操作。 WriteLine 活動會將指派給 Text 屬性的運算式輸出至主控台視窗。 活動會顯示 WPF 視窗 ShowWindow,作為其執行邏輯的一部分。 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 屬性,以提供數據綁定控件對範圍內變數的存取。

這個範例的最後一個興趣點是稱為 MarkupExtensionDelegateActivityExtensionProvideValue 標記延伸的這個方法會返回一個用來執行內嵌活動的委派。 此活動會在包含 WPF 資料內容和範圍中任何 x:Name 值的環境中執行。 在 GenericInvoke 方法中,這個環境會透過 SymbolResolver 擴展提供給活動。 這個延伸模組會加入至 WorkflowInvoker,然後用來在標記延伸的委派被叫用時,呼叫內嵌活動。

備註

默認設計工具不支援 ShowWindow 活動;因此,ShowWindow.Xaml 檔案不會在設計工具中正確顯示。

執行範例程式

  1. 使用 Visual Studio 開啟WPFWFIntegration.sln方案檔。

  2. 若要建置方案,請按 Ctrl+Shift+B

  3. 若要執行解決方案,請按 F5

  4. 在對話框中輸入您的名字和姓氏。

  5. 關閉對話框,主控台會回應您的名稱。