Dela via


Typer som migrerats från WPF till System.Xaml

I .NET Framework 3.5 och .NET Framework 3.0 innehöll både Windows Presentation Foundation (WPF) och Windows Workflow Foundation en XAML-språkimplementering. Många av de offentliga typer som gav utökningsbarhet för WPF XAML-implementeringen fanns i sammansättningarna WindowsBase, PresentationCore och PresentationFramework. På samma sätt fanns offentliga typer som gav utökningsbarhet för Windows Workflow Foundation XAML i sammansättningen System.Workflow.ComponentModel. I .NET Framework 4 migrerades några av de XAML-relaterade typerna till System.Xaml-sammansättningen. En vanlig .NET Framework-implementering av XAML-språktjänster möjliggör många XAML-utökningsscenarier som ursprungligen definierades av ett specifikt ramverks XAML-implementering, men som nu ingår i det övergripande XAML-språkstödet för .NET Framework 4. Den här artikeln innehåller en lista över de typer som migrerades och diskuterar problem som rör migreringen.

Sammansättningar och namnområden

I .NET Framework 3.5 och .NET Framework 3.0 fanns de typer som WPF implementerade för att stödja XAML i allmänhet i System.Windows.Markup namnrymd. De flesta av dessa typer fanns i WindowsBase-sammansättningen.

I .NET Framework 4 finns det ett nytt System.Xaml namnområde och en ny System.Xaml-sammansättning. Många av de typer som ursprungligen implementerades för WPF XAML tillhandahålls nu som utökningspunkter eller tjänster för all implementering av XAML. Som en del av att göra dem tillgängliga för mer allmänna scenarier, skrivs typerna vidare från sin ursprungliga WPF-sammansättning till System.Xaml-sammansättningen. Detta möjliggör XAML-utökningsscenarier utan att behöva inkludera sammansättningar av andra ramverk (till exempel WPF och Windows Workflow Foundation).

För migrerade typer finns de flesta typerna kvar i System.Windows.Markup namnområdet. Detta var delvis för att undvika att bryta CLR-namnområdesmappningar i befintliga implementeringar per fil. Därför innehåller System.Windows.Markup-namnområdet i .NET Framework 4 en blandning av allmänna XAML-språkstödtyper (från System.Xaml-sammansättningen) och typer som är specifika för WPF XAML-implementeringen (från WindowsBase och andra WPF-sammansättningar). Alla typer som migrerades till System.Xaml, men som fanns tidigare i en WPF-sammansättning, har stöd för typvidarebefordring i version 4 av WPF-sammansättningen.

XAML-supporttyper för arbetsflöde

Windows Workflow Foundation tillhandahöll också XAML-supporttyper, och i många fall hade dessa identiska korta namn till en WPF-motsvarighet. Följande är en lista över XAML-supporttyper för Windows Workflow Foundation:

Dessa supporttyper finns fortfarande i Windows Workflow Foundation-sammansättningarna för .NET Framework 4 och kan fortfarande användas för specifika Windows Workflow Foundation-program. De bör dock inte refereras av program eller ramverk som inte använder Windows Workflow Foundation.

MarkupExtension

I .NET Framework 3.5 och .NET Framework 3.0 fanns klassen MarkupExtension för WPF i WindowsBase-sammansättningen. En parallell klass för Windows Workflow Foundation, MarkupExtension, fanns i sammansättningen System.Workflow.ComponentModel. I .NET Framework 4 migreras klassen MarkupExtension till System.Xaml-sammansättningen. I .NET Framework 4 är MarkupExtension avsedd för alla XAML-utökningsscenarier som använder .NET XAML Services, inte bara för dem som bygger på specifika ramverk. När det är möjligt bör specifika ramverk eller användarkod i ramverket också bygga på MarkupExtension-klassen för XAML-tillägget.

Stödtjänstklasser för MarkupExtension

.NET Framework 3.5 och .NET Framework 3.0 för WPF tillhandahöll flera tjänster som var tillgängliga för MarkupExtension implementerare och TypeConverter implementeringar för att stödja typ-/egenskapsanvändning i XAML. Dessa tjänster är följande:

Not

En annan tjänst från .NET Framework 3.5 som är relaterad till markeringstillägg är IReceiveMarkupExtension-gränssnittet. IReceiveMarkupExtension har inte migrerats och har markerats [Obsolete] för .NET Framework 4. Scenarier som tidigare använde IReceiveMarkupExtension bör istället använda återanrop till XamlSetMarkupExtensionAttribute. AcceptedMarkupExtensionExpressionTypeAttribute är också markerad som [Obsolete].

XAML-språkfunktioner

Flera XAML-språkfunktioner och komponenter för WPF fanns tidigare i PresentationFramework-sammansättningen. Dessa implementerades som en MarkupExtension-underklass för att exponera användningar av markuputvidgningar i XAML-kod. I .NET Framework 4 finns dessa i System.Xaml-sammansättningen så att projekt som inte innehåller WPF-sammansättningar kan använda dessa funktioner på XAML-språknivå. WPF använder samma implementeringar för .NET Framework 4-program. Precis som med andra fall som anges i det här avsnittet fortsätter de stödjande typerna att finnas i System.Windows.Markup namnområdet för att undvika att bryta tidigare referenser.

Följande tabell innehåller en lista över de XAML-funktionsstödklasser som definieras i System.Xaml.

XAML-språkfunktion Användning
ArrayExtension <x:Array ...>
NullExtension {x:Null}
StaticExtension {x:Static ...}
TypeExtension {x:Type ...}

System.Xaml kanske inte har specifika stödklasser, men den allmänna logiken för att bearbeta språkfunktioner för XAML-språket finns nu i System.Xaml och dess implementerade XAML-läsare och XAML-skrivare. Till exempel är x:TypeArguments ett attribut som bearbetas av XAML-läsare och XAML-författare från System.Xaml-implementeringar. det kan noteras i XAML-nodströmmen, har hantering i standardschemakontexten (CLR-baserad) XAML, har en XAML-typsystemrepresentation och så vidare. Mer information om referensdokumentationen för XAML finns i XAML Services.

ValueSerializer och stödklasser

Klassen ValueSerializer stöder typkonvertering till en sträng, särskilt för XAML-serialiseringsfall där serialisering kan kräva flera lägen eller noder i utdata. I .NET Framework 3.5 och .NET Framework 3.0 fanns ValueSerializer för WPF i WindowsBase-sammansättningen. I .NET Framework 4 finns klassen ValueSerializer i System.Xaml och är avsedd för alla XAML-utökningsscenarion, inte bara för dem som bygger på WPF. IValueSerializerContext (en stödtjänst) och DateTimeValueSerializer (en specifik underklass) migreras också till System.Xaml.

WPF XAML innehöll flera attribut som kan tillämpas på CLR-typer för att indikera något om deras XAML-beteende. Följande är en lista över attributen som fanns i WPF-sammansättningar i .NET Framework 3.5 och .NET Framework 3.0. Dessa attribut migreras till System.Xaml i .NET Framework 4.

Diverse klasser

Det IComponentConnector gränssnittet fanns i WindowsBase i .NET Framework 3.5 och .NET Framework 3.0, men finns i System.Xaml i .NET Framework 4. IComponentConnector är främst avsett för verktygsstöd och XAML-kompilatorer.

Det INameScope gränssnittet fanns i WindowsBase i .NET Framework 3.5 och .NET Framework 3.0, men finns i System.Xaml i .NET Framework 4. INameScope definierar grundläggande åtgärder för ett XAML-namnskop.

Följande klasser finns i både WPF-sammansättningarna och System.Xaml-sammansättningen i .NET Framework 4:

XamlReader

XamlWriter

XamlParseException

WPF-implementeringen finns i System.Windows.Markup namnrymd och PresentationFramework-sammansättning. System.Xaml-implementeringen finns i namnområdet System.Xaml. Om du använder WPF-typer eller härleder från WPF-typer bör du vanligtvis använda WPF-implementeringarna av XamlReader och XamlWriter i stället för System.Xaml-implementeringarna. Mer information finns i Anmärkningar i System.Windows.Markup.XamlReader och System.Windows.Markup.XamlWriter.

Om du inkluderar referenser till både WPF-sammansättningar och System.Xaml, och du även använder include-instruktioner för både System.Windows.Markup och System.Xaml namnområden, kan du behöva kvalificera anropen till dessa API:er fullständigt för att lösa typerna utan tvetydighet.