x:Type Markup Extension
Tillhandahåller CLR-Type objekt som är den underliggande typen för en angiven XAML-typ.
XAML-attributanvändning
<object property="{x:Type prefix:typeNameValue}" .../>
Användning av XAML-objektelement
<x:Type TypeName="prefix:typeNameValue"/>
XAML-värden
Värde | Beskrivning |
---|---|
prefix |
Valfri. Ett prefix som mappar ett XAML-namnområde som inte är standard. Det är ofta inte nödvändigt att ange ett prefix. Se Kommentarer. |
typeNameValue |
Krävs. Ett typnamn som kan matchas till det aktuella XAML-standardnamnområdet. eller det angivna mappade prefixet om prefix anges. |
Anmärkningar
x:Type
-markeringstillägget har en liknande funktion som operatorn typeof()
i C# eller operatorn GetType
i Microsoft Visual Basic.
x:Type
-markeringstillägget tillhandahåller ett konverteringsbeteende från strängen för egenskaper som tar typen Type. Indata är en XAML-typ. Relationen mellan XAML-indatatypen och utdata-CLR-Type är att utdata Type är UnderlyingType för indata XamlType, efter att ha letat upp de nödvändiga XamlType baserat på XAML-schemakontexten och den IXamlTypeResolver tjänst som kontexten tillhandahåller.
I .NET XAML Services definieras hanteringen för det här markeringstillägget av klassen TypeExtension.
I specifika ramverksimplementeringar kan vissa egenskaper som tar Type som ett värde acceptera namnet på typen direkt (strängvärdet för typen Name
). Att implementera det här beteendet är dock ett komplext scenario. Exempel finns i avsnittet "WPF Usage Notes" som följer.
Attributsyntax är den vanligaste syntaxen som används med det här markeringstillägget. Strängtoken som anges efter att x:Type
identifierarsträngen har tilldelats som TypeName-värdet för den underliggande TypeExtension-tilläggsklassen. Under XAML-standardschemakontexten för .NET XAML Services, som baseras på CLR-typer, är värdet för det här attributet antingen Name av önskad typ eller innehåller som Name föregås av ett prefix för en XAML-namnområdesmappning som inte är standard.
Det x:Type
markeringstillägget kan användas i objektelementsyntaxen. I det här fallet krävs det att du anger värdet för egenskapen TypeName för att initiera tillägget korrekt.
Tillägget x:Type
markering kan också användas som ett utförligt attribut. men den här användningen är inte typisk: <object property="{x:Type TypeName=typeNameValue}" .../>
WPF-användningsanteckningar
XAML-standardnamnrymd och typmappning
XAML-standardnamnområdet för WPF-programmering innehåller de flesta XAML-typer som du behöver för vanliga XAML-scenarier. Därför kan du ofta undvika prefix när du refererar till XAML-typvärden. Du kan behöva mappa ett prefix om du refererar till en typ från en anpassad sammansättning eller för typer som finns i en WPF-sammansättning men kommer från ett CLR-namnområde som inte har mappats till XAML-standardnamnområdet. Mer information om prefix, XAML-namnområden och mappning av CLR-namnområden finns i XAML-namnområden och namnområdesmappning för WPF XAML.
Typegenskaper som stöder Typename-as-String
WPF stöder tekniker som gör det möjligt att ange värdet för vissa egenskaper av typen Type utan att kräva användning av x:Type
markeringstillägg. I stället kan du ange värdet som en sträng som namnger typen. Exempel på detta är ControlTemplate.TargetType och Style.TargetType. Stöd för det här beteendet tillhandahålls inte via antingen typkonverterare eller markeringstillägg. I stället är detta ett uppskjutningsbeteende som implementeras via FrameworkElementFactory.
Silverlight stöder en liknande konvention. Faktum är att Silverlight för närvarande inte stöder {x:Type}
i sitt XAML-språkstöd och accepterar inte {x:Type}
användning utanför några omständigheter som är avsedda att stödja WPF-Silverlight XAML-migrering. Därför är beteendet typename-as-string inbyggt i alla utvärderingar av inbyggda egenskaper i Silverlight där en Type är värdet.
XAML 2009
XAML 2009 ger ytterligare stöd för generiska typer och ändrar funktionsbeteendet för x:TypeArguments
och x:Type
för att tillhandahålla det här stödet.
x:TypeArguments
och det associerade objektelementet för en allmän objektinstansiering kan finnas på andra element än roten. Mer information finns i avsnittet "XAML 2009" i x:TypeArguments Directive.XAML 2009 stöder en syntax för att ange en allmän typs villkor i markering. Detta kan användas av
x:TypeArguments
, avx:Type
eller av de två funktionerna i kombination.WPF XAML-implementering vid bearbetning av XAML 2009 för belastning lägger också till den här funktionen till implicit typkonverteringsbeteende för vissa ramverksegenskaper som använder typ Type.
I WPF kan du använda XAML 2009-funktioner, men bara för lös XAML (XAML som inte är påläggskompilerad). Påläggskompilerade XAML för WPF och BAML-formen av XAML stöder för närvarande inte XAML 2009-nyckelord och -funktioner.
Se även
.NET Desktop feedback