# XAML

XAML (abbreviazione di eXtensible Application Markup Language, e pronunciata "Zammel") è un linguaggio di markup basato su XML, utilizzato per descrivere l'interfaccia grafica delle applicazioni basate sulla libreria Windows Presentation Foundation.
Il linguaggio XAML si basa sugli oggetti contenuti nel Common Language Runtime e sulle loro proprietà o eventi.
Esiste un linguaggio analogo allo XAML: XML User Interface Language (XUL). Esso è un linguaggio open source dedicato alla creazione di applicazioni derivate dal progetto Mozilla.
Nel 2007, l'European Committee for Interoperable Systems dopo segnalazione di aziende di informatica ha investigato sulla possibilità che la Microsoft volesse utilizzare l'XAML per sostituire lo standard HTML.
XAML è ampiamente utilizzato nelle tecnologie .NET Framework 3.0 e .NET Framework 4.0, in particolare Windows Presentation Foundation (WPF), Silverlight, Windows Workflow Foundation (WF), Windows Runtime XAML Framework e app di Windows Store. In WPF, XAML forma un linguaggio di markup dell'interfaccia utente per definire elementi dell'interfaccia utente, data binding, eventi e altre funzionalità. In WF, i flussi di lavoro possono essere definiti utilizzando XAML. XAML può essere utilizzato anche nelle applicazioni Silverlight, nell'obsoleto Windows 10 Mobile (in precedenza Windows Phone) e Universal Windows Platformapp, chiamate anche app di Windows Store.
Gli elementi XAML vengono mappati direttamente alle istanze di oggetti Common Language Runtime , mentre gli attributi XAML vengono mappati alle proprietà e agli eventi Common Language Runtime su tali oggetti. I file XAML possono essere creati e modificati con strumenti di progettazione visiva come Microsoft Expression Blend, Microsoft Visual Studio e il visual designer di Windows Workflow Foundation hostable. Possono anche essere creati e modificati con un editor di testo standard, un editor di codice come XAMLPad o un editor grafico come Vector Architect.
Tutto ciò che viene creato o implementato in XAML può essere espresso utilizzando un linguaggio .NET più tradizionale, come C # o Visual Basic .NET. Tuttavia, un aspetto chiave della tecnologia è la ridotta complessità necessaria per gli strumenti per elaborare XAML, poiché si basa su XML. Di conseguenza, stanno emergendo una varietà di prodotti, in particolare nello spazio WPF, che creano applicazioni basate su XAML. Poiché XAML si basa semplicemente su XML, sviluppatori e progettisti sono in grado di condividere e modificare i contenuti liberamente tra di loro senza richiedere la compilazione. XAML beneficia anche dell'essere una definizione dichiarativa dell'interfaccia utente anziché del codice procedurale per generarla.

## Tecnologia

Un file XAML può essere compilato in un file .BAML (Binary Application Markup Language), che può essere inserito come risorsa in un assembly .NET Framework. In fase di esecuzione, il motore del framework estrae il file .BAML dalle risorse dell'assembly, lo analizza e crea un flusso di lavoro o un albero visivo WPF corrispondente.
Quando viene utilizzato in Windows Presentation Foundation, XAML viene usato per descrivere le interfacce utente visive . WPF consente la definizione di oggetti 2D e 3D, rotazioni, animazioni e una varietà di altri effetti e funzionalità.
Quando viene utilizzato in contesti Windows Workflow Foundation, XAML viene utilizzato per descrivere la logica dichiarativa potenzialmente a esecuzione prolungata, come quelle create dagli strumenti di modellazione dei processi e dai sistemi di regole. Il formato di serializzazione per i flussi di lavoro era precedentemente chiamato XOML, per differenziarlo dall'uso del markup dell'interfaccia utente di XAML, ma ora non sono più distinti. Tuttavia, l'estensione del file per i file contenenti il markup del flusso di lavoro è ancora "XOML".

### Modelli

XAML utilizza un modo specifico per definire l'aspetto e il design chiamato Template; a differenza della sintassi Cascading Style Sheet, è più vicino a XBL.

## Esempio

Questo esempio di Windows Presentation Foundation mostra il testo "Ciao, mondo!" nel contenitore XAML di primo livello denominato Canvas.
Potrebbe essere necessario modificare lo schema Microsoft per funzionare sul computer. Utilizzando uno schema consigliato da Microsoft, l'esempio può essere anche:
Questo può essere integrato in una pagina Web se WPF è installato utilizzando XBAP (applicazioni browser XAML) che sono applicazioni compilate in esecuzione in un ambiente sandbox ospitato nel browser. Un altro modo è utilizzare il plug-in Silverlight. Il codice non può essere incluso direttamente in una pagina HTML; piuttosto deve essere caricato nella pagina tramite JavaScript. Se è installato .NET 3.0 o versione successiva, i file XAML sciolti possono anche essere visualizzati da soli in un browser Web compatibile (inclusi l'obsoleto Internet Explorer e Firefox) insieme a .NET Framework 3.0, senza la necessità del plug-in Silverlight. I file XAML sciolti sono file di markup limitati alla definizione del contenuto visivo di cui eseguire il rendering. Non sono compilati con un'applicazione.
Il file MySilverlight.js deve contenere il codice che carica il codice XAML precedente (come file XML) sotto l'elemento HTML MySilverlight.
Una parte cruciale dell'utilizzo di XAML al massimo delle sue potenzialità è fare un uso appropriato dell'associazione, oltre ad essere a proprio agio con la creazione di elementi utente personalizzati come richiesto, per le proprie esigenze specifiche. Il binding può essere eseguito come segue:

## Differenze tra le versioni di XAML

Esistono quattro principali implementazioni Microsoft di XAML:
* La versione di Windows Presentation Foundation, utilizzata per .NET Framework a partire da .NET Framework 3.0
* La versione Silverlight 3
* La versione Silverlight 4
* Il Windows 8 XAML/Jupiter versione
Queste versioni presentano alcune differenze nel comportamento di analisi.
Inoltre, il parser XAML di Silverlight 4 non è compatibile al 100% con le versioni precedenti dei file Silverlight 3. I file XAML accettati da Silverlight 3 potrebbero non essere accettati o vengono analizzati in modo diverso dal parser di Silverlight 4.