次の方法で共有


XAML での WPF と WF の統合

このトピックの内容は、Windows Workflow Foundation 4 に該当します。

このサンプルでは、Windows Presentation Foundation (WPF) および Windows Workflow Foundation (WF) 機能を使用するアプリケーションを 1 つの XAML ドキュメントで作成する方法を示します。これを実現するために、サンプルでは Windows Workflow Foundation (WF) および XAML 機能拡張を使用します。

サンプルの詳細

ShowWindow.xaml ファイルは、シーケンスのアクティビティによって操作される 2 つの文字列変数 ShowWindow および WriteLine を持つ Sequence アクティビティに逆シリアル化します。WriteLine アクティビティは、Text プロパティに割り当てる式をコンソール ウィンドウに出力します。ShowWindow アクティビティは、実行ロジックの一部として WPF ウィンドウを表示します。このウィンドウの DataContext には、シーケンスで宣言された変数が含まれます。ShowWindow アクティビティで宣言されたウィンドウのコントロールは、データ バインドを使用してこれらの変数を操作します。最後に、このウィンドウにはボタン コントロールが含まれます。このボタンの Click イベントは、CloseWindow アクティビティを含む MarkupExtension という名前の ActivityDelegate によって処理されます。MarkUpExtension は、x:Name によって識別されるオブジェクトおよび格納先ウィンドウの DataContext をコンテキストとして提供する、格納されているアクティビティを呼び出します。したがって、CloseWindow.InArgument<Window> は、ウィンドウの名前を参照する式を使用してバインドできます。

ShowWindow アクティビティは、WPF ウィンドウを表示するために AsyncCodeActivity クラスから派生し、ウィンドウが閉じられるときに完了します。Window プロパティは、アクティビティの実行ごとにウィンドウを必要に応じて作成できるようにする Func<Window> 型です。Window プロパティは、XamlDeferringLoader を使用してこの遅延評価モデルを有効にします。FuncFactoryDeferringLoader を使用すると、XamlReader をシリアル化中にキャプチャしてアクティビティの実行中に読み取ることができます。

アクティビティが適切に記述されていれば、スケジューラ スレッドはブロックされません。ただし、ShowWindow アクティビティは、表示しているウィンドウが閉じられるまで完了できません。ShowWindow アクティビティは、AsyncCodeActivity から派生して BeginInvoke メソッドを BeginExecute メソッドで呼び出し、ウィンドウをモーダルで表示することによってこの動作を実現します。デリゲートは、WPF SynchronizationContext を介して呼び出されます。ShowWindow アクティビティは、DataContext プロパティを Window.DataContext プロパティに割り当てて、データ バインド コントロールがスコープ内の変数にアクセスできるようにします。

このサンプルにおける最後の重要な点は、DelegateActivityExtension という MarkupExtension です。このマークアップ拡張機能の ProvideValue メソッドは、埋め込みアクティビティを呼び出すデリゲートを返します。このアクティビティは、WPF データ コンテキストおよびスコープ内の x:Name 値を含む環境で実行されます。GenericInvoke メソッドで、この環境は SymbolResolver 拡張機能を介してアクティビティに提供されます。この拡張機能は、マークアップ拡張機能のデリゲートが呼び出されるたびに埋め込みアクティビティを呼び出すために使用される WorkflowInvoker に追加されます。

Dd807386.note(ja-jp,VS.100).gif注 :
既定のデザイナーでは ShowWindow アクティビティはサポートされません。したがって、ShowWindow.Xaml ファイルはデザイナーでは正しく表示されません。

このサンプルを使用するには

  1. Visual Studio 2010 を使用して、WPFWFIntegration.sln ソリューション ファイルを開きます。

  2. ソリューションをビルドするには、F6 キーを押します。

  3. ソリューションを実行するには、F5 キーを押します。

  4. 姓と名をダイアログ ボックスに入力します。

  5. ダイアログ ボックスを閉じると、コンソールに名前がエコーされます。

Dd807386.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。

<InstallDrive>:\WF_WCF_Samples\WF\Scenario\WPFWFIntegration