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:Class
skapas 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:Subclass
behö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
.NET Desktop feedback