Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
WPFWFIntegration-exemplet visar hur du skapar ett program som använder funktionerna Windows Presentation Foundation (WPF) och Windows Workflow Foundation (WF) i ett enda XAML-dokument. För att åstadkomma detta använder exemplet Windows Workflow Foundation och XAML-utökningsbarhet.
Exempelinformation
Filen ShowWindow.xaml deserialiserar till en Sequence aktivitet med två strängvariabler som manipuleras av sekvensens aktiviteter: ShowWindow och WriteLine. Aktiviteten WriteLine skriver ut det uttryck som den tilldelar egenskapen Text till konsolfönstret. Aktiviteten ShowWindow visar ett WPF-fönster som en del av dess körningslogik. I DataContext fönstret ingår variablerna som deklarerats i sekvensen. Kontrollerna i fönstret som deklareras i ShowWindow aktiviteten använder databindning för att manipulera dessa variabler. Slutligen innehåller fönstret en knappkontroll. Händelsen Click för knappen hanteras av en ActivityDelegate som heter MarkupExtension och innehåller en CloseWindow aktivitet.
MarkUpExtension anropar den inneslutna aktiviteten som tillhandahåller, som kontext, alla objekt som identifieras av en x:Name, samt DataContext för det innehållande fönstret. Det innebär att CloseWindow.InArgument<Window> kan bindas med ett uttryck som refererar till fönstrets namn.
Aktiviteten ShowWindow härleds från AsyncCodeActivity<TResult> klassen för att visa ett WPF-fönster och slutförs när fönstret stängs. Egenskapen Window är av den typ Func<Window> som gör att fönstret kan skapas på begäran för varje körning av aktiviteten. Egenskapen Window använder en XamlDeferringLoader för att aktivera den här uppskjutna utvärderingsmodellen.
FuncFactoryDeferringLoader Tillåter att en XamlReader registreras under serialiseringen och sedan läsas under aktivitetskörningen.
En välskriven aktivitet blockerar aldrig schemaläggartråden. Aktiviteten kan dock ShowWindow inte slutföras förrän fönstret som visas är stängt. Aktiviteten ShowWindow uppnår det här beteendet genom att härleda från AsyncCodeActivity, genom att anropa metoden BeginInvoke inom metoden BeginExecute och visa fönstret modalt. Ombudet anropas via WPF SynchronizationContext. Aktiviteten ShowWindow tilldelar egenskapen DataContext till egenskapen Window.DataContext och ger därmed databundna kontroller åtkomst till variablerna inom omfånget.
Den sista intressanta punkten i det här exemplet är en MarkupExtension som heter DelegateActivityExtension. Metoden ProvideValue i denna markeringstillägg returnerar en delegerad som anropar en inbäddad aktivitet. Den här aktiviteten körs i en miljö som innehåller WPF-datakontexten och eventuella x:Name värden i omfånget. I denna GenericInvoke-metod tillhandahålls den här miljön till aktiviteten via ett SymbolResolver-tillägg. Det här tillägget läggs till i en WorkflowInvoker som sedan används för att anropa den inbäddade aktiviteten när delegeringen för markup-tillägget anropas.
Anmärkning
Standarddesignern stöder inte ShowWindow-aktiviteten. Därför visas inte Filen ShowWindow.Xaml korrekt i designern.
Kör det här exemplet
Använd Visual Studio och öppna WPFWFIntegration.sln lösningsfilen.
Tryck på Ctrl+Skift+B för att skapa lösningen.
Tryck på F5 för att köra lösningen.
Skriv ditt för- och efternamn i dialogrutan.
Stäng dialogrutan och konsolen ekar ditt namn.