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
V sadě Visual Studio otevřete soubor řešení WPFWFIntegration.sln.
Řešení sestavíte stisknutím kláves Ctrl+Shift+B.
Řešení spustíte stisknutím klávesy F5.
Do dialogového okna zadejte své jméno a příjmení.
Zavřete dialogové okno a konzola ozvěna vaše jméno.