Udostępnij za pośrednictwem


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:Nameelement , 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

  1. Za pomocą programu Visual Studio otwórz plik rozwiązania WPFWFIntegration.sln.

  2. Aby skompilować rozwiązanie, naciśnij klawisze Ctrl+Shift+B.

  3. Aby uruchomić rozwiązanie, naciśnij klawisz F5.

  4. Wpisz imię i nazwisko w oknie dialogowym.

  5. Zamknij okno dialogowe i konsola będzie odzwierciedlać Twoją nazwę.