Integracja WPF i Windows Workflow Foundation w języku XAML
W przykładzie WPFWFIntegration pokazano, jak utworzyć aplikację korzystającą z funkcji Windows Presentation Foundation (WPF) i Windows Workflow Foundation (WF) w jednym dokumencie XAML. W tym celu w przykładzie użyto rozszerzeń programu Windows Workflow Foundation i XAML.
Przykładowe szczegóły
Deserializuje plik ShowWindow.xaml w Sequence działaniu z dwiema zmiennymi ciągu, które są manipulowane przez działania sekwencji: ShowWindow
i WriteLine
. Działanie WriteLine zwraca dane wyjściowe do okna konsoli wyrażenie, które przypisuje do Text właściwości. Działanie ShowWindow
wyświetla okno WPF w ramach logiki wykonywania. W DataContext oknie znajdują się zmienne zadeklarowane w sekwencji. Kontrolki okna zadeklarowanego w ShowWindow
działaniu używają powiązania danych do manipulowania tymi zmiennymi. Na koniec okno zawiera kontrolkę przycisku. Zdarzenie Click
przycisku jest obsługiwane przez ActivityDelegate nazwę MarkupExtension
zawierającą CloseWindow
działanie. MarkUpExtension
wywołuje zawarte działanie, które dostarcza jako kontekst, wszystkie obiekty zidentyfikowane przez x:Name
element , a także DataContext okno zawierające. CloseWindow.InArgument<Window>
W związku z tym można powiązać element przy użyciu wyrażenia, które odwołuje się do nazwy okna.
Działanie ShowWindow
pochodzi z AsyncCodeActivity<TResult> klasy, aby wyświetlić okno WPF i kończy się po zamknięciu okna. Właściwość Window
jest typu Func<Window>
, który umożliwia utworzenie okna na żądanie dla każdego wykonania działania. Właściwość Window
używa elementu , XamlDeferringLoader aby włączyć ten odroczony model oceny. Element FuncFactoryDeferringLoader
umożliwia XamlReader
przechwycenie elementu podczas serializacji, a następnie odczyt podczas wykonywania działań.
Dobrze napisane działanie nigdy nie blokuje wątku harmonogramu. Jednak ShowWindow
działanie nie może zakończyć się do momentu zamknięcia wyświetlanego okna. Działanie ShowWindow
osiąga to zachowanie, wyprowadzając metodę z AsyncCodeActivitymetody , wywołując BeginInvoke metodę w BeginExecute metodzie i wyświetlając okno modalnie. Delegat jest wywoływany za pośrednictwem WPF SynchronizationContext. Działanie ShowWindow
przypisuje DataContext właściwość do Window.DataContext
właściwości w celu zapewnienia dowolnego powiązanego danych kontroli dostępu do zmiennych w zakresie.
Ostatnim punktem orientacyjnym w tym przykładzie jest MarkupExtension nazwa .DelegateActivityExtension
Metoda ProvideValue
tego rozszerzenia znaczników zwraca delegata, który wywołuje działanie osadzone. To działanie jest uruchamiane w środowisku, które zawiera kontekst danych WPF i wszystkie x:Name
wartości w zakresie. W metodzie GenericInvoke
to środowisko jest dostarczane do działania za pośrednictwem SymbolResolver rozszerzenia. To rozszerzenie jest dodawane do elementu WorkflowInvoker , który jest następnie używany do wywoływania działania osadzonego przy każdym wywołaniu delegata rozszerzenia znaczników.
Uwaga
Domyślny projektant nie obsługuje działania ShowWindow; w związku z tym plik ShowWindow.Xaml nie jest poprawnie wyświetlany w projektancie.
Uruchamianie aplikacji przykładowej
Za pomocą programu Visual Studio otwórz plik rozwiązania WPFWFIntegration.sln.
Aby skompilować rozwiązanie, naciśnij klawisze Ctrl+Shift+B.
Aby uruchomić rozwiązanie, naciśnij klawisz F5.
Wpisz imię i nazwisko w oknie dialogowym.
Zamknij okno dialogowe i konsola będzie odzwierciedlać Twoją nazwę.