共用方式為


XAML 中的 WPF 和 Windows Workflow Foundation 整合

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

範例詳細資料

ShowWindow.xaml 檔案會還原序列化為 Sequence 活動,其包含的兩個字串變數是由序列的活動所操作:ShowWindowWriteLineWriteLine 活動會將指派給 Text 屬性的運算式輸出到主控台視窗。 ShowWindow 活動的執行邏輯中會顯示 WPF 視窗。 視窗的 DataContext 包含序列中宣告的變數。 ShowWindow 活動中宣告的視窗控制項使用資料繫結來操作這些變數。 最後,視窗包含按鈕控制項。 按鈕的 Click 事件是由名為 ActivityDelegateMarkupExtension 處理,其中包含 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 屬性,讓任何資料繫結控制項能夠存取範圍中變數。

在這個範例中值得注意的最後一點是名為 MarkupExtensionDelegateActivityExtension。 這個標記延伸的 ProvideValue 方法會傳回可叫用內嵌活動的委派。 此活動會在包含 WPF 資料內容和範圍中任何 x:Name 值的環境中執行。 在 GenericInvoke 方法中,這個環境是透過 SymbolResolver 延伸提供給活動。 此延伸會加入至 WorkflowInvoker,每當叫用標記延伸的委派時,便會用它來叫用內嵌的活動。

注意

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

執行範例

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

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

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

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

  5. 關閉對話方塊,然後主控台會回應您的姓名。