Sdílet prostřednictvím


Integrace WPF a Windows Workflow Foundation v XAML

Ukázka WPFWFIntegration ukazuje, jak vytvořit aplikaci, která používá funkce Windows Presentation Foundation (WPF) a Windows Workflow Foundation (WF) v jednom dokumentu XAML. K tomuto účelu ukázka používá rozšíření Windows Workflow Foundation a XAML.

Ukázkové podrobnosti

Soubor ShowWindow.xaml deserializuje do Sequence aktivity se dvěma řetězcovými proměnnými, které jsou manipulovány aktivitami sekvence: ShowWindow a WriteLine. Aktivita WriteLine vypíše do okna konzoly výraz, který přiřadí vlastnosti Text . Aktivita ShowWindow zobrazí okno WPF jako součást logiky spuštění. Okno DataContext obsahuje proměnné deklarované v sekvenci. Ovládací prvky okna deklarovaného v aktivitě ShowWindow používají datovou vazbu k manipulaci s těmito proměnnými. Nakonec okno obsahuje ovládací prvek tlačítka. Událost Click tlačítka je zpracována ActivityDelegate názvem MarkupExtension , který obsahuje CloseWindow aktivitu. MarkUpExtension vyvolá obsaženou aktivitu, která poskytuje jako kontext všechny objekty identifikované objekty x:Name, a také DataContext obsahující okno. Lze tedy CloseWindow.InArgument<Window> svázat pomocí výrazu, který odkazuje na název okna.

Aktivita ShowWindow je odvozena z AsyncCodeActivity<TResult> třídy k zobrazení okna WPF a dokončení při zavření okna. Vlastnost Window je typu Func<Window> , která umožňuje vytvoření okna na vyžádání pro každé spuštění aktivity. Vlastnost Window používá XamlDeferringLoader k povolení tohoto odloženého zkušebního modelu. XamlReader Umožňuje FuncFactoryDeferringLoader zachytit během serializace a pak číst během provádění aktivity.

Dobře napsaná aktivita nikdy neblokuje vlákno plánovače. Aktivita se však nemůže dokončit, ShowWindow dokud se okno, které se zobrazuje, zavřené. Aktivita ShowWindow dosahuje tohoto chování odvozením , AsyncCodeActivityvolání BeginInvoke metody v BeginExecute metodě a zobrazení okna modálně. Delegát je vyvolán prostřednictvím WPF SynchronizationContext. Aktivita ShowWindow přiřadí DataContext vlastnost Window.DataContext vlastnosti, která poskytuje všechny ovládací prvky vázané na data přístup k proměnným v oboru.

Posledním bodem zájmu v tomto vzorku je MarkupExtension volána DelegateActivityExtension. Metoda ProvideValue tohoto rozšíření značek vrátí delegáta, který vyvolá vloženou aktivitu. Tato aktivita se spouští v prostředí, které zahrnuje kontext dat WPF a všechny x:Name hodnoty v oboru. GenericInvoke V metodě je toto prostředí poskytováno aktivitě prostřednictvím SymbolResolver rozšíření. Toto rozšíření se přidá do objektu WorkflowInvoker , který se pak použije k vyvolání vložené aktivity při každém vyvolání delegáta rozšíření značek.

Poznámka:

Výchozí návrhář nepodporuje aktivitu ShowWindow; Soubor ShowWindow.Xaml se v návrháři nezobrazuje správně.

Spuštění ukázky

  1. V sadě Visual Studio otevřete soubor řešení WPFWFIntegration.sln.

  2. Řešení sestavíte stisknutím kláves Ctrl+Shift+B.

  3. Řešení spustíte stisknutím klávesy F5.

  4. Do dialogového okna zadejte své jméno a příjmení.

  5. Zavřete dialogové okno a konzola ozvěna vaše jméno.