Skriv konverterare och markeringstillägg för XAML
Typkonverterare och tillägg för markering är två tekniker som XAML-typsystem och XAML-skrivare använder för att generera objektgrafkomponenter. Även om de delar vissa egenskaper representeras typkonverterare och påläggstillägg på olika sätt i en XAML-nodström. I den här dokumentationsuppsättningen kallas typkonverterare, markeringstillägg och liknande konstruktioner ibland gemensamt för värdekonverterare.
Värdekonverterare
I XAML används värdekonverterare för olika scenarier. I följande lista visas de olika typerna av värdekonverterare i XAML:
Typkonverterare
Tillägg för markering
Värde serialiserare
Relaterad klass eller supportklass som tillhandahåller logiken för en XAML-textsyntax
Typkonverterare
I .NET XAML Services-definitionen är typkonverterare klasser som härleds från CLR-TypeConverter-klassen. TypeConverter är en klass som fanns i .NET innan XAML fanns. Dess ursprungliga syfte var att stödja egenskapsfönster och liknande textbaserade redigeringsmetaforer för IDE-egenskaper. Introduktionen av XAML till .NET använder TypeConverter för att konvertera en textsyntax (som finns i ett attributvärde eller en XAML-värdenod) till ett objekt. TypeConverter kan också användas för att serialisera ett objektvärde till textsyntax. TypeConverter användes också i tidigare ramverksspecifika XAML-implementeringar i Windows Presentation Foundation (WPF) och Windows Communication Foundation (WCF). Mer information om TypeConverter i XAML finns i Type Converters for XAML Overview.
Tillägg för markering
I .NET XAML Services-implementering är påläggstillägg klasser som härleds från klassen MarkupExtension. Markeringstillägg är ett begrepp som i det här formuläret har sitt ursprung i XAML-språket. Du kan tänka dig ett tillägg för markering som något som liknar en utökningsbar escape-sekvens som anropar till en tjänstklass för att tillhandahålla dess logik. När det gäller markering känner XAML-processorer universellt igen ett markeringstillägg av en textsekvens som börjar med en inledande klammerparentes ({) i en textsträng.
Markeringstillägg skiljer sig från typkonverterare. Typkonverterare är vanligtvis associerade med typer eller medlemmar. De anropas när ett objektdiagram skapas eller en serialisering stöter på textsyntax som är associerad med dessa entiteter.
Markeringstillägg är associerade med en enda stödtjänstklass, men kan användas för valfritt medlemsvärde. (Du kan dock implementera markeringstillägget för att avsiktligt begränsa dess användning till vissa medlemmar eller måltyper med hjälp av tjänstkontext.) Markeringstillägg kan åsidosätta en typkonverterarassociation. Du kan också använda dem för att ange ett attributvärde för medlemmar som annars inte skulle ha stöd för en textsyntax.
Mer information om markeringstilläggets implementeringsmönster för XAML finns i Markup Extensions for XAML Overview.
Värde serialiserare
En ValueSerializer är en specialiserad typkonverterare som är optimerad för att konvertera ett objekt till en sträng. En ValueSerializer för XAML kanske inte implementerar ConvertFrom
-metoden alls. En ValueSerializer implementering hämtar tjänster på ett sätt som liknar en TypeConverter implementering. De virtuella metoderna tillhandahåller en indataparameter context
. Parametern context
är av typen IValueSerializerContext, som ärver från IServiceProvider-gränssnittet och har en GetService-metod.
I XAML-typsystemet och för XAML-skrivarimplementeringar som använder XAML-nodloopbearbetning för serialisering rapporteras en värdekonverterare som är associerad med en typ eller medlem av sin egen egenskap XamlType.ValueSerializer. Innebörden för XAML-skrivare som utför serialisering är att om det finns en XamlType.TypeConverter och XamlType.ValueSerializer ska typkonverteraren användas för inläsningssökvägen och värdeserialiseraren ska användas för spara-sökvägen. Om XamlType.TypeConverter finns men XamlType.ValueSerializer är null
används även typkonverteraren för sökvägen spara.
Andra värdekonverterare
En värdekonverterare är utökningsbar utöver de specifika mönstren för en typkonverterare eller ett tillägg för markering. Den här anpassningen skulle dock också kräva en omdefiniering av XAML-typsystemet enligt .NET XAML Services. Det befintliga XAML-typsystemet har representationer och rapporteringssystem för typkonverterare, markeringstillägg och värde serialiserare, men inte för anpassade former av värdekonvertering. Om du vill skapa anpassade värdekonverterare använder du XamlValueConverter<TConverterBase> typ.
Skriv konverterare och markeringstillägg i kombination
Markeringstillägg och typkonverterare används för olika situationer i XAML. Även om kontexten är tillgänglig för markeringstilläggsanvändningar, kontrolleras inte typkonverteringsbeteendet för egenskaper där ett tillägg för markering ger ett värde i allmänhet inte i implementeringarna av markeringstillägget. Med andra ord, även om ett markeringstillägg returnerar en textsträng som dess ProvideValue
utdata, anropas inte typkonverteringsbeteendet för strängen som tillämpas på en specifik egenskap eller egenskapsvärdetyp. I allmänhet är syftet med ett tillägg för markering att bearbeta en sträng och returnera ett objekt utan någon typkonverterare.
Tjänstkontext för en värdekonverterare
När du implementerar en värdekonverterare behöver du ofta åtkomst till en kontext där värdekonverteraren tillämpas. Den här kontexten kallas för tjänstkontexten. Tjänstkontexten kan innehålla information som den aktiva XAML-schemakontexten, åtkomst till det typmappningssystem som XAML-schemakontexten och XAML-objektskrivaren tillhandahåller och så vidare. Mer information om tjänstkontexter som är tillgängliga för en värdekonverterare och hur du får åtkomst till de tjänster som en tjänstkontext kan tillhandahålla finns i Tjänstkontexter som är tillgängliga för typkonverterare och markeringstillägg.
Se även
.NET Desktop feedback