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 descritti si trova nell'assembly System.Xaml. I servizi includono lettori e writer, classi di schemi e supporto di schemi, factory, attribuzione di classi, supporto intrinseco del linguaggio XAML e altre funzionalità del linguaggio XAML.

Informazioni sulla documentazione

La documentazione concettuale per i servizi XAML .NET presuppone che l'utente abbia un'esperienza precedente con il linguaggio XAML e sappia come possa essere applicato a un framework specifico, ad esempio Windows Presentation Foundation (WPF) o Windows Workflow Foundation o a un'area con funzionalità tecnologiche specifiche, ad esempio le funzionalità di personalizzazione delle compilazioni in Microsoft.Build.Framework.XamlTypes. Questa documentazione non tenta di spiegare le nozioni di base di XAML come linguaggio di markup, la 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 riguarda scenari di integrazione ed estendibilità del linguaggio XAML. Questo potrebbe includere uno degli scenari seguenti:

  • Estensione delle funzionalità dei lettori XAML o dei writer XAML di base (elaborazione diretta del flusso di nodi XAML, derivazione di un lettore XAML o di un writer XAML personalizzato).

  • Definizione di tipi personalizzati utilizzabili da XAML che non hanno dipendenze specifiche dal framework e attribuzione 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 le origini di markup XAML.

  • Scrittura di convertitori di valori XAML (estensioni di markup, convertitori di tipi per tipi personalizzati).

  • Definizione di un contesto dello schema XAML personalizzato (usando tecniche alternative di caricamento degli assembly per le origini dei tipi di supporto, usando tecniche di ricerca di tipi noti anziché riflettere sempre gli assembly, usando concetti di assembly caricati che non usano il Common Language Runtime (CLR) AppDomain e il relativo modello di sicurezza associato).

  • Estensione del sistema dei tipi XAML di base.

  • Uso delle tecniche Lookup o Invoker per influenzare il sistema dei tipi XAML e il modo in cui vengono valutati i supporti dei tipi.

Se si sta cercando materiale introduttivo su XAML come linguaggio, si può provare Panoramica di XAML (WPF .NET). Questo argomento illustra XAML per un pubblico nuovo sia a Windows Presentation Foundation (WPF) che all'uso del markup XAML e delle funzionalità del linguaggio XAML. Un altro documento utile è il materiale introduttivo della 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 presente in alcuna implementazione XAML specifica del framework è una rappresentazione del sistema dei tipi per XAML. La rappresentazione del sistema dei tipi presenta XAML in un modo orientato agli oggetti che si concentra sulle funzionalità XAML senza dipendere da funzionalità specifiche dei framework.

Il sistema dei tipi XAML non è limitato dal formato di markup o dalle specifiche di runtime dell'origine XAML, né è limitato da un sistema dei tipi di supporto specifico. Il sistema dei tipi XAML include rappresentazioni di oggetti per tipi, membri, contesti dello schema XAML, concetti a livello XML e altri concetti del linguaggio XAML o elementi intrinseci XAML. L'uso o l'estensione del sistema dei tipi XAML consente di derivare da classi come lettori XAML e writer XAML ed estendere le funzionalità delle rappresentazioni XAML in funzionalità specifiche abilitate da un framework, da una tecnologia o da un'applicazione che utilizza o genera XAML. Il concetto di contesto dello schema XAML consente operazioni pratiche di scrittura di grafici di oggetti dalla combinazione di un'implementazione del writer di oggetti XAML, del sistema di tipi di supporto di una tecnologia come comunicato tramite le informazioni sull'assembly nel contesto e dell'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 tecnologie specifiche che usano XAML come linguaggio, è utile comprendere il concetto di flusso di nodi XAML e il modo in cui tale concetto modella l'API e la terminologia. Il flusso di nodi XAML è un elemento intermedio concettuale tra una rappresentazione del linguaggio XAML e il grafico di oggetti rappresentato o definito da XAML.

  • Un lettore XAML è un'entità che elabora XAML in qualche forma e produce un flusso di nodi XAML. Nell'API un lettore XAML è rappresentato dalla classe di 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 di base XamlWriter.

    I due scenari più comuni che coinvolgono XAML sono il caricamento di XAML per creare un'istanza di un grafico di oggetti e il salvataggio di un grafico di oggetti da un'applicazione o da uno strumento e la produzione di una rappresentazione XAML (in genere nel formato di markup salvato come file di testo). Il caricamento di XAML e la creazione di un grafico di oggetti viene spesso indicato in questa documentazione come percorso di caricamento. Il salvataggio o la serializzazione di un grafico di oggetti 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 la rappresentazione XAML in XamlXmlReader. XamlXmlReader è una sottoclasse di XamlReader.

  • Il risultato è un flusso di nodi XAML. È possibile accedere ai singoli nodi del flusso di nodi XAML usando l'API XamlXmlReader / XamlReader. L'operazione più tipica in questo caso consiste nell'avanzare attraverso il flusso di nodi XAML, elaborando ogni nodo usando la metafora del "record corrente".

  • Passare i nodi risultanti dal flusso di nodi XAML a un'API XamlObjectWriter. XamlObjectWriter è una sottoclasse di XamlWriter.

  • XamlObjectWriter scrive un grafico di oggetti, un oggetto alla volta, in base all'avanzamento nel flusso di nodi XAML di origine. La scrittura degli oggetti viene eseguita con l'assistenza di un contesto dello schema XAML e di 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 di nodi XAML per ottenere l'oggetto radice del grafico di oggetti.

    Il tipo più comune di percorso di salvataggio può essere descritto come segue:

  • Iniziare con il grafico di oggetti della fase di esecuzione di un'intera applicazione, il contenuto dell'interfaccia utente e lo stato di una fase di esecuzione o un segmento più piccolo della rappresentazione dell'oggetto di un'applicazione complessiva in fase di esecuzione.

  • Da un oggetto iniziale logico, ad esempio la radice dell'applicazione o la radice del documento, caricare gli oggetti in XamlObjectReader. XamlObjectReader è una sottoclasse di XamlReader.

  • Il risultato è un flusso di nodi XAML. È possibile accedere ai singoli nodi del flusso di nodi XAML usando l'API XamlObjectReader e XamlReader. L'operazione più tipica in questo caso consiste nell'avanzare attraverso il flusso di nodi XAML, elaborando ogni nodo usando la metafora del "record corrente".

  • Passare i nodi risultanti dal flusso di nodi XAML a un'API XamlXmlWriter. XamlXmlWriter è una sottoclasse di XamlWriter.

  • XamlXmlWriter scrive il codice XAML in una codifica UTF XML. È possibile salvarlo come file di testo, come flusso o in altri formati.

  • Chiamare Flush per ottenere l'output finale.

Per altre informazioni sui concetti di flusso di nodi XAML, vedere Informazioni su strutture e concetti del flusso del nodo XAML.

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 implementano un percorso di caricamento. È possibile caricare un file o un flusso oppure caricare un oggetto XmlReader, TextReader o XamlReader che esegue il wrapping dell'input XAML caricandolo con le API del lettore.

  • Varie firme di Save salvano un grafico di oggetti e producono l'output come flusso, file o istanza di XmlWriter/TextWriter.

  • Transform converte il codice XAML collegando un percorso di caricamento e un percorso di salvataggio come un'unica operazione. Per XamlReader e XamlWriterè possibile usare un contesto dello schema diverso o un sistema di tipi di supporto diverso, essendo questi gli elementi che influenzano il modo in cui il codice XAML risultante viene trasformato.

Per altre informazioni su come usare XamlServices, vedere Classe XAMLServices e lettura o scrittura di XAML di base.

Sistema di tipi XAML

Il sistema di tipi XAML fornisce le API necessarie per lavorare con un singolo nodo specifico di un flusso di nodi XAML.

XamlType è la rappresentazione di un oggetto, ovvero l'elaborazione tra un nodo oggetto iniziale e un nodo oggetto finale.

XamlMember è la rappresentazione di un membro di un oggetto, ovvero l'elaborazione tra un nodo membro iniziale e un nodo membro finale.

Le API come GetAllMembers, GetMember e DeclaringType segnalano le relazioni tra XamlType e XamlMember.

Il comportamento predefinito del sistema di tipi XAML implementato dai servizi XAML .NET è basato sul 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 anche i concetti di istanze, tipi valore e così via vengono mappati ai comportamenti e alle funzionalità di supporto di CLR.

Riferimento per le funzionalità del linguaggio XAML

Per supportare XAML, i servizi XAML .NET forniscono un'implementazione specifica dei concetti del linguaggio XAML come definito 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 XAML Namespace (x:) Language Features.