WPF- und WF-Integration in XAML
Dieses Thema gilt für Windows Workflow Foundation 4.
Dieses Beispiel veranschaulicht die Erstellung einer Anwendung, die Windows Presentation Foundation (WPF)-Funktionen und Windows Workflow Foundation (WF)-Funktionen in einem einzigen XAML-Dokument verwendet. Hierfür wird in dem Beispiel Windows Workflow Foundation (WF) und XAML-Erweiterbarkeit verwendet.
Beispieldetails
Die Datei ShowWindow.xaml führt eine Deserialisierung in eine Sequence-Aktivität mit zwei Zeichenfolgenvariablen durch, die von den Aktivitäten der Sequenz bearbeitet 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 seiner Ausführungslogik an. Der DataContext des Fensters schließt die in der Sequenz deklarierten Variablen ein. Die Steuerelemente des Fensters, die in der ShowWindow
-Aktivität deklariert wurden, bearbeiten diese Variablen mithilfe der Datenbindung. Das Fenster enthält außerdem ein Schaltflächensteuerelement. Das Click
-Ereignis für die Schaltfläche wird von einem ActivityDelegate mit dem Namen MarkupExtension
behandelt, der eine CloseWindow
-Aktivität enthält. MarkUpExtension
ruft die enthaltene Aktivität auf, die als Kontext alle durch einen x:Name
identifizierten Objekte bereitstellt, ebenso wie den DataContext des enthaltenden Fensters. Das CloseWindow.InArgument<Window>
kann daher mit einem Ausdruck gebunden werden, der einen Verweis auf den Namen des Fensters enthält.
Die ShowWindow
-Aktivität leitet sich von der AsyncCodeActivity-Klasse ab, um ein WPF-Fenster anzuzeigen und wird abgeschlossen, wenn das Fenster geschlossen wird. Die Window
-Eigenschaft weist den Typ Func<Window>
auf, durch den das Fenster bei jeder Ausführung der Aktivität bei Bedarf erstellt werden kann. Die Window
-Eigenschaft verwendet einen XamlDeferringLoader zum Aktivieren dieses verzögerten Auswertungsmodells. Der FuncFactoryDeferringLoader
ermöglicht, dass ein XamlReader
während der Serialisierung erfasst und während der Ausführung der Aktivität gelesen wird.
Eine gut geschriebene Aktivität blockiert nie den Planerthread. Die ShowWindow
-Aktivität kann jedoch erst dann abgeschlossen werden, wenn das Fenster, das sie anzeigt, geschlossen wird. Die ShowWindow
-Aktivität erzielt dieses Verhalten, indem sie von AsyncCodeActivity ableitet, 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 Window.DataContext
-Eigenschaft die DataContext-Eigenschaft zu, um datengebundenen Steuerelementezugriff auf die im Gültigkeitsbereich befindlichen Variablen zu gewähren.
Der letzte relevante Punkt in diesem Beispiel ist eine MarkupExtension mit dem Namen 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 einschließt. In der GenericInvoke
-Methode wird diese Umgebung der Aktivität durch 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 Standarddesigner unterstützt die ShowWindow-Aktivität nicht. Die Datei ShowWindow.Xaml wird daher nicht ordnungsgemäß im Designer angezeigt. |
So verwenden Sie dieses Beispiel
Öffnen Sie mit Visual Studio 2010 die WPFWFIntegration.sln-Projektmappendatei.
Drücken Sie F6, um die Projektmappe zu erstellen.
Drücken Sie F5, um die Projektmappe auszuführen.
Geben Sie im Dialogfeld Ihren Vor- und Nachnamen ein.
Schließen Sie das Dialogfeld, und die Konsole wiederholt den Namen.
Hinweis: |
---|
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.
<Installationslaufwerk>:\WF_WCF_Samples
Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.
<Installationslaufwerk>:\WF_WCF_Samples\WF\Scenario\WPFWFIntegration
|