WPF- en Windows Workflow Foundation-integratie in XAML
Het WPFWFIntegration-voorbeeld laat zien hoe u een toepassing maakt die gebruikmaakt van Windows Presentation Foundation -functies (WPF) en Windows Workflow Foundation (WF) in één XAML-document. Hiervoor maakt het voorbeeld gebruik van De uitbreidbaarheid van Windows Workflow Foundation en XAML.
Voorbeelddetails
Het bestand ShowWindow.xaml wordt gedeserialiseerd in een Sequence activiteit met twee tekenreeksvariabelen die worden gemanipuleerd door de activiteiten van de reeks: ShowWindow
en WriteLine
. De WriteLine activiteit wordt uitgevoerd in het consolevenster met de expressie die aan de Text eigenschap wordt toegewezen. De ShowWindow
activiteit geeft een WPF-venster weer als onderdeel van de uitvoeringslogica. Het DataContext venster bevat de variabelen die in de reeks zijn gedeclareerd. De besturingselementen van het venster dat in de ShowWindow
activiteit is gedeclareerd, gebruiken gegevensbinding om deze variabelen te bewerken. Ten slotte bevat het venster een besturingselement voor knoppen. De Click
gebeurtenis voor de knop wordt verwerkt door een ActivityDelegate benoemde die MarkupExtension
een CloseWindow
activiteit bevat. MarkUpExtension
roept de ingesloten activiteit aan die, als context, objecten aanroept die worden geïdentificeerd door een x:Name
, en het DataContext venster met daarin. CloseWindow.InArgument<Window>
De kan dus worden gebonden met behulp van een expressie die verwijst naar de naam van het venster.
De ShowWindow
activiteit is afgeleid van de AsyncCodeActivity<TResult> klasse om een WPF-venster weer te geven en wordt voltooid wanneer het venster wordt gesloten. De Window
eigenschap is van het type Func<Window>
waarmee het venster op aanvraag kan worden gemaakt voor elke uitvoering van de activiteit. De Window
eigenschap maakt gebruik van een XamlDeferringLoader om dit uitgestelde evaluatiemodel in te schakelen. Hiermee FuncFactoryDeferringLoader
kunt u een XamlReader
vastleggen tijdens de serialisatie en vervolgens lezen tijdens de uitvoering van de activiteit.
Een goed geschreven activiteit blokkeert nooit de scheduler-thread. De ShowWindow
activiteit kan echter niet worden voltooid totdat het venster dat wordt weergegeven, is gesloten. De ShowWindow
activiteit bereikt dit gedrag door afgeleid te zijn van AsyncCodeActivity, de BeginInvoke methode aan te roepen in de BeginExecute methode en het venster modaal weer te geven. De gemachtigde wordt aangeroepen via de WPF SynchronizationContext. De ShowWindow
activiteit wijst de DataContext eigenschap toe aan de Window.DataContext
eigenschap om gegevensgebonden besturingselementen toegang te bieden tot de variabelen binnen het bereik.
Het laatste nuttige punt in dit voorbeeld is een MarkupExtension aangeroepen DelegateActivityExtension
. De ProvideValue
methode van deze markeringsextensie retourneert een gemachtigde die een ingesloten activiteit aanroept. Deze activiteit wordt uitgevoerd in een omgeving die de WPF-gegevenscontext en alle x:Name
waarden in het bereik bevat. In de GenericInvoke
methode wordt deze omgeving via een SymbolResolver extensie aan de activiteit verstrekt. Deze extensie wordt toegevoegd aan een WorkflowInvoker extensie die vervolgens wordt gebruikt om de ingesloten activiteit aan te roepen wanneer de gemachtigde van de markeringsextensie wordt aangeroepen.
Notitie
De standaardontwerper biedt geen ondersteuning voor de activiteit ShowWindow; Als zodanig wordt het bestand ShowWindow.Xaml niet correct weergegeven in de ontwerpfunctie.
De voorbeeldtoepassing uitvoeren
Open met Visual Studio het WPFWFIntegration.sln-oplossingsbestand.
Druk op Ctrl+Shift+B om de oplossing te bouwen.
Druk op F5 om de oplossing uit te voeren.
Typ uw voor- en achternaam in het dialoogvenster.
Sluit het dialoogvenster en de console herhaalt uw naam.