Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 dosažení tohoto účelu ukázka používá Windows Workflow Foundation a rozšiřitelnost 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 komponentou ActivityDelegate s názvem MarkupExtension, která obsahuje CloseWindow činnost.
MarkUpExtension vyvolá obsaženou aktivitu, která jako kontext poskytuje všechny objekty identifikované x:Name, a také DataContext okna, které jej obsahuje. Lze tedy CloseWindow.InArgument<Window> svázat pomocí výrazu, který odkazuje na název okna.
Aktivita ShowWindow je odvozena z třídy AsyncCodeActivity<TResult> pro zobrazení okna WPF a je dokončena, když je okno zavřeno. 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.
FuncFactoryDeferringLoader umožňuje během serializace zachytit XamlReader a poté jej čí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, nezavře. Aktivita ShowWindow dosahuje tohoto chování tím, že je odvozena z AsyncCodeActivity, volá metodu BeginInvoke v metodě BeginExecute a zobrazuje okno modálně. Delegát je vyvolán prostřednictvím WPF SynchronizationContext. Aktivita ShowWindow přiřadí vlastnost DataContext k vlastnosti Window.DataContext, aby poskytla všem ovládacím prvkům vázaným na data přístup k proměnným v oboru.
Posledním bodem zájmu v tomto vzorku je MarkupExtension nazývaný DelegateActivityExtension. Metoda ProvideValue tohoto rozšíření značkovacího skriptu 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 rámci určeného rozsahu. V metodě GenericInvoke je toto prostředí poskytováno aktivitě prostřednictvím rozšíření SymbolResolver. Toto rozšíření je přidáno k WorkflowInvoker, který se poté použije k vyvolání vložené aktivity při každém vyvolání delegáta značkovacího rozšíření.
Poznámka:
Výchozí návrhář nepodporuje aktivitu ShowWindow; Soubor ShowWindow.Xaml se v návrháři nezobrazuje správně.
Spusťte ukázku
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 konzole vypíše vaše jméno.