Typen gemigreerd van WPF naar System.Xaml
In .NET Framework 3.5 en .NET Framework 3.0 bevatten zowel Windows Presentation Foundation (WPF) als Windows Workflow Foundation een XAML-taal implementatie. Veel van de openbare typen die uitbreidbaarheid voor de WPF XAML-implementatie boden, bestonden in de Assembly's WindowsBase, PresentationCore en PresentationFramework. Op dezelfde manier bestonden openbare typen die uitbreidbaarheid boden voor Windows Workflow Foundation XAML in de assembly System.Workflow.ComponentModel. In .NET Framework 4 zijn enkele van de XAML-gerelateerde typen gemigreerd naar de System.Xaml-assembly. Een veelvoorkomende .NET Framework-implementatie van XAML-taalservices maakt veel XAML-uitbreidbaarheidsscenario's mogelijk die oorspronkelijk zijn gedefinieerd door de XAML-implementatie van een specifiek framework, maar maken nu deel uit van de algehele taalondersteuning van .NET Framework 4 XAML. Dit artikel bevat de typen die zijn gemigreerd en bespreken problemen met betrekking tot de migratie.
Assemblies en naamruimten
In .NET Framework 3.5 en .NET Framework 3.0 waren de typen die WPF ter ondersteuning van XAML heeft geïmplementeerd in het algemeen in de System.Windows.Markup naamruimte. De meeste van deze typen waren in de WindowsBase-assembly.
In .NET Framework 4 is er een nieuwe System.Xaml naamruimte en een nieuwe System.Xaml-assembly. Veel van de typen die oorspronkelijk zijn geïmplementeerd voor WPF XAML, worden nu geleverd als uitbreidbaarheidspunten of -services voor elke implementatie van XAML. Als onderdeel van het beschikbaar maken van deze voor meer algemene scenario's, worden de typen type-doorgestuurd van hun oorspronkelijke WPF-assembly naar de System.Xaml-assembly. Hierdoor kunnen XAML-uitbreidbaarheidsscenario's worden uitgevoerd zonder dat u de assembly's van andere frameworks (zoals WPF en Windows Workflow Foundation) hoeft op te nemen.
Voor gemigreerde typen blijven de meeste typen in de System.Windows.Markup naamruimte. Dit was gedeeltelijk om te voorkomen dat clr-naamruimtetoewijzingen in bestaande implementaties per bestand worden onderbroken. Als gevolg hiervan bevat de System.Windows.Markup naamruimte in .NET Framework 4 een combinatie van algemene XAML-taalondersteuningstypen (van de System.Xaml-assembly) en typen die specifiek zijn voor de WPF XAML-implementatie (van WindowsBase en andere WPF-assembly's). Elk type dat is gemigreerd naar System.Xaml, maar eerder bestond in een WPF-assembly, heeft ondersteuning voor het doorsturen van typen in versie 4 van de WPF-assembly.
Ondersteuningstypen voor werkstroom XAML
Windows Workflow Foundation biedt ook XAML-ondersteuningstypen, en in veel gevallen hadden deze identieke korte namen aan een WPF-equivalent. Hier volgt een lijst met windows Workflow Foundation XAML-ondersteuningstypen:
Deze ondersteuningstypen bestaan nog steeds in de Windows Workflow Foundation-assembly's voor .NET Framework 4 en kunnen nog steeds worden gebruikt voor specifieke Windows Workflow Foundation-toepassingen; Er mag echter niet naar worden verwezen door toepassingen of frameworks die geen gebruikmaken van Windows Workflow Foundation.
MarkupExtension
In .NET Framework 3.5 en .NET Framework 3.0 was de MarkupExtension-klasse voor WPF in de WindowsBase-assembly. Een parallelle klasse voor Windows Workflow Foundation, MarkupExtension, bestond in de assembly System.Workflow.ComponentModel. In .NET Framework 4 wordt de MarkupExtension-klasse gemigreerd naar de System.Xaml-assembly. In .NET Framework 4 is MarkupExtension bedoeld voor elk XAML-uitbreidbaar scenario dat gebruikmaakt van .NET XAML-services, niet alleen voor degenen die bouwen op specifieke frameworks. Indien mogelijk moeten specifieke frameworks of gebruikerscode in het framework ook worden gebaseerd op de MarkupExtension-klasse voor de XAML-extensie.
Serviceklassen ter ondersteuning van MarkupExtension
.NET Framework 3.5 en .NET Framework 3.0 voor WPF bieden verschillende services die beschikbaar waren voor MarkupExtension implementeerfuncties en TypeConverter-implementaties ter ondersteuning van type-/eigenschapsgebruik in XAML. Deze services zijn het volgende:
Notitie
Een andere service van .NET Framework 3.5 die is gerelateerd aan markeringsextensies, is de IReceiveMarkupExtension interface.
IReceiveMarkupExtension is niet gemigreerd en is gemarkeerd als [Obsolete]
voor .NET Framework 4. Scenario's die eerder gebruik maakten van IReceiveMarkupExtension, moeten in plaats daarvan gebruikmaken van XamlSetMarkupExtensionAttribute toegewezen callbacks.
AcceptedMarkupExtensionExpressionTypeAttribute is ook gemarkeerd als [Obsolete]
.
Taalfuncties van XAML
Verschillende XAML-taalfuncties en -onderdelen voor WPF bestonden eerder in de PresentationFramework-assembly. Deze zijn geïmplementeerd als een MarkupExtension subklasse om het gebruik van markeringsuitbreidingen in XAML-markeringen beschikbaar te maken. In .NET Framework 4 bestaan deze in de System.Xaml-assembly, zodat projecten die geen WPF-assembly's bevatten, deze XAML-taalfuncties kunnen gebruiken. WPF maakt gebruik van dezelfde implementaties voor .NET Framework 4-toepassingen. Net als bij de andere gevallen die in dit onderwerp worden vermeld, blijven de ondersteunende typen aanwezig in de System.Windows.Markup naamruimte om te voorkomen dat eerdere verwijzingen worden onderbroken.
De volgende tabel bevat een lijst met de XAML-klassen voor functieondersteuning die zijn gedefinieerd in System.Xaml.
XAML-taalfunctie | Gebruik |
---|---|
ArrayExtension | <x:Array ...> |
NullExtension | {x:Null} |
StaticExtension | {x:Static ...} |
TypeExtension | {x:Type ...} |
Hoewel System.Xaml mogelijk geen specifieke ondersteuningsklassen heeft, bevindt de algemene logica voor het verwerken van taalfuncties voor de XAML-taal zich nu in System.Xaml en de geïmplementeerde XAML-lezers en XAML-schrijvers.
x:TypeArguments
is bijvoorbeeld een kenmerk dat wordt verwerkt door XAML-lezers en XAML-schrijvers uit System.Xaml-implementaties; deze kan worden genoteerd in de XAML-knooppuntstroom, heeft verwerking in de standaard (CLR-gebaseerde) XAML-schemacontext, heeft een XAML-typesysteemweergave, enzovoort. Zie XAML Servicesvoor meer informatie over de referentiedocumentatie voor XAML.
ValueSerializer en ondersteunende klassen
De ValueSerializer-klasse ondersteunt typeconversie naar een tekenreeks, met name voor XAML-serialisatiecases waarbij serialisatie mogelijk meerdere modi of knooppunten in de uitvoer vereist. In .NET Framework 3.5 en .NET Framework 3.0 bevond zich de ValueSerializer voor WPF in de WindowsBase-assembly. In .NET Framework 4 bevindt de klasse ValueSerializer zich in System.Xaml en is bedoeld voor elk XAML-uitbreidbaarheidsscenario, niet alleen voor degenen die bouwen op WPF. IValueSerializerContext (een ondersteunende service) en DateTimeValueSerializer (een specifieke subklasse) worden ook gemigreerd naar System.Xaml.
XAML-Related kenmerken
WPF XAML bevat verschillende kenmerken die kunnen worden toegepast op CLR-typen om iets aan te geven over hun XAML-gedrag. Hier volgt een lijst met de kenmerken die bestaan in WPF-assembly's in .NET Framework 3.5 en .NET Framework 3.0. Deze kenmerken worden gemigreerd naar System.Xaml in .NET Framework 4.
Diverse klassen
De IComponentConnector interface bestond in WindowsBase in .NET Framework 3.5 en .NET Framework 3.0, maar bestaat in System.Xaml in .NET Framework 4. IComponentConnector is voornamelijk bedoeld voor hulpprogramma-ondersteuning en XAML-markeringscompilers.
De INameScope interface bestond in WindowsBase in .NET Framework 3.5 en .NET Framework 3.0, maar bestaat in System.Xaml in .NET Framework 4. INameScope definieert basisbewerkingen voor een XAML-naamscoop.
XAML-gerelateerde klassen met gedeelde namen die bestaan in WPF en System.Xaml
De volgende klassen bestaan in zowel de WPF-assembly's als de System.Xaml-assembly in .NET Framework 4:
XamlReader
XamlWriter
XamlParseException
De WPF-implementatie vindt u in de System.Windows.Markup naamruimte en PresentationFramework-assembly. De system.Xaml-implementatie vindt u in de System.Xaml naamruimte. Als u WPF-typen gebruikt of afgeleid bent van WPF-typen, moet u doorgaans de WPF-implementaties van XamlReader en XamlWriter gebruiken in plaats van de System.Xaml-implementaties. Zie Opmerkingen in System.Windows.Markup.XamlReader en System.Windows.Markup.XamlWritervoor meer informatie.
Als u verwijzingen naar zowel WPF-assembly's als System.Xaml opgeeft en u ook include
instructies gebruikt voor zowel de System.Windows.Markup als System.Xaml naamruimten, moet u de aanroepen naar deze API's mogelijk volledig kwalificeren om de typen zonder dubbelzinnigheid op te lossen.
.NET Desktop feedback