Dela via


XAML-relaterade CLR-attribut för anpassade typer och bibliotek

Det här avsnittet beskriver CLR-attributen (Common Language Runtime) som definieras av .NET XAML Services. Den beskriver även andra CLR-attribut som definieras i .NET som har ett XAML-relaterat scenario för program till sammansättningar eller typer. Om du tillskriver sammansättningar, typer eller medlemmar med dessa CLR-attribut får du systeminformation av XAML-typ som är relaterad till dina typer. Information tillhandahålls till alla XAML-konsumenter som använder .NET XAML Services för bearbetning av XAML-nodströmmen direkt eller via de dedikerade XAML-läsarna och XAML-skrivarna.

Att använda CLR-attribut innebär att du använder den övergripande CLR för att definiera dina typer, annars är sådana attribut inte tillgängliga. Om du använder CLR för att definiera typstöd kan XAML-standardschemakontexten som används av .NET XAML Services XAML-skrivare läsa CLR-attribution genom reflektion mot stödsammansättningar.

I följande avsnitt beskrivs de XAML-relaterade attribut som du kan använda för anpassade typer eller anpassade medlemmar. Varje CLR-attribut förmedlar information som är relevant för ett XAML-typsystem. I inläsningssökvägen hjälper den tillskrivna informationen antingen XAML-läsaren att bilda en giltig XAML-nodström eller hjälper XAML-skrivaren att skapa ett giltigt objektdiagram. I sökvägen spara hjälper den tillskrivna informationen antingen XAML-läsaren att bilda en giltig XAML-nodström som återskapar systeminformation av XAML-typ. eller deklarerar serialiseringstips eller krav för XAML-skrivaren eller andra XAML-konsumenter.

AmbientAttribute

referensdokumentation:AmbientAttribute

gäller för:-klass, egenskap eller get accessor-medlemmar som stöder anslutningsbara egenskaper.

argument: ingen

AmbientAttribute anger att egenskapen, eller alla egenskaper som har den tilldelade typen, ska tolkas under begreppet omgivande egenskap i XAML. Det omgivande konceptet relaterar till hur XAML-processorer avgör typägare av medlemmar. En omgivande egenskap är en egenskap där värdet förväntas vara tillgängligt i parserkontexten när du skapar ett objektdiagram, men där typisk typmedlemsökning pausas för den omedelbara XAML-noduppsättningen som skapas.

Det omgivande begreppet kan tillämpas på bifogande medlemmar, som inte representeras som egenskaper när det gäller hur CLR-attribution definierar AttributeTargets. Metodens attributionsanvändning ska endast användas för en get-accessor som stöder anslutningsbar användning för XAML.

ConstructorArgumentAttribute

referensdokumentation:ConstructorArgumentAttribute

gäller för:-klass

Argument: En sträng som anger namnet på egenskapen som matchar ett enda konstruktorargument.

ConstructorArgumentAttribute anger att ett objekt kan initieras med hjälp av en icke-parameterlös konstruktorsyntax och att en egenskap för det angivna namnet tillhandahåller bygginformation. Den här informationen gäller främst för XAML-serialisering. Mer information finns i ConstructorArgumentAttribute.

ContentPropertyAttribute

referensdokumentation:ContentPropertyAttribute

gäller för:-klass

Argument: En sträng som anger namnet på en medlem av den tilldelade typen.

ContentPropertyAttribute anger att egenskapen som namnges av argumentet ska fungera som XAML-innehållsegenskap för den typen. XAML-innehållsegenskapsdefinitionen ärver till alla härledda typer som kan tilldelas till den definierande typen. Du kan åsidosätta definitionen för en specifik härledd typ genom att tillämpa ContentPropertyAttribute på den specifika härledda typen.

För egenskapen som fungerar som XAML-innehållsegenskap kan egenskapselementtaggning för egenskapen utelämnas i XAML-användningen. Vanligtvis anger du XAML-innehållsegenskaper som höjer upp en förenklad XAML-markering för dina innehålls- och inneslutningsmodeller. Eftersom endast en medlem kan betecknas som XAML-innehållsegenskap har du ibland designval att göra om vilken av flera containeregenskaper av en typ som ska betecknas som XAML-innehållsegenskapen. De andra containeregenskaperna måste användas med explicita egenskapselement.

I XAML-nodströmmen producerar XAML-innehållsegenskaper fortfarande StartMember och EndMember noder med hjälp av namnet på egenskapen för XamlMember. För att avgöra om en medlem är XAML-innehållsegenskapen granskar du XamlType-värdet från StartObject position och hämtar värdet för ContentProperty.

ContentWrapperAttribute

referensdokumentation:ContentWrapperAttribute

gäller för:-klass, särskilt samlingstyper.

Argument: A Type som anger vilken typ som ska användas som innehållsomslutningstyp för främmande innehåll.

ContentWrapperAttribute anger en eller flera typer av den associerade samlingstypen som ska användas för att omsluta främmande innehåll. Utländskt innehåll refererar till fall där typsystembegränsningarna för typen av innehållsegenskap inte samlar in alla möjliga innehållsfall som XAML-användning för ägandetypen skulle stödja. XAML-stöd för innehåll av en viss typ kan till exempel ha stöd för strängar i en starkt skriven allmän Collection<T>. Innehållsomslutningar är användbara för att migrera befintliga markeringskonventioner till XAML:s uppfattning om tilldelningsbara värden för samlingar, till exempel migrera textrelaterade innehållsmodeller.

Om du vill ange mer än en innehållsomslutningstyp använder du attributet flera gånger.

DependsOnAttribute

referensdokumentation:DependsOnAttribute

gäller för egenskapen

Argument: En sträng som anger namnet på en annan medlem av den tilldelade typen.

DependsOnAttribute anger att den tillskrivna egenskapen beror på värdet för en annan egenskap. Om du tillämpar det här attributet på en egenskapsdefinition ser du till att de beroende egenskaperna bearbetas först i XAML-objektskrivningen. Användningar av DependsOnAttribute ange undantagsfall för egenskaper för typer där en viss ordning för parsning måste följas för att ett giltigt objekt ska skapas.

Du kan använda flera DependsOnAttribute fall för en egenskapsdefinition.

MarkupExtensionReturnTypeAttribute

referensdokumentation:MarkupExtensionReturnTypeAttribute

gäller för:-klass, som förväntas vara en MarkupExtension härledd typ.

Argument: En Type som anger den mest exakta typen att förvänta sig som det ProvideValue resultatet av den tilldelade MarkupExtension.

Mer information finns i Markup Extensions for XAML Overview.

NameScopePropertyAttribute

referensdokumentation:NameScopePropertyAttribute

gäller för:-klass

Argument: Stöder två typer av attribution:

  • En sträng som anger namnet på en egenskap för den tilldelade typen.

  • En sträng som anger namnet på en egenskap och en Type för den typ som definierar den namngivna egenskapen. Det här formuläret är till för att ange en bifogad medlem som egenskapen XAML namescope.

NameScopePropertyAttribute anger en egenskap som tillhandahåller XAML-namnscopevärdet för den tilldelade klassen. Egenskapen XAML namescope förväntas referera till ett objekt som implementerar INameScope och innehåller det faktiska XAML-namnskopet, dess arkiv och dess beteende.

RuntimeNamePropertyAttribute

referensdokumentation:RuntimeNamePropertyAttribute

gäller för:-klass

Argument: En sträng som anger namnet på egenskapen run-time name för den tilldelade typen.

RuntimeNamePropertyAttribute rapporterar en egenskap av den attributtyp som mappar till XAML-x:Name Directive. Egenskapen måste vara av typen String och måste läsas/skrivas.

Definitionen ärver till alla härledda typer som kan tilldelas till den definierande typen. Du kan åsidosätta definitionen för en specifik härledd typ genom att tillämpa RuntimeNamePropertyAttribute på den specifika härledda typen.

TrimSurroundingWhitespaceAttribute

referensdokumentation:TrimSurroundingWhitespaceAttribute

gäller för: typer

argument: Ingen.

TrimSurroundingWhitespaceAttribute tillämpas på specifika typer som kan visas som underordnade element i blankstegsinnehåll (innehåll som innehas av en samling som har WhitespaceSignificantCollectionAttribute). TrimSurroundingWhitespaceAttribute är huvudsakligen relevant för spara-sökvägen, men är tillgänglig i XAML-typsystemet i belastningssökvägen genom att undersöka XamlType.TrimSurroundingWhitespace. Mer information finns i White-space processing in XAML.

TypeConverterAttribute

referensdokumentation:TypeConverterAttribute

Gäller för:-klass, egenskap, metod (det enda XAML-giltiga metodfallet är en get-accessor som stöder en bifogad medlem).

Argument:Type för TypeConverter.

TypeConverterAttribute i en XAML-kontext refererar till en anpassad TypeConverter. Den här TypeConverter tillhandahåller typkonverteringsbeteende för anpassade typer eller medlemmar av den typen.

Använd attributet TypeConverterAttribute för din typ och referera till typkonverterarens implementering. Du kan definiera typkonverterare för XAML för klasser, strukturer eller gränssnitt. Du behöver inte ange typkonvertering för uppräkningar, den konverteringen är aktiverad internt.

Typkonverteraren ska kunna konvertera från en sträng som används för attribut eller initieringstext i markering till din avsedda måltyp. Mer information finns i TypeConverters och XAML.

I stället för att tillämpas på alla värden av en typ kan en typkonverterares beteende för XAML också upprättas på en specifik egenskap. I det här fallet tillämpar du TypeConverterAttribute på egenskapsdefinitionen (den yttre definitionen, inte de specifika get- och set definitionerna).

Ett typkonverterarebeteende för XAML-användning av en anpassad bifogad medlem kan tilldelas genom att tillämpa TypeConverterAttributeget-metodåtkomstorn som stöder XAML-användningen.

I likhet med TypeConverterfanns TypeConverterAttribute i .NET innan XAML fanns, och typkonverterarens modell tjänade andra syften. För att kunna referera till och använda TypeConverterAttributemåste du helt kvalificera den eller ange en using-instruktion för System.ComponentModel. Inkludera även systemsammansättningen i projektet.

UidPropertyAttribute

referensdokumentation:UidPropertyAttribute

gäller för:-klass

Argument: En sträng som refererar till den relevanta egenskapen efter namn.

Anger CLR-egenskapen för en klass som aliaserar x:Uid-direktivet.

UsableDuringInitializationAttribute

referensdokumentation:UsableDuringInitializationAttribute

gäller för:-klass

argument: Ett booleskt värde. Om det används för attributets avsedda syfte ska värdet anges till true.

Anger om typen är inbyggd uppifrån och ned när XAML-objektdiagram skapas. Detta är ett avancerat begrepp som förmodligen är nära relaterat till definitionen av din programmeringsmodell. Mer information finns i UsableDuringInitializationAttribute.

ValueSerializerAttribute

referensdokumentation:ValueSerializerAttribute

Gäller för:-klass, egenskap, metod (det enda XAML-giltiga metodfallet är en get-accessor som stöder en bifogad medlem).

Argument: En Type som anger vilken stödklass för värde serialiserare som ska användas vid serialisering av alla egenskaper av den tilldelade typen eller den specifika attributegenskapen.

ValueSerializer anger en värdeserielliseringsklass som kräver mer tillstånd och kontext än vad en TypeConverter gör. ValueSerializer kan associeras med en bifogad medlem genom att använda attributet ValueSerializerAttribute på den statiska get accessor-metoden för den bifogande medlemmen. Värde serialisering gäller även för uppräkningar, gränssnitt och strukturer, men inte för ombud.

WhitespaceSignificantCollectionAttribute

referensdokumentation:WhitespaceSignificantCollectionAttribute

Gäller för:-klass, särskilt samlingstyper som förväntas vara värdar för blandat innehåll, där tomt utrymme runt objektelement kan vara betydande för gränssnittsrepresentation.

argument: Ingen.

WhitespaceSignificantCollectionAttribute anger att en samlingstyp ska bearbetas som blanksteg som är betydande av en XAML-processor, vilket påverkar konstruktionen av XAML-nodströmmens värdenoder i samlingen. Mer information finns i White-space processing in XAML.

XamlDeferLoadAttribute

referensdokumentation:XamlDeferLoadAttribute

gäller för egenskapen: Class.

Argument: Stöder två typer av attributionsformulär som strängar eller typer som Type. Se XamlDeferLoadAttribute.

Anger att en klass eller egenskap har en uppskjuten belastningsanvändning för XAML (till exempel ett mallbeteende) och rapporterar klassen som möjliggör uppskjutningsbeteendet och dess mål-/innehållstyp.

XamlSetMarkupExtensionAttribute

referensdokumentation:XamlSetMarkupExtensionAttribute

gäller för:-klass

Argument: Namnger återanropet.

Anger att en klass kan använda ett markeringstillägg för att ange ett värde för en eller flera av dess egenskaper och refererar till en hanterare som en XAML-skrivare ska anropa innan du utför en markeringstilläggsuppsättningsåtgärd på någon egenskap i klassen.

XamlSetTypeConverterAttribute

referensdokumentation:XamlSetTypeConverterAttribute

gäller för:-klass

Argument: Namnger återanropet.

Anger att en klass kan använda en typkonverterare för att ange ett värde för en eller flera av dess egenskaper och refererar till en hanterare som en XAML-skrivare ska anropa innan du utför en typkonverterareuppsättningsåtgärd på någon egenskap i klassen.

XmlLangPropertyAttribute

referensdokumentation:XmlLangPropertyAttribute

gäller för:-klass

Argument: En sträng som anger namnet på egenskapen till alias för att xml:lang på den tilldelade typen.

XmlLangPropertyAttribute rapporterar en egenskap av den attributtyp som mappar till XML-lang-direktivet. Egenskapen är inte nödvändigtvis av typen String men måste kunna tilldelas från en sträng (tilldelningen kan utföras genom att associera en typkonverterare med egenskapens typ eller med den specifika egenskapen). Egenskapen måste läsas/skrivas.

Scenariot för att mappa xml:lang är så att en körningsobjektmodell har åtkomst till XML-angiven språkinformation utan att specifikt bearbeta med en XMLDOM.

Definitionen ärver till alla härledda typer som kan tilldelas till den definierande typen. Du kan åsidosätta definitionen för en specifik härledd typ genom att tillämpa XmlLangPropertyAttribute på den specifika härledda typen, även om det är ett ovanligt scenario.

I följande avsnitt beskrivs de XAML-relaterade attribut som inte tillämpas på typer eller medlemsdefinitioner, utan som i stället tillämpas på sammansättningar. Dessa attribut är relevanta för det övergripande målet att definiera ett bibliotek som innehåller anpassade typer som ska användas i XAML. Vissa av attributen påverkar inte nödvändigtvis XAML-nodströmmen direkt, utan skickas vidare i nodströmmen så att andra konsumenter kan använda dem. Konsumenter av informationen omfattar designmiljöer eller serialiseringsprocesser som behöver XAML-namnområdesinformation och tillhörande prefixinformation. En XAML-schemakontext (inklusive .NET XAML Services-standard) använder också den här informationen.

XmlnsCompatibleWithAttribute

referensdokumentation:XmlnsCompatibleWithAttribute

argument:

  • En sträng som anger identifieraren för XAML-namnområdet som ska undersummas.

  • En sträng som anger identifieraren för XAML-namnområdet som kan underordna XAML-namnområdet från föregående argument.

    XmlnsCompatibleWithAttribute anger att ett XAML-namnområde kan subsumeras av ett annat XAML-namnområde. Normalt anges undersumman XAML-namnområdet i en tidigare definierad XmlnsDefinitionAttribute. Den här tekniken kan användas för att versionshantera ett XAML-ordförråd i ett bibliotek och för att göra den kompatibel med tidigare definierad markering mot den tidigare versionen av vokabulären.

XmlnsDefinitionAttribute

referensdokumentation:XmlnsDefinitionAttribute

argument:

  • En sträng som anger identifieraren för XAML-namnområdet som ska definieras.

  • En sträng som namnger ett CLR-namnområde. CLR-namnområdet bör definiera offentliga typer i sammansättningen och minst en av CLR-namnområdestyperna ska vara avsedd för XAML-användning.

    XmlnsDefinitionAttribute anger en mappning per sammansättning mellan ett XAML-namnområde och ett CLR-namnområde, som sedan används för typmatchning av en XAML-objektskrivare eller XAML-schemakontext.

    Mer än en XmlnsDefinitionAttribute kan tillämpas på en sammansättning. Detta kan göras av någon kombination av följande orsaker:

  • Biblioteksdesignen innehåller flera CLR-namnområden för logisk organisation av API-åtkomst för körning. Du vill dock att alla typer i dessa namnområden ska vara XAML-användbara genom att referera till samma XAML-namnområde. I det här fallet använder du flera XmlnsDefinitionAttribute attribut med samma XmlNamespace värde men olika ClrNamespace värden. Detta är särskilt användbart om du definierar mappningar för XAML-namnområdet som ditt ramverk eller program avser att vara standard-XAML-namnområdet i vanlig användning.

  • Biblioteksdesignen innehåller flera CLR-namnområden och du vill ha en avsiktlig XAML-namnrymdsavgränsning mellan användningarna av typer i dessa CLR-namnområden.

  • Du definierar ett CLR-namnområde i sammansättningen och vill att det ska vara tillgängligt via mer än ett XAML-namnområde. Det här scenariot inträffar när du stöder flera ordförråd med samma kodbas.

  • Du definierar stöd för XAML-språk i en eller flera CLR-namnområden. I det här fallet ska värdet för XmlNamespace vara http://schemas.microsoft.com/winfx/2006/xaml.

XmlnsPrefixAttribute

referensdokumentation:XmlnsPrefixAttribute

argument:

  • En sträng som anger identifieraren för ett XAML-namnområde.

  • En sträng som anger ett rekommenderat prefix.

    XmlnsDefinitionAttribute anger ett rekommenderat prefix som ska användas för ett XAML-namnområde. Prefixet är användbart när du skriver element och attribut i en XAML-fil som serialiseras av .NET XAML Services XamlXmlWritereller när ett XAML-implementeringsbibliotek interagerar med en designmiljö med XAML-redigeringsfunktioner.

    Mer än en XmlnsPrefixAttribute kan tillämpas på en sammansättning. Detta kan göras av någon kombination av följande orsaker:

  • Sammansättningen definierar typer för mer än ett XAML-namnområde. I det här fallet definierar du olika prefixvärden för varje XAML-namnområde.

  • Du stöder flera vokabulärer och du använder olika prefix för varje ordförråd och XAML-namnområde.

  • Du definierar XAML-språkstöd i sammansättningen och har en XmlnsDefinitionAttribute för http://schemas.microsoft.com/winfx/2006/xaml. I det här fallet bör du vanligtvis höja upp prefixet x.

Not

.NET XAML Services definierar även det XAML-relaterade attributet RootNamespaceAttribute. Det här attributet är ett attribut på sammansättningsnivå för projektsystemstöd och det är inte relevant för anpassade XAML-typer.

Se även