Direttiva x:Subclass
Modifica il comportamento della compilazione di markup XAML nei casi in cui viene fornito anche x:Class. Anziché creare una classe parziale basata sulla classe x:Class, l'oggetto x:Class fornito viene creato come classe intermedia, pertanto si prevede che la classe derivata si basi sull'attributo x:Class.
Utilizzo della sintassi XAML per gli attributi
<object x:Class="namespace.classname" x:Subclass="subclassNamespace.subclassName">
...
</object>
Valori XAML
namespace |
Facoltativo. Specifica uno spazio dei nomi CLR che contiene classname. Se l'oggetto namespace viene specificato, un punto (.) separa namespace e classname. |
classname |
Obbligatoria. Specifica il nome CLR della classe parziale che connette il file XAML caricato e il code-behind per tale XAML. Vedere la sezione Osservazioni. |
subclassNamespace |
Facoltativo. Può essere diverso da namespace se ogni spazio dei nomi è in grado di risolvere l'altro. Specifica uno spazio dei nomi CLR che contiene subclassName. Se l'oggetto subclassName viene specificato, un punto (.) separa subclassNamespace e subclassName. |
subclassName |
Obbligatoria. Specifica il nome CLR della sottoclasse. |
Dipendenze
Direttiva x:Class deve inoltre essere disponibile sullo stesso oggetto, che deve essere l'elemento radice della produzione XAML.
Note
L'utilizzo dell'attributo x:Subclass è destinato principalmente ai linguaggi che non supportano dichiarazioni di classe parziali.
La classe utilizzata come x:Subclass non può essere una classe annidata, e x:Subclass deve far riferimento all'oggetto radice come spiegato nella sezione "Dipendenze".
In caso contrario, il significato concettuale di x:Subclass non è definito da un'implementazione dei servizi XAML di .NET Framework. Ciò è dovuto al fatto che il comportamento dei servizi XAML di .NET Framework non specifica il modello di programmazione complessivo tramite cui sono connessi il markup XAML e il codice di supporto. Le implementazioni di ulteriori concetti correlati a x:Class e x:Subclass vengono eseguite da framework specifici che utilizzano modelli di programmazione o di applicazione per definire come connettere markup XAML, markup compilato e code-behind basato su CLR. Ciascun framework potrebbe disporre di operazioni di compilazione che abilitano alcuni comportamenti o componenti specifici da includere nell'ambiente di compilazione. All'interno di un framework, le azioni di compilazione possono variare anche in base al linguaggio CLR specifico utilizzato per il code-behind.
Note sull'utilizzo di WPF
x:Subclass può essere in una radice della pagina o nella radice Application nella definizione di applicazione, che dispone già di x:Class. La dichiarazione dell'attributo x:Subclass in un elemento diverso dalla radice di una pagina o di un'applicazione oppure la specifica di questo attributo in assenza di un attributo x:Class causerà un errore in fase di compilazione.
La creazione di classi derivate che funzionano correttamente per lo scenario x:Subclass è abbastanza complessa. Potrebbe essere necessario esaminare i file intermedi (vale a dire i file g prodotti nella cartella obj del progetto tramite compilazione del markup, con nomi che incorporano i nomi file xaml). Questi file intermedi possono consentire di determinare l'origine di specifici costrutti di programmazione nelle classi parziali associate nell'applicazione compilata.
I gestori eventi nella classe derivata devono essere internal override (Friend Overrides in Microsoft Visual Basic) per eseguire l'override degli stub per i gestori creati nella classe intermedia durante la compilazione. In caso contrario, le implementazioni della classe derivata nascondono l'implementazione della classe intermedia e i gestori della classe intermedia non vengono richiamati.
Quando si definiscono gli oggetti x:Class e x:Subclass, non è necessario fornire alcuna implementazione per la classe a cui fa riferimento l'oggetto x:Class. È sufficiente denominare la classe mediante l'attributo x:Class, in modo che il compilatore disponga di istruzioni per la classe che crea nei file intermedi (il compilatore non seleziona un nome predefinito in questo caso). È possibile fornire un'implementazione alla classe x:Class; tuttavia questa operazione non fa parte dello scenario tipico dell'utilizzo combinato di x:Class e x:Subclass.