Partager via


Intégration de WPF et WF en XAML

Cette rubrique s'applique à Windows Workflow Foundation 4.

Cet exemple montre comment créer une application qui utilise les fonctionnalités Windows Presentation Foundation (WPF) et Windows Workflow Foundation (WF) dans un document XAML unique. Pour ce faire, l'exemple utilise Windows Workflow Foundation (WF) et l'extensibilité XAML.

Détails de l'exemple

Le fichier ShowWindow.xaml désérialise dans une activité Sequence avec deux variables String manipulées par les activités de la séquence : ShowWindow et WriteLine. L'activité WriteLine renvoie dans la fenêtre de console l'expression qu'elle assigne à la propriété Text. L'activité ShowWindow affiche une fenêtre WPF dans le cadre de sa logique d'exécution. Le DataContext de la fenêtre inclut les variables déclarées dans la séquence. Les contrôles de la fenêtre déclarée dans l'activité ShowWindow utilisent la liaison de données pour manipuler ces variables. Enfin, la fenêtre contient un contrôle bouton. L'événement Click pour le bouton est géré par un ActivityDelegate nommé MarkupExtension qui contient une activité CloseWindow. MarkUpExtension appelle l'activité contenue qui fournit, comme contexte, tous les objets identifiés par un x:Name ainsi que le DataContext de la fenêtre conteneur. Ainsi, le CloseWindow.InArgument<Window> peut être lié à l'aide d'une expression qui référence le nom de la fenêtre.

L'activité ShowWindow dérive de la classe AsyncCodeActivity pour afficher une fenêtre WPF et se termine lorsque la fenêtre est fermée. La propriété Window est de type Func<Window> qui autorise la création de la fenêtre à la demande pour chaque exécution de l'activité. La propriété Window utilise un XamlDeferringLoader pour activer ce modèle d'évaluation différé. Le FuncFactoryDeferringLoader permet la capture d'un XamlReader pendant la sérialisation, puis sa lecture pendant l'exécution de l'activité.

Une activité bien écrite ne bloque jamais le thread de planificateur. Toutefois, l'activité ShowWindow ne peut pas se terminer tant que la fenêtre qu'elle affiche n'est pas fermée. L'activité ShowWindow parvient à ce comportement en dérivant de AsyncCodeActivity, en appelant la méthode BeginInvoke dans la méthode BeginExecute et en affichant la fenêtre de façon modale. Le délégué est appelé via le SynchronizationContext WPF. L'activité ShowWindow assigne la propriété DataContext à la propriété Window.DataContext pour fournir un accès des contrôles liés aux données aux variables dans la portée.

Le dernier point intéressant dans cet exemple est un MarkupExtension appelé DelegateActivityExtension. La méthode ProvideValue de cette extension de balisage retourne un délégué qui appelle une activité incorporée. Cette activité s'exécute dans un environnement qui inclut le contexte des données WPF et toutes les valeurs x:Name dans la portée. Dans la méthode GenericInvoke, cet environnement est fourni à l'activité via une extension SymbolResolver. Cette extension est ajoutée à un WorkflowInvoker utilisé ensuite pour appeler l'activité incorporée chaque fois que le délégué de l'extension de balisage est appelé.

Dd807386.note(fr-fr,VS.100).gifRemarque :
Le concepteur par défaut ne prend pas en charge l'activité ShowWindow ; ainsi, le fichier ShowWindow.Xaml ne s'affiche pas correctement dans le concepteur.

Pour utiliser cet exemple

  1. À l'aide de Visual Studio 2010, ouvrez le fichier solution WPFWFIntegration.sln.

  2. Pour générer la solution, appuyez sur F6.

  3. Pour exécuter la solution, appuyez sur F5.

  4. Tapez vos prénom et nom dans la boîte de dialogue.

  5. Fermez la boîte de dialogue et la console répète votre nom.

Dd807386.Important(fr-fr,VS.100).gif Remarque :
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.

<LecteurInstall>:\WF_WCF_Samples

Si ce répertoire n'existe pas, rendez-vous sur la page (éventuellement en anglais) des exemples Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) pour .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.

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