Dela via


x:Underklassdirektiv

Ändrar kompileringsbeteendet för XAML-markering när x:Class också tillhandahålls. I stället för att skapa en partiell klass som baseras på x:Classskapas den angivna x:Class som en mellanliggande klass, och sedan förväntas din angivna härledda klass baseras på x:Class.

XAML-attributanvändning

<object x:Class="namespace.classname" x:Subclass="subclassNamespace.subclassName">
   ...
</object>

XAML-värden

Värde Beskrivning
namespace Valfri. Anger ett CLR-namnområde som innehåller classname. Om namespace anges separerar en punkt (.) namespace och classname.
classname Krävs. Anger CLR-namnet på den partiella klass som ansluter den inlästa XAML:en och din bakomliggande kod för XAML. Se Kommentarer.
subclassNamespace Valfri. Kan skilja sig från namespace om varje namnområde kan matcha det andra. Anger ett CLR-namnområde som innehåller subclassName. Om subclassName anges separerar en punkt (.) subclassNamespace och subclassName.
subclassName Krävs. Anger CLR-namnet på underklassen.

Beroenden

x:Class Directive måste också anges på samma objekt, och det objektet måste vara rotelementet i XAML-produktionen.

Anmärkningar

x:Subclass användning är främst avsedd för språk som inte stöder partiella klassdeklarationer.

Klassen som används som x:Subclass kan inte vara en kapslad klass och x:Subclass måste referera till rotobjektet enligt beskrivningen i avsnittet "Beroenden".

Annars är den konceptuella innebörden av x:Subclass odefinierad av en .NET XAML Services-implementering. Detta beror på att .NET XAML Services-beteendet inte anger den övergripande programmeringsmodell som XAML-markering och säkerhetskopieringskod är anslutna till. Implementeringar av ytterligare begrepp som rör x:Class och x:Subclass utförs av specifika ramverk som använder programmeringsmodeller eller programmodeller för att definiera hur du ansluter XAML-markering, kompilerad markering och CLR-baserad kod bakom. Varje ramverk kan ha egna byggåtgärder som möjliggör vissa av beteendet eller specifika komponenter som måste ingå i byggmiljön. Inom ett ramverk kan byggåtgärder också variera beroende på det specifika CLR-språk som används för koden bakom.

WPF-användningsanteckningar

x:Subclass kan finnas på en sidrot eller på Application roten i programdefinitionen, som redan har x:Class. Om du deklarerar x:Subclass på något annat element än en sida eller programrot, eller anger där det inte finns några x:Class, uppstår ett kompileringsfel.

Det är ganska komplext att skapa härledda klasser som fungerar korrekt för x:Subclass scenariot. Du kan behöva undersöka mellanliggande filer (de .g-filer som skapas i obj-mappen i projektet genom markeringskompilering, med namn som innehåller .xaml-filnamnen). Dessa mellanliggande filer kan hjälpa dig att fastställa ursprunget för vissa programmeringskonstruktioner i de kopplade partiella klasserna i det kompilerade programmet.

Händelsehanterare i den härledda klassen måste vara internal override (Friend Overrides i Microsoft Visual Basic) för att åsidosätta hanterare som skapats i mellanklassen under kompilering. Annars döljer de härledda klassimplementeringarna (skugga) mellanklassimplementeringen och mellanliggande klasshanterare inte anropas.

När du definierar både x:Class och x:Subclassbehöver du inte ange någon implementering för klassen som refereras av x:Class. Du behöver bara ge den ett namn via attributet x:Class så att kompilatorn har viss vägledning för klassen som skapas i mellanliggande filer (kompilatorn väljer inte ett standardnamn i det här fallet). Du kan ge klassen x:Class en implementering. Detta är dock inte det vanliga scenariot för användning av både x:Class och x:Subclass.

Se även