Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
XAML (Extensible Application Markup Language) è il linguaggio di markup dichiarativo usato per definire l'interfaccia utente nelle app WinUI. Descrivi la struttura e le proprietà dell'interfaccia utente nei file .xaml e gestisci la logica e gli eventi nel relativo file code-behind.
Che cos'è XAML?
XAML è un linguaggio basato su XML per la creazione di oggetti e l'impostazione delle relative proprietà. Dichiari elementi dell'interfaccia utente, pulsanti, caselle di testo, layout, nel markup e usi un file code-behind per rispondere agli eventi e modificare tali elementi in fase di esecuzione.
Poiché XAML è un formato di interscambio basato su testo, i progettisti e gli sviluppatori possono lavorare in modo indipendente: i progettisti creano la struttura visiva in XAML, gli sviluppatori collegano la logica nel code-behind e possono eseguire l'iterazione senza bloccarsi tra loro.
Sintassi XAML di base
Tutto il codice XAML valido è anche xml valido, ma XAML aggiunge i propri concetti. Ad esempio, la sintassi dell'elemento proprietà consente di impostare una proprietà come elemento XML annidato anziché come stringa di attributo, xml valido, ma con significato aggiuntivo in XAML.
Per informazioni dettagliate sulla sintassi completa, vedi guida alla sintassi XAML.
XAML e Visual Studio
Visual Studio'editor XAML fornisce IntelliSense, completamento automatico e un'area di progettazione visiva. Gli errori vengono visualizzati inline come squiggles prima della compilazione. Non devi memorizzare tutte le regole di sintassi — lascia che sia l'IDE a guidarti.
Spazi dei nomi XAML
Ogni file XAML dichiara gli spazi dei nomi nell'elemento radice. Una tipica pagina WinUI inizia con due elementi:
<Page
x:Class="Application1.BlankPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
-
Spazio dei nomi predefinito (
xmlns=): contiene tutti i controlli WinUI predefiniti, il testo, la grafica, il data binding e i tipi di stile. La maggior parte del codice XAML usa questo spazio dei nomi senza prefisso. -
Spazio dei nomi del linguaggio XAML (
xmlns:x=): mappato alx:prefisso, fornisce funzionalità del linguaggio di base.
Lo x: spazio dei nomi
| Attribute | Purpose |
|---|---|
| x:Key | Chiave univoca per una risorsa in un ResourceDictionary |
| x:Class | Collega il file XAML alla classe code-behind corrispondente |
| x:Name | Assegna un nome di runtime in modo che code-behind possa fare riferimento all'elemento |
| x:Uid | Contrassegna gli elementi per la sostituzione delle risorse localizzate |
| Tipi intrinseci XAML | Esprime valori semplici (ad esempio x:Boolean) come elementi oggetto |
Mappatura dei tipi personalizzati
Per usare tipi personalizzati o tipi di libreria di terze parti in XAML, dichiarare un prefisso dello spazio dei nomi mappato allo spazio dei nomi del codice:
xmlns:myTypes="using:myCompany.myTypes"
Fare quindi riferimento a questi tipi con il prefisso :
<myTypes:CustomButton/>
Per informazioni dettagliate, incluse le considerazioni su C++/CX, vedi Spazi dei nomi XAML e mapping degli spazi dei nomi.
Spazi dei nomi di progettazione e compatibilità
Spesso negli XAML generati dagli strumenti vengono visualizzati i prefissi d: (di progettazione) e mc: (di compatibilità del markup). Questi elementi supportano gli strumenti di progettazione e possono essere tranquillamente ignorati in fase di esecuzione. Per informazioni dettagliate, vedi Altri spazi dei nomi XAML.
Estensioni di markup
Le estensioni di markup consentono di impostare una proprietà su un elemento che non può essere espresso come stringa normale, ad esempio un riferimento a una risorsa condivisa o a un data binding. Usano la sintassi delle parentesi graffe:
<Button Style="{StaticResource SearchButtonStyle}"/>
Senza {StaticResource}, è necessaria una sintassi dettagliata degli elementi di proprietà per assegnare un oggetto Style. Le estensioni di markup mantengono conciso il codice XAML.
Windows Runtime XAML supporta queste estensioni di markup:
| Extension | Purpose |
|---|---|
| {x:Bind} | Data binding in fase di compilazione (prestazioni ottimali) |
| {Binding} | Binding dei dati in fase di esecuzione |
| {StaticResource} | Fare riferimento a una ResourceDictionary voce tramite chiave |
| {ThemeResource} | Come {StaticResource}, ma viene aggiornato quando il tema dell'app cambia |
| {TemplateBinding} | Eseguire il binding a una proprietà dell'elemento padre di un modello di controllo |
| {RelativeSource} | Eseguire il binding relativo all'elemento padre basato su modelli |
| {CustomResource} | Ricerca avanzata delle risorse personalizzate |
| {x:Null} | Impostare in modo esplicito un valore nullable su null |
Le estensioni di markup possono essere annidate; quella più interna viene valutata per prima.
Events
Collegare gestori eventi in XAML specificando l'evento come attributo e il nome del metodo del gestore come valore:
<Button Click="showUpdatesButton_Click">Show updates</Button>
Il compilatore prevede un metodo corrispondente nel code-behind con la firma del delegato corretta:
private void showUpdatesButton_Click(object sender, RoutedEventArgs e)
{
// your code
}
void showUpdatesButton_Click(Windows::Foundation::IInspectable const&, Microsoft::UI::Xaml::RoutedEventArgs const&);
Annotazioni
In C++/CX ogni pagina XAML ha due file code-behind: un'intestazione (.xaml.h) e un'implementazione (.xaml.cpp).
Per altre informazioni, vedere Panoramica degli eventi e degli eventi indirizzati.
Dizionari di risorse
Un ResourceDictionary memorizza oggetti riutilizzabili — pennelli, stili, modelli — identificati da x:Key. Le risorse possono essere disponibili nella sezione delle risorse di una pagina o in un file separato .xaml . Per una spiegazione completa, vedi Riferimenti alle risorse ResourceDictionary e XAML.
XAML e XML
XAML è un superset di XML con alcuni aspetti da conoscere:
- Distinzione tra maiuscole e minuscole: i nomi degli elementi e degli attributi devono corrispondere esattamente.
-
xml:lang: valido in XAML, ma corrisponde al comportamento di runtime a livello di framework, non al comportamento di parsing. - Codifica: sono supportati solo UTF-8 e UTF-16.
Ambiti dei nomi XAML
I nomi assegnati con x:Name devono essere univoci all'interno dell'ambito dei nomi. Gli scope dei nomi sono particolarmente rilevanti all'interno dei template di controllo, in cui i nomi sono definiti nell'ambito del template anziché della pagina. Per informazioni dettagliate, vedi Ambiti dei nomi XAML.
Suggerimenti per le prestazioni
- Definisci i pennelli usati più frequentemente come risorse
SolidColorBrushanziché ripetere valori letterali di colore. - Collocare le risorse condivise tra più pagine in
Application.Resources; mantenere locali a quella pagina le risorse specifiche della pagina. - Rimuovere le risorse inutilizzate (chiavi senza
{StaticResource}riferimenti) prima della spedizione. - Evitare di eseguire l'override dei modelli di controllo: le impostazioni predefinite sono già ottimizzate per le prestazioni di carico.
- Usare
Bordere contenitori di layout invece di disegnare lo stesso pixel più volte (overdraw). - Usare i modelli di elemento predefiniti per
ListVieweGridView. La relativaPresenterlogica viene ottimizzata per elenchi di grandi dimensioni.
Per altre indicazioni, vedi Ottimizzare il markup XAML.
Eseguire il debug di XAML
Non è possibile impostare punti di interruzione nei .xaml file, ma Visual Studio fornisce altre informazioni:
- Tempo di progettazione: gli squiggles e i marcatori di errore vengono visualizzati inline durante la digitazione.
-
Runtime: gli errori di parsing generano un'eccezione
XamlParseException(o un'eccezione strutturata simile in C++/CX) con informazioni contestuali sul numero di riga del file XAML.
Per la gestione degli errori di runtime, vedere Gestione delle eccezioni per le app WinUI in C# o Visual Basic. Per avviare una sessione di debug, vedere Avviare una sessione di debug.