XAML での WPF と Windows Workflow Foundation の統合
WPFWFIntegration サンプルでは、Windows Presentation Foundation (WPF) と Windows Workflow Foundation (WF) の機能を使用するアプリケーションを 1 つの XAML ドキュメントで作成する方法を示します。 これを実現するために、サンプルでは Windows Workflow Foundation と XAML の機能拡張を使用します。
サンプルの詳細
ShowWindow.xaml ファイルは、シーケンスのアクティビティによって操作される 2 つの文字列変数 Sequence および ShowWindow
を持つ WriteLine
アクティビティに逆シリアル化します。 WriteLine アクティビティは、Text プロパティに割り当てる式をコンソール ウィンドウに出力します。 ShowWindow
アクティビティは、実行ロジックの一部として WPF ウィンドウを表示します。 このウィンドウの DataContext には、シーケンスで宣言された変数が含まれます。 ShowWindow
アクティビティで宣言されたウィンドウのコントロールは、データ バインドを使用してこれらの変数を操作します。 最後に、このウィンドウにはボタン コントロールが含まれます。 このボタンの Click
イベントは、ActivityDelegate アクティビティを含む MarkupExtension
という名前の CloseWindow
によって処理されます。 MarkUpExtension
は、x:Name
によって識別されるオブジェクトおよび格納先ウィンドウの DataContext を、コンテキストとして提供する、含まれているアクティビティを呼び出します。 したがって、CloseWindow.InArgument<Window>
は、ウィンドウの名前を参照する式を使用してバインドできます。
ShowWindow
アクティビティは、WPF ウィンドウを表示するために AsyncCodeActivity<TResult> クラスから派生し、ウィンドウが閉じられるときに完了します。 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 キーを押します。
姓と名をダイアログ ボックスに入力します。
ダイアログ ボックスを閉じると、コンソールに名前がエコーされます。
.NET