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é.
Remarque : |
---|
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
À l'aide de Visual Studio 2010, ouvrez le fichier solution WPFWFIntegration.sln.
Pour générer la solution, appuyez sur F6.
Pour exécuter la solution, appuyez sur F5.
Tapez vos prénom et nom dans la boîte de dialogue.
Fermez la boîte de dialogue et la console répète votre nom.
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
|