Servizi XAML
Questo argomento descrive le funzionalità di un set di tecnologie noto come servizi XAML .NET. La maggior parte dei servizi e delle API descritte si trova nell'assembly System.Xaml
. I servizi includono lettori e writer, classi di schemi e supporto dello schema, factory, attributi di classi, supporto intrinseco del linguaggio XAML e altre funzionalità del linguaggio XAML.
Informazioni su questa documentazione
La documentazione concettuale per i servizi XAML .NET presuppone che tu abbia esperienza precedente con il linguaggio XAML e come possa essere applicato a un framework specifico, ad esempio Windows Presentation Foundation (WPF) o Windows Workflow Foundation o un'area di funzionalità di tecnologia specifica, ad esempio le funzionalità di personalizzazione della compilazione in Microsoft.Build.Framework.XamlTypes. Questa documentazione non tenta di spiegare le nozioni di base di XAML come linguaggio di markup, terminologia della sintassi XAML o altro materiale introduttivo. Questa documentazione è invece incentrata sull'uso specifico dei servizi XAML .NET abilitati nella libreria di assembly System.Xaml. La maggior parte di queste API è destinata a scenari di integrazione ed estendibilità del linguaggio XAML. Questo potrebbe includere uno degli scenari seguenti:
Estensione delle funzionalità dei lettori XAML di base o dei writer XAML (elaborazione diretta del flusso del nodo XAML; derivazione del proprio lettore XAML o writer XAML).
Definizione di tipi personalizzati utilizzabili da XAML che non hanno dipendenze del framework specifiche e attributi dei tipi per trasmettere le caratteristiche del sistema dei tipi XAML ai servizi XAML .NET.
Hosting di lettori XAML o writer XAML come componente di un'applicazione, ad esempio una finestra di progettazione visiva o un editor interattivo per origini di markup XAML.
Scrittura di convertitori di valori XAML (estensioni di markup, convertitori di tipi per tipi personalizzati).
Definizione di un contesto di schema XAML personalizzato (usando tecniche alternative di caricamento di assembly per le origini dei tipi di backup, usando tecniche di ricerca di tipi noti invece di riflettere sempre gli assembly; usando concetti di assembly caricati che non usano l'
AppDomain
CLR (Common Language Runtime) e il relativo modello di sicurezza associato.Estensione del sistema di tipi XAML di base.
Usando le tecniche di
Lookup
oInvoker
per influenzare il sistema dei tipi XAML e il modo in cui vengono valutati i backup dei tipi.
Se si sta cercando materiale introduttivo in XAML come linguaggio, è possibile provare panoramica XAML (WPF .NET). Questo argomento illustra XAML per un gruppo di destinatari nuovo di Windows Presentation Foundation (WPF) e anche per l'uso di markup XAML e funzionalità del linguaggio XAML. Un altro documento utile è il materiale introduttivo nella specifica del linguaggio XAML .
Servizi XAML .NET e System.Xaml
nell'architettura .NET
I servizi XAML .NET e l'assembly System.Xaml
definiscono gran parte degli elementi necessari per supportare le funzionalità del linguaggio XAML. Sono incluse le classi di base per lettori XAML e writer XAML. La funzionalità più importante aggiunta ai servizi XAML .NET non presenti in alcuna implementazione XAML specifica del framework è una rappresentazione del sistema dei tipi per XAML. La rappresentazione del sistema dei tipi presenta XAML in modo orientato agli oggetti che si concentra sulle funzionalità XAML senza assumere dipendenze da funzionalità specifiche dei framework.
Il sistema di tipi XAML non è limitato dal modulo di markup o dalle specifiche di runtime dell'origine XAML; né è limitato da qualsiasi sistema di tipi di supporto specifico. Il sistema di tipi XAML include rappresentazioni di oggetti per tipi, membri, contesti dello schema XAML, concetti a livello XML e altri concetti del linguaggio XAML o intrinseci XAML. L'uso o l'estensione del sistema di tipi XAML consente di derivare da classi come lettori XAML e writer XAML ed estendere la funzionalità delle rappresentazioni XAML in funzionalità specifiche abilitate da un framework, da una tecnologia o da un'applicazione che utilizza o emette XAML. Il concetto di contesto dello schema XAML consente operazioni pratiche di scrittura di oggetti grafici dalla combinazione di un'implementazione del writer di oggetti XAML, un sistema di tipi di supporto di una tecnologia come comunicato tramite informazioni sull'assembly nel contesto e l'origine del nodo XAML. Per altre informazioni sul concetto di schema XAML. vedere contesto dello schema XAML predefinito e contesto dello schema XAML WPF.
Flussi di nodi XAML, lettori XAML e writer XAML
Per comprendere il ruolo svolto dai servizi XAML .NET nella relazione tra il linguaggio XAML e le tecnologie specifiche che usano XAML come linguaggio, è utile comprendere il concetto di flusso di nodi XAML e il modo in cui tale concetto forma l'API e la terminologia. Il flusso del nodo XAML è un intermedio concettuale tra una rappresentazione del linguaggio XAML e l'oggetto grafico rappresentato o definito da XAML.
Un lettore XAML è un'entità che elabora XAML in qualche formato e produce un flusso di nodi XAML. Nell'API un lettore XAML è rappresentato dalla classe base XamlReader.
Un writer XAML è un'entità che elabora un flusso di nodi XAML e produce qualcos'altro. Nell'API un writer XAML è rappresentato dalla classe base XamlWriter.
I due scenari più comuni che coinvolgono XAML stanno caricando XAML per creare un'istanza di un oggetto grafico e salvando un oggetto grafico da un'applicazione o da uno strumento e producendo una rappresentazione XAML (in genere nel formato di markup salvato come file di testo). Il caricamento di XAML e la creazione di un oggetto grafico viene spesso indicato in questa documentazione come percorso di caricamento. Il salvataggio o la serializzazione di un oggetto grafico esistente in XAML viene spesso indicato in questa documentazione come percorso di salvataggio.
Il tipo più comune di percorso di caricamento può essere descritto come segue:
Iniziare con una rappresentazione XAML, in formato XML con codifica UTF e salvata come file di testo.
Caricare il codice XAML in XamlXmlReader. XamlXmlReader è una sottoclasse XamlReader.
Il risultato è un flusso di nodi XAML. È possibile accedere ai singoli nodi del flusso di nodi XAML usando XamlXmlReader / XamlReader API. L'operazione più tipica consiste nell'avanzare attraverso il flusso del nodo XAML, elaborando ogni nodo usando una metafora "record corrente".
Passare i nodi risultanti dal flusso del nodo XAML a un'API XamlObjectWriter. XamlObjectWriter è una sottoclasse XamlWriter.
Il XamlObjectWriter scrive un oggetto grafico, un oggetto alla volta, in base allo stato di avanzamento attraverso il flusso del nodo XAML di origine. La scrittura di oggetti viene eseguita con l'assistenza di un contesto dello schema XAML e un'implementazione che può accedere agli assembly e ai tipi di un sistema di tipi di supporto e di un framework.
Chiamare Result alla fine del flusso del nodo XAML per ottenere l'oggetto radice dell'oggetto grafico.
Il tipo più comune di percorso di salvataggio può essere descritto come segue:
Iniziare con l'oggetto grafico di un'intera fase di esecuzione dell'applicazione, il contenuto dell'interfaccia utente e lo stato di un runtime o un segmento più piccolo della rappresentazione dell'oggetto di un'applicazione complessiva in fase di esecuzione.
Da un oggetto iniziale logico, ad esempio una radice dell'applicazione o una radice del documento, caricare gli oggetti in XamlObjectReader. XamlObjectReader è una sottoclasse XamlReader.
Il risultato è un flusso di nodi XAML. È possibile accedere ai singoli nodi del flusso di nodi XAML usando XamlObjectReader e XamlReader API. L'operazione più tipica consiste nell'avanzare attraverso il flusso del nodo XAML, elaborando ogni nodo usando una metafora "record corrente".
Passare i nodi risultanti dal flusso del nodo XAML a un'API XamlXmlWriter. XamlXmlWriter è una sottoclasse XamlWriter.
Il XamlXmlWriter scrive XAML in una codifica UTF XML. È possibile salvarlo come file di testo, come flusso o in altri moduli.
Chiamare Flush per ottenere l'output finale.
Per altre informazioni sui concetti relativi al flusso di nodi XAML, vedere Understanding XAML Node Stream Structures and Concepts.For more information about XAML node stream concepts, see Understanding XAML Node Stream Structures and Concepts.
Classe XamlServices
Non è sempre necessario gestire un flusso di nodi XAML. Se si vuole un percorso di caricamento di base o un percorso di salvataggio di base, è possibile usare le API nella classe XamlServices.
Varie firme di Load implementare un percorso di caricamento. È possibile caricare un file o un flusso oppure caricare un XmlReader, TextReader o XamlReader che eserne il wrapping tramite il caricamento con le API del lettore.
Varie firme di Save salvare un oggetto grafico e produrre l'output come flusso, file o XmlWriter/TextWriter istanza.
Transform converte XAML collegando un percorso di caricamento e un percorso di salvataggio come singola operazione. È possibile usare un contesto di schema diverso o un sistema di tipi di supporto diverso per XamlReader e XamlWriter, che influisce sul modo in cui viene trasformato il codice XAML risultante.
Per altre informazioni su come usare XamlServices, vedere classe XAMLServices e Lettura XAML di base o Scrittura.
Sistema di tipi XAML
Il sistema di tipi XAML fornisce le API necessarie per lavorare con un determinato nodo di un flusso di nodi XAML.
XamlType è la rappresentazione per un oggetto, ovvero l'elaborazione tra un nodo dell'oggetto iniziale e un nodo dell'oggetto finale.
XamlMember è la rappresentazione per un membro di un oggetto, ovvero l'elaborazione tra un nodo membro iniziale e un nodo membro finale.
Api come GetAllMembers e GetMember e DeclaringType segnalano le relazioni tra un XamlType e un XamlMember.
Il comportamento predefinito del sistema di tipi XAML implementato dai servizi XAML .NET è basato su Common Language Runtime (CLR) e sull'analisi statica dei tipi CLR negli assembly tramite reflection. Pertanto, per un tipo CLR specifico, l'implementazione predefinita del sistema di tipi XAML può esporre lo schema XAML di tale tipo e i relativi membri e segnalarlo in termini di sistema di tipi XAML. Nel sistema di tipi XAML predefinito, il concetto di assegnabilità dei tipi viene mappato all'ereditarietà CLR e i concetti relativi a istanze, tipi di valore e così via vengono mappati anche ai comportamenti e alle funzionalità di supporto di CLR.
Informazioni di riferimento sulle funzionalità del linguaggio XAML
Per supportare XAML, i servizi XAML .NET forniscono implementazione specifica dei concetti del linguaggio XAML definiti per lo spazio dei nomi XAML del linguaggio XAML. Queste pagine sono documentate come pagine di riferimento specifiche. Le funzionalità del linguaggio sono documentate dal punto di vista del comportamento di queste funzionalità del linguaggio quando vengono elaborate da un lettore XAML o da un writer XAML definito dai servizi XAML .NET. Per altre informazioni, vedere spazio dei nomi XAML (x:) Funzionalità del linguaggio.
.NET Desktop feedback