Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im WPFWFIntegration-Beispiel wird veranschaulicht, wie Sie eine Anwendung erstellen, die Windows Presentation Foundation (WPF) und Windows Workflow Foundation (WF)-Features in einem einzelnen XAML-Dokument verwendet. Dazu verwendet das Beispiel die Erweiterbarkeit von Windows Workflow Foundation und XAML.
Beispieldetails
Die Datei ShowWindow.xaml wird in eine Sequence Aktivität mit zwei Zeichenfolgenvariablen deserialisiert, die von den Aktivitäten der Sequenz verändert werden: ShowWindow
und WriteLine
. Die WriteLine Aktivität gibt im Konsolenfenster den Ausdruck aus, den sie der Text Eigenschaft zuweist. Die ShowWindow
Aktivität zeigt ein WPF-Fenster als Teil der Ausführungslogik an. Das DataContext Fenster enthält die variablen, die in der Sequenz deklariert sind. Die Steuerelemente des fensters, das in der ShowWindow
Aktivität deklariert ist, verwenden die Datenbindung, um diese Variablen zu bearbeiten. Schließlich enthält das Fenster ein Schaltflächensteuerelement. Das Click
-Ereignis für die Schaltfläche wird durch einen ActivityDelegate behandelt, der als MarkupExtension
bezeichnet wird und eine CloseWindow
-Aktivität enthält. MarkUpExtension
ruft die enthaltene Aktivität auf, die als Kontext alle Objekte bereitstellt, die von einem x:Name
identifiziert werden, sowie das DataContext des enthaltenden Fensters. Daher kann die CloseWindow.InArgument<Window>
Bindung mithilfe eines Ausdrucks erfolgen, der auf den Namen des Fensters verweist.
Die ShowWindow
Aktivität wird von der AsyncCodeActivity<TResult> Klasse abgeleitet, um ein WPF-Fenster anzuzeigen und abzuschließen, wenn das Fenster geschlossen wird. Die Window
Eigenschaft ist vom Typ Func<Window>
, mit dem das Fenster bei Bedarf für jede Ausführung der Aktivität erstellt werden kann. Die Window
-Eigenschaft verwendet ein XamlDeferringLoader, um dieses Modell der verzögerten Auswertung zu ermöglichen. Das FuncFactoryDeferringLoader
ermöglicht es, ein XamlReader
während der Serialisierung zu erfassen und dann während der Aktivitätsausführung zu lesen.
Eine gut geschriebene Aktivität blockiert niemals den Scheduler-Thread. Die ShowWindow
Aktivität kann jedoch erst abgeschlossen werden, wenn das angezeigte Fenster geschlossen ist. Die ShowWindow
-Aktivität erreicht dieses Verhalten, indem sie von AsyncCodeActivity abgeleitet wird, die BeginInvoke-Methode in der BeginExecute-Methode aufruft und das Fenster modal anzeigt. Der Delegat wird durch den SynchronizationContext von WPF aufgerufen. Die ShowWindow
-Aktivität weist der DataContext-Eigenschaft die Window.DataContext
-Eigenschaft zu, um datengebundenen Steuerelementezugriff auf die im Gültigkeitsbereich befindlichen Variablen zu gewähren.
Der letzte interessante Punkt in diesem Beispiel ist ein MarkupExtension, genannt DelegateActivityExtension
. Die ProvideValue
Methode dieser Markuperweiterung gibt einen Delegaten zurück, der eine eingebettete Aktivität aufruft. Diese Aktivität wird in einer Umgebung ausgeführt, die den WPF-Datenkontext und alle x:Name
Werte im Bereich enthält. In der GenericInvoke
Methode wird diese Umgebung der Aktivität über eine SymbolResolver Erweiterung bereitgestellt. Diese Erweiterung wird einem WorkflowInvoker hinzugefügt, mit dem die eingebettete Aktivität immer dann aufgerufen wird, wenn der Delegat der Markuperweiterung aufgerufen wird.
Hinweis
Der Standard-Designer unterstützt die ShowWindow-Aktivität nicht; die Datei "ShowWindow.Xaml" wird im Designer nicht ordnungsgemäß angezeigt.
Beispiel ausführen
Öffnen Sie mit Visual Studio die WPFWFIntegration.sln Projektmappendatei.
Um die Lösung zu erstellen, drücken Sie Strg+Umschalt+B.
Drücken Sie F5, um die Lösung auszuführen.
Geben Sie ihren Vor- und Nachnamen in das Dialogfeld ein.
Schließen Sie das Dialogfeld, und die Konsole gibt Ihren Namen wieder.