Aus WPF zu System.Xaml migrierte Typen

In .NET Framework 3.5 und .NET Framework 3.0 enthalten sowohl Windows Presentation Foundation (WPF) als auch Windows Workflow Foundation eine Implementierung der XAML-Sprache. Viele der öffentlichen Typen, die Erweiterbarkeit für die WPF-XAML-Implementierung bereitstellten, waren in den WindowsBase-, PresentationCore- und PresentationFramework-Assemblys vorhanden. Entsprechend waren öffentliche Typen, die Erweiterbarkeit für Windows Workflow Foundation-XAML bereitstellten, in der System.Workflow.ComponentModel-Assembly enthalten. In .NET Framework 4 wurden einige der XAML-bezogenen Typen zur System.Xaml-Assembly migriert. Eine allgemeine .NET Framework-Implementierung der XAML-Sprachdienste unterstützt viele XAML-Erweiterbarkeitsszenarios, die ursprünglich durch die XAML-Implementierung eines bestimmten Frameworks definiert wurden, jetzt jedoch Bestandteil der allgemeinen XAML-Sprachunterstützung in .NET Framework 4 sind. In diesem Artikel werden die migrierten Typen aufgeführt und Probleme im Zusammenhang mit der Migration erläutert.

Assemblys und Namespaces

In .NET Framework 3.5 und .NET Framework 3.0 waren die Typen, die WPF für die Unterstützung von XAML implementiert hatte, im Allgemeinen im System.Windows.Markup-Namespace. Die meisten dieser Typen befanden sich in der WindowsBase-Assembly.

In .NET Framework 4 gibt es einen neuen System.Xaml-Namespace und eine neue System.Xaml-Assembly. Viele der Typen, die ursprünglich für WPF-XAML implementiert wurden, stehen jetzt als Erweiterbarkeitspunkte oder -dienste für alle XAML-Implementierungen zur Verfügung. Im Rahmen der Verfügbarmachung für allgemeinere Szenarien wird für die Typen eine Typweiterleitung von der ursprünglichen WPF-Assembly zur System.Xaml-Assembly durchgeführt. Dies ermöglicht XAML-Erweiterbarkeitsszenarien, ohne dass Assemblys anderer Frameworks (z. B. WPF und Windows Workflow Foundation) eingeschlossen werden müssen.

Für migrierte Typen verbleiben die meisten Typen im System.Windows.Markup -Namespace. Dadurch sollte u. a. vermieden werden, dass CLR-Namespacezuordnungen in vorhandenen Implementierungen pro Datei unterbrochen werden. Daher enthält der System.Windows.Markup-Namespace in .NET Framework 4 eine Mischung von allgemeinen XAML-Sprachunterstützungstypen (aus der System.Xaml-Assembly) und Typen, die für die WPF-XAML-Implementierung spezifisch sind (aus WindowsBase und anderen WPF-Assemblys). Für jeden Typ, der zu System.Xaml migriert wurde, aber zuvor in einer WPF-Assembly vorhanden war, wird in Version 4 der WPF-Assembly die Typweiterleitung unterstützt.

XAML-Unterstützungstypen in Workflow

Windows Workflow Foundation stellt ebenfalls XAML-Unterstützungstypen zur Verfügung, und in vielen Fällen hatten diese die gleichen Kurznamen wie eine WPF-Entsprechung. Die folgende Liste enthält XAML-Unterstützungstypen in Windows Workflow Foundation:

Diese Supporttypen sind weiterhin in den Windows Workflow Foundation-Assemblys für .NET Framework 4 vorhanden und können weiterhin für bestimmte Windows Workflow Foundation-Anwendungen verwendet werden. Anwendungen oder Frameworks, die Windows Workflow Foundation nicht verwenden, sollten jedoch nicht darauf verweisen.

MarkupExtension

In .NET Framework 3.5 und .NET Framework 3.0 war die MarkupExtension-Klasse für WPF in der WindowsBase-Assembly. Eine parallele Klasse für Windows Workflow Foundation, MarkupExtension, war in der System.Workflow.ComponentModel-Assembly enthalten. In .NET Framework 4 wurde die MarkupExtension-Klasse zur System.Xaml-Assembly migriert. In .NET Framework 4 ist MarkupExtension für alle XAML-Erweiterbarkeitszenarios gedacht, die .NET XAML Services verwenden, nicht nur für diejenigen, die auf bestimmten Frameworks aufbauen. Nach Möglichkeiten sollten auch spezifische Frameworks oder Benutzercode im Framework auf der MarkupExtension -Klasse für die XAML-Erweiterung aufbauen.

Dienstklassen, die MarkupExtension unterstützen

In .NET Framework 3.5 und .NET Framework 3.0 für WPF wurden mehrere Dienste bereitgestellt, die für MarkupExtension-Implementierer und TypeConverter-Implementierungen die Verwendung von Typen/Eigenschaften in XAML ermöglichten. Es handelt sich dabei um die folgenden Dienste:

Hinweis

Ein weiterer Dienst aus .NET Framework 3.5 im Zusammenhang mit Markuperweiterungen ist die IReceiveMarkupExtension-Schnittstelle. IReceiveMarkupExtension wurde nicht migriert und ist für .NET Framework 4 als [Obsolete] markiert. Für Szenarios, in denen zuvor IReceiveMarkupExtension verwendet wurde, sollten stattdessen attributierte XamlSetMarkupExtensionAttribute -Rückrufe verwendet werden. AcceptedMarkupExtensionExpressionTypeAttribute ist ebenfalls als [Obsolete]gekennzeichnet.

Features der XAML-Sprache

Mehrere Features und Komponenten der XAML-Sprache für WPF waren zuvor in der PresentationFramework-Assembly enthalten. Diese wurden als MarkupExtension -Unterklasse implementiert, damit Markuperweiterungen in XAML-Markup verwendet werden konnten. In .NET Framework 4 liegen sie in der System.Xaml-Assembly vor, sodass Projekte, die keine WPF-Assemblys enthalten, diese Features der XAML-Sprachebene verwenden können. WPF verwendet die gleichen Implementierungen für .NET Framework 4-Anwendungen. Wie in den anderen in diesem Thema aufgeführten Fällen sind die unterstützenden Typen weiterhin im System.Windows.Markup -Namespace vorhanden, um zu verhindern, dass frühere Verweise ungültig werden.

Die folgende Tabelle enthält eine Liste der Klassen mit XAML-Featureunterstützung, die in System.Xaml definiert sind.

Feature der XAML-Sprache Verwendung
ArrayExtension <x:Array ...>
NullExtension {x:Null}
StaticExtension {x:Static ...}
TypeExtension {x:Type ...}

Obwohl System.Xaml möglicherweise keine spezifischen Unterstützungsklassen enthält, befindet sich die allgemeine Logik für die Verarbeitung von Sprachfeatures für die XAML-Sprache jetzt in System.Xaml und den zugehörigen implementierten XAML-Readern und XAML-Writern. Beispiel: x:TypeArguments ist ein Attribut, das von XAML-Readern und XAML-Writern aus System.Xaml-Implementierungen verarbeitet wird; es kann im XAML-Knotenstream eingetragen werden, verfügt über Behandlung im standardmäßigen (CLR-basierten) XAML-Schemakontext, hat eine XAML-Typsystemdarstellung usw. Weitere Informationen zur Referenzdokumentation für XAML finden Sie unter XAML-Dienste.

ValueSerializer und unterstützende Klassen

Die ValueSerializer -Klasse unterstützt die Typkonvertierung in eine Zeichenfolge, insbesondere für XAML-Serialisierungsfälle, in denen die Serialisierung möglicherweise mehrere Modi oder Knoten in der Ausgabe erfordert. In .NET Framework 3.5 und .NET Framework 3.0 war der ValueSerializer für WPF in der WindowsBase-Assembly. In .NET Framework 4 ist die ValueSerializer-Klasse in „System.Xaml“ enthalten und für alle XAML-Erweiterbarkeitsszenarios gedacht, nicht nur für diejenigen, die auf WPF aufbauen. IValueSerializerContext (ein unterstützender Dienst) und DateTimeValueSerializer (eine bestimmte Unterklasse) werden ebenfalls zu „System.Xaml“ migriert.

WPF-XAML enthielt mehrere Attribute, die auf CLR-Typen angewendet werden können, um Angaben über deren XAML-Verhalten zu machen. Nachfolgend sehen Sie eine Liste der Attribute, die in WPF-Assemblys in .NET Framework 3.5 und .NET Framework 3.0 vorhanden waren. Diese Attribute wurden in .NET Framework 4 zu System.Xaml migriert.

Verschiedene Klassen

Die IComponentConnector-Schnittstelle befand sich in NET Framework 3.5 und .NET Framework 3.0 in WindowsBase, ist in.NET Framework 4 jedoch Teil von System.Xaml. IComponentConnector ist hauptsächlich für Toolunterstützung und XAML-Markupcompiler gedacht.

Die INameScope-Schnittstelle befand sich in NET Framework 3.5 und .NET Framework 3.0 in WindowsBase, ist in.NET Framework 4 jedoch Teil von System.Xaml. INameScope definiert grundlegende Vorgänge für einen XAML-Namensbereich.

Die folgenden Klassen sind in den WPF-Assemblys und der System.Xaml-Assembly in .NET Framework 4 vorhanden:

XamlReader

XamlWriter

XamlParseException

Die WPF-Implementierung befindet sich im System.Windows.Markup -Namespace und in der PresentationFramework-Assembly. Die System.Xaml-Implementierung befindet sich im System.Xaml -Namespace. Wenn Sie WPF-Typen verwenden oder von WPF-Typen ableiten, sollten Sie in der Regel die WPF-Implementierungen von XamlReader und XamlWriter anstelle der System.Xaml-Implementierungen verwenden. Weitere Informationen finden Sie in den Bemerkungen zu System.Windows.Markup.XamlReader und System.Windows.Markup.XamlWriter.

Wenn Sie Verweise auf WPF-Assemblys und System.Xaml einschließen und außerdem include -Anweisungen für den System.Windows.Markup - und den System.Xaml -Namespace verwenden, müssen Sie die Aufrufe dieser APIs möglicherweisemöglicherweise vollständig qualifizieren, um die Typen ohne Mehrdeutigkeit aufzulösen.