WF 支援兩種定義方式:
wfc.exe 編譯為組件以兼顧效能。XAML (XML Application Markup Language) 同樣用於 WPF。WF 習慣使用 .xoml 副檔名區分工作流定義。
<SequentialWorkflowActivity x:Name="Workflow1"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/workflow">
...
</SequentialWorkflowActivity>
xmlns:x:XAML 語言命名空間 (慣用 x: 前綴)。xmlns (預設):WF 工作流命名空間,元素名稱直接對應活動類型 (如 CodeActivity、IfElseActivity)。使用 clr-namespace 與 assembly 關鍵字:
xmlns:sys="clr-namespace:System;assembly=System"
自訂活動需在組件加上 [assembly: XmlnsDefinition("urn:MyXmlNamespace", "MyNamespace")],XAML 中再以 xmlns:custom="urn:MyXmlNamespace" 參考。
Workflow1.xml (設定「複製到輸出目錄」為「如果較新則複製」)。DelayActivity 的循序工作流)。XmlTextReader 載入:XmlTextReader rdr = new XmlTextReader("Workflow1.xml");
WorkflowInstance instance = workflowRuntime.CreateWorkflow(rdr);
instance.Start();



限制: 直接執行 XAML 無法傳遞初始化參數,亦無法內嵌複雜 C# 邏輯 (建議使用自訂組件或程式碼後置)。
Workflow1.xoml,根元素加上 x:Class="Workflow1"。"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\Wfc.exe" Workflow1.xomlWorkflow1.dll,專案加入參考。
Dictionary<string, object> parms = new Dictionary<string, object>();
parms.Add("PostalCode", args.Length > 0 ? args[0] : "");
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(Workflow1), parms);
instance.Start();



慣例命名 Workflow1.xoml.cs,包含部分類別實作邏輯 (如 EvaluatePostalCode、PostalCodeValid)。wfc.exe 可同時編譯 .xoml 與 .xoml.cs。
XmlnsDefLib,加入 PrintMessageActivity (繼承 Activity、含 Message 相依屬性、覆寫 Execute)。[assembly: XmlnsDefinition("urn:PrintMessage", "XmlnsDefLib")]。xmlns:custom="urn:PrintMessage",使用 <custom:PrintMessageActivity Message="Hello!" />。wfc.exe 並指定參考組件:Wfc.exe Workflow1.xoml /r:..\XmlnsDefLib\bin\Debug\XmlnsDefLib.dllWorkflow1.dll 執行。



宣告式工作流讓業務流程定義與程式碼分離,支援動態修改與部署。本章涵蓋 XAML 命名空間規則、直接載入與編譯執行兩種模式、參數傳遞、程式碼後置、自訂活動整合與 XmlnsDefinition 使用。視專案需求選擇適當模式:頻繁變動的流程適合純 XAML;追求效能或需強型別參數則編譯為組件。