Direttiva x:Subclass
Modifica il comportamento di compilazione del markup XAML quando viene fornito x:Class
. Anziché creare una classe parziale basata su x:Class
, il x:Class
fornito viene creato come classe intermedia e quindi la classe derivata fornita deve essere basata su x:Class
.
Utilizzo degli attributi XAML
<object x:Class="namespace.classname" x:Subclass="subclassNamespace.subclassName">
...
</object>
Valori XAML
Valore | Descrizione |
---|---|
namespace |
Opzionale. Specifica uno spazio dei nomi CLR che contiene classname . Se si specifica namespace , un punto (.) separa namespace e classname . |
classname |
Obbligatorio. Specifica il nome CLR della classe parziale che connette il codice XAML caricato e il code-behind per quel codice XAML. Vedere la sezione Osservazioni. |
subclassNamespace |
Opzionale. Può essere diverso da namespace se ogni spazio dei nomi può risolvere l'altro. Specifica uno spazio dei nomi CLR che contiene subclassName . Se si specifica subclassName , un punto (.) separa subclassNamespace e subclassName . |
subclassName |
Obbligatorio. Specifica il nome CLR della sottoclasse. |
Dipendenze
direttiva x:Class deve essere fornita anche sullo stesso oggetto e tale oggetto deve essere l'elemento radice dell'ambiente di produzione XAML.
Osservazioni
x:Subclass
l'utilizzo è destinato principalmente a lingue che non supportano dichiarazioni di classe parziali.
La classe usata come x:Subclass
non può essere una classe nidificata e x:Subclass
deve fare riferimento all'oggetto radice come illustrato nella sezione "Dipendenze".
In caso contrario, il significato concettuale di x:Subclass
non è definito da un'implementazione di servizi XAML .NET. Ciò è dovuto al fatto che il comportamento dei servizi XAML .NET non specifica il modello di programmazione complessivo in base al quale il markup XAML e il codice di backup sono connessi. Le implementazioni di altri concetti correlati a x:Class
e x:Subclass
vengono eseguite da framework specifici che usano modelli di programmazione o modelli di applicazione per definire come connettere markup XAML, markup compilato e code-behind basato su CLR. Ogni framework può avere azioni di compilazione specifiche che consentono alcuni dei comportamenti o componenti specifici che devono essere inclusi nell'ambiente di compilazione. All'interno di un framework, le azioni di compilazione possono variare anche in base al linguaggio CLR specifico usato per il code-behind.
Note sull'utilizzo di WPF
x:Subclass
può trovarsi in una radice di pagina o nella radice Application nella definizione dell'applicazione, che ha già x:Class
. Dichiarando x:Subclass
in qualsiasi elemento diverso da una pagina o una radice dell'applicazione o specificandolo dove non esiste alcuna x:Class
, genera un errore in fase di compilazione.
La creazione di classi derivate che funzionano correttamente per lo scenario di x:Subclass
è piuttosto complessa. Potrebbe essere necessario esaminare i file intermedi (i file con estensione g prodotti nella cartella obj del progetto tramite compilazione di markup, con nomi che incorporano i nomi dei file con estensione xaml). Questi file intermedi consentono di determinare l'origine di determinati costrutti di programmazione nelle classi parziali unite in join 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 (shadow) l'implementazione della classe intermedia e i gestori della classe intermedia non vengono richiamati.
Quando si definiscono sia x:Class
che x:Subclass
, non è necessario fornire alcuna implementazione per la classe a cui fa riferimento x:Class
. È sufficiente assegnare un nome tramite l'attributo x:Class
in modo che il compilatore disponga di alcune linee guida per la classe creata nei file intermedi (in questo caso il compilatore non seleziona un nome predefinito). È possibile assegnare alla classe x:Class
un'implementazione; Tuttavia, questo non è lo scenario tipico per l'uso sia di x:Class
che di x:Subclass
.
Vedere anche
.NET Desktop feedback