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.
In .NET Framework, Version 3.5 und .NET Framework, Version 3.0 enthielten sowohl Windows Presentation Foundation (WPF) als auch Windows Workflow Foundation eine XAML-Sprachimplementierung. Viele der öffentlichen Typen, die Erweiterbarkeit für die WPF-XAML-Implementierung bereitgestellt haben, waren in den Assemblys WindowsBase, PresentationCore und PresentationFramework vorhanden. Ebenso waren öffentliche Typen, die Erweiterbarkeit für Windows Workflow Foundation-XAML bereitgestellt haben, in der System.Workflow.ComponentModel-Assembly vorhanden. In .NET Framework, Version 4 werden einige der XAML-bezogenen Typen auf die System.Xaml-Assembly migriert. Eine allgemeine .NET Framework-Implementierung von XAML-Sprachdiensten ermöglicht viele XAML-Erweiterbarkeitsszenarien, die ursprünglich durch die XAML-Implementierung eines bestimmten Frameworks definiert wurden, jetzt aber Bestandteil der allgemeinen .NET Framework 4-XAML-Sprachunterstützung sind. In diesem Thema sind die Typen, die migriert werden, aufgeführt, und Probleme im Zusammenhang mit der Migration werden erläutert.
Dieses Thema enthält folgende Abschnitte.
- Assemblys und Namespaces
- MarkupExtension
- MarkupExtension mit Unterstützung von Dienstklassen
- XAML-Sprachfunktionen
- ValueSerializer und unterstützende Klassen
- XAML-bezogene Attribute
- Verschiedene Klassen
- XAML-bezogene Klassen mit freigegebenen Namen, die in WPF und System.Xaml vorhanden sind
- Verwandte Abschnitte
Assemblys und Namespaces
In .NET Framework 3.5 und .NET Framework 3.0 befanden sich die von WPF zur Unterstützung von XAML implementierten Typen im Allgemeinen im System.Windows.Markup-Namespace. Die meisten dieser Typen befanden sich in der WindowsBase-Assembly.
In .NET Framework 4 sind ein neuer System.Xaml-Namespace und eine neue System.Xaml-Assembly verfügbar. Viele der Typen, die ursprünglich für WPF-XAML implementiert wurden, werden jetzt als Erweiterbarkeitspunkte oder Dienste für eine beliebige Implementierung von XAML bereitgestellt. Um die Typen für allgemeinere Szenarien verfügbar zu machen, werden sie von ihrer ursprünglichen WPF-Assembly an die System.Xaml-Assembly weitergeleitet. Dies ermöglicht XAML-Erweiterbarkeitsszenarios, ohne die Assemblys anderer Frameworks (z. B. WPF und Windows Workflow Foundation) einschließen zu müssen.
Für migrierte Typen verbleiben die meisten Typen im System.Windows.Markup-Namespace. Dadurch sollte vermieden werden, CLR-Namespace-Zuordnungen in vorhandenen Implementierungen pro Datei aufzuheben. 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 spezifischen Typen für die WPF-XAML-Implementierung (aus "WindowsBase" und anderen WPF-Assemblys). Alle Typen, die zu "System.Xaml" migriert wurden, aber zuvor in einer WPF-Assembly enthalten waren, bieten Unterstützung für die Typweiterleitung in Version 4 der WPF-Assembly.
Workflow-XAML-Unterstützungstypen
Windows Workflow Foundation hat auch XAML-Unterstützungstypen bereitgestellt, und in vielen Fällen hatten diese Kurznamen, die mit einer WPF-Entsprechung identisch waren. Die folgende Liste führt die Windows Workflow Foundation-XAML-Unterstützungstypen auf:
Diese Unterstützungstypen sind weiterhin in den Windows Workflow Foundation-Assemblys für .NET Framework 4 vorhanden und können noch für bestimmte Windows Workflow Foundation-Anwendungen verwendet werden. In Anwendungen oder Frameworks, die Windows Workflow Foundation nicht verwenden, sollte jedoch nicht auf sie verwiesen werden.
MarkupExtension
In .NET Framework 3.5 und .NET Framework 3.0 befand sich 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 vorhanden. In .NET Framework 4 wird die MarkupExtension-Klasse in die System.Xaml-Assembly migriert. In .NET Framework 4 dient MarkupExtension für alle XAML-Erweiterbarkeitsszenarien mit .NET Framework-XAML-Diensten, nicht nur für Szenarien, die auf spezifischen Frameworks beruhen. Sofern möglich, sollten spezifische Frameworks oder Benutzercode im Framework auch auf der MarkupExtension-Klasse für die XAML-Erweiterung basieren.
MarkupExtension mit Unterstützung von Dienstklassen
In .NET Framework 3.5 und .NET Framework 3.0 für WPF waren mehrere Dienste für MarkupExtension-Implementierer und TypeConverter-Implementierungen verfügbar, um die Typ-/Eigenschaftsverwendung in XAML zu unterstützen. Diese Dienste sind die folgenden:
Hinweis |
|---|
Ein anderer Dienst von .NET Framework 3.5, der sich auf Markuperweiterungen bezieht, ist die IReceiveMarkupExtension-Schnittstelle. IReceiveMarkupExtension wurde nicht migriert und ist als [Obsolete] für .NET Framework 4 gekennzeichnet.Szenarios, die zuvor IReceiveMarkupExtension verwendet haben, sollten stattdessen attributierte XamlSetMarkupExtensionAttribute-Rückrufe verwenden.AcceptedMarkupExtensionExpressionTypeAttribute ist ebenfalls als [Obsolete] gekennzeichnet. |
XAML-Sprachfunktionen
Mehrere XAML-Sprachfunktionen und -Komponenten für WPF waren zuvor in der PresentationFramework-Assembly vorhanden. Sie wurden als MarkupExtension-Unterklasse implementiert, um Markuperweiterungsverwendungen im XAML-Markup verfügbar zu machen. In .NET Framework 4 sind diese in der System.Xaml-Assembly vorhanden, sodass Projekte, die keine WPF-Assemblys enthalten, diese Funktionen auf XAML-Sprachebene verwenden können. WPF verwendet dieselben 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, damit frühere Verweise nicht beschädigt werden.
Die folgende Tabelle enthält eine Liste der XAML-Funktionsunterstützungsklassen, die in "System.Xaml" definiert sind.
XAML-Sprachfunktion |
Verwendung |
|---|---|
<x:Array ...> |
|
{x:Null} |
|
{x:Static ...} |
|
{x:Type ...} |
Obwohl u. U. keine spezifischen Unterstützungsklassen in "System.Xaml" vorhanden sind, befindet sich die allgemeine Logik für die Verarbeitung von Sprachfunktionen für die XAML-Sprache jetzt in "System.Xaml" und den zugehörigen implementierten XAML-Readern und XAML-Writern. x:TypeArguments ist z. B. ein Attribut, das von XAML-Readern und XAML-Writern aus System.Xaml-Implementierungen verarbeitet wird. Es kann im XAML-Knotenstream erkannt und vom (CLR-basierten) XAML-Standardschemakontext verarbeitet werden, verfügt über eine XAML-Typsystemdarstellung usw. Folglich ist die Referenzdokumentation für alle Funktionen auf XAML-Sprachebene ein untergeordnetes Thema von XAML-Dienste und diesem allgemeinen Bereich der .NET Framework-Dokumentation, und nicht als untergeordnetes Thema von WPF-Grundlagen in der WPF-Dokumentation enthalten (was in der 3.5-Dokumentation weiterhin der Fall ist).
ValueSerializer und unterstützende Klassen
Die ValueSerializer-Klasse unterstützt die Typkonvertierung in eine Zeichenfolge, insbesondere für XAML-Serialisierungsfälle, bei denen die Serialisierung möglicherweise mehrere Modi oder Knoten in der Ausgabe erfordert. In .NET Framework 3.5 und .NET Framework 3.0 befand sich der ValueSerializer für WPF in der WindowsBase-Assembly. In .NET Framework 4 ist die ValueSerializer-Klasse in "System.Xaml" enthalten und für jedes Szenario mit XAML-Erweiterbarkeit vorgesehen, nicht nur für Szenarien, die auf WPF beruhen. IValueSerializerContext (ein unterstützender Dienst) und DateTimeValueSerializer (eine spezielle Unterklasse) wurden auch zu "System.Xaml" migriert.
XAML-bezogene Attribute
WPF XAML enthielt mehrere Attribute, die auf CLR-Typen angewendet werden können, um Angaben zu ihrem XAML-Verhalten zu machen. Im Folgenden finden Sie eine Liste der Attribute, die in .NET Framework 3.5 und .NET Framework 3.0 in WPF-Assemblys enthalten waren. Diese Attribute wurden in .NET Framework 4 zu "System.Xaml" migriert.
Verschiedene Klassen
Die IComponentConnector-Schnittstelle war in WindowsBase in .NET Framework 3.5 und .NET Framework 3.0 vorhanden, ist aber in System.Xaml in .NET Framework 4 vorhanden. IComponentConnector ist vor allem für Toolunterstützung und XAML-Markupcompiler vorgesehen.
Die INameScope-Schnittstelle war in .NET Framework 3.5 und .NET Framework 3.0 in "WindowsBase" enthalten, befindet sich in .NET Framework 4 jedoch in "System.Xaml". INameScope definiert grundlegende Vorgänge für einen XAML-Namensbereich.
XAML-bezogene Klassen mit freigegebenen Namen, die in WPF und System.Xaml vorhanden sind
Die folgenden Klassen sind sowohl in den WPF-Assemblys als auch in 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 unter System.Windows.Markup.XamlReader und System.Windows.Markup.XamlWriter unter "Hinweise".
Wenn Sie Verweise auf WPF-Assemblys und "System.Xaml" einschließen und auch include-Anweisungen für die System.Windows.Markup- und System.Xaml-Namespaces verwenden, müssen Sie die Aufrufe dieser APIs möglicherweise vollständig qualifizieren, um die Typen ohne Mehrdeutigkeit aufzulösen.
Hinweis