SlideShare a Scribd company logo
XAML
cosa come perché
//Publish/
Speaker
Nicolò Carandini
MVP Visual C#
n.carandini@tpcware.com
Twitter: @TPCWare
blogs.ugidotnet.org/Nick60
Agenda
• Interfaccia utente
• Scatole cinesi e alberi visuali
• Programmazione dichiarativa
• ContentPropertyAttribute
• Assegnazione di valori complessi agli attributi
• Conversione implicita dei valori degli attributi
• Eredità OOP ed eredità visuale
• Codice "tradizionale" e codice XAML
• Link utili
Interfaccia utente
Scatole cinesi e alberi visualiPage
Grid
StackPanel
TextBlock
TextBlock
Image
TextBlock
StackPanel
TextBlock TextBlock
Page
Grid
StackPanel
TextBlock
TextBlock
Image
TextBlock
StackPanel
TextBlock
TextBlock
Programmazione dichiarativa
• XAML deriva da XML e per tale motivo è sintatticamente
molto adatto a descrivere strutture gerarchiche padre-figli.
• In XAML si dichiarano le relazioni di parentela (contenitore-
contenuto/i) e il valore degli attributi.
• Ogni elemento XAML corrisponde alla dichiarazione di una
istanza della classe corrispondente.
• Gli attributi XAML corrispondono alle proprietà e agli eventi di
tali classi.
• Il framework si incarica di effettuare il rendering di ciascun
elemento e di inoltrare gli eventi prodotti dalla UI al codice
associato.
Esempio
• Nota Bene: non c’è alcuna informazione relativa al posizionamento
sullo schermo dei vari elementi, che viene calcolata dal Layout
System a partire dalle proprietà dei singoli elementi e dalla loro
relazione di parentela.
ContentPropertyAttribute
Assegnazione di valori complessi agli attributi
• Quando non è possibile assegnare il valore di un attributo mediante
una stringa, allora occorre utilizzare la sintassi estesa:
Conversione implicita dei valori degli attributi
• XAML è in grado di convertire alcuni valori testuali nei corrispondenti
tipi.
Eredità object-oriented Vs. eredità visuale
Codice "tradizionale" e codice XAML
XAML è solo uno dei possibili modi di rappresentare il grafo di oggetti
che implementano la UI, volendo possiamo farlo via codice:
Link utili
• Il fattore X
http://www.domusdotnet.org/articoli/introduzione-a-xaml.aspx
• XAML Layout System
http://www.domusdotnet.org/articoli/xaml-layout-system.aspx
• XAML Transformations
http://www.domusdotnet.org/articoli/xaml-transformations.aspx

More Related Content

More from Nicolò Carandini

Game matching with SignalR
Game matching with SignalRGame matching with SignalR
Game matching with SignalR
Nicolò Carandini
 
Swagger loves WebAPI
Swagger loves WebAPISwagger loves WebAPI
Swagger loves WebAPI
Nicolò Carandini
 
Xamarin Workbooks
Xamarin WorkbooksXamarin Workbooks
Xamarin Workbooks
Nicolò Carandini
 
Swagger per tutti
Swagger per tuttiSwagger per tutti
Swagger per tutti
Nicolò Carandini
 
Web app slots and webapi versioning
Web app slots and webapi versioningWeb app slots and webapi versioning
Web app slots and webapi versioning
Nicolò Carandini
 
Intro xamarin forms
Intro xamarin formsIntro xamarin forms
Intro xamarin forms
Nicolò Carandini
 
Swagger pertutti
Swagger pertuttiSwagger pertutti
Swagger pertutti
Nicolò Carandini
 
Windows 10 design
Windows 10 designWindows 10 design
Windows 10 design
Nicolò Carandini
 
Windows 10 IoT
Windows 10 IoTWindows 10 IoT
Windows 10 IoT
Nicolò Carandini
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con Xamarin
Nicolò Carandini
 
Universal Apps localization and globalization
Universal Apps localization and globalizationUniversal Apps localization and globalization
Universal Apps localization and globalization
Nicolò Carandini
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e Katana
Nicolò Carandini
 
Azure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET FrameworkAzure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET Framework
Nicolò Carandini
 
Sviluppare app per iOS e Android con Xamarin e Visual Studio
Sviluppare app per iOS e Android con Xamarin e Visual StudioSviluppare app per iOS e Android con Xamarin e Visual Studio
Sviluppare app per iOS e Android con Xamarin e Visual Studio
Nicolò Carandini
 
Web in real time con signalR
Web in real time con signalRWeb in real time con signalR
Web in real time con signalR
Nicolò Carandini
 
Self hosted Services with .NET OWin
Self hosted Services with .NET OWinSelf hosted Services with .NET OWin
Self hosted Services with .NET OWin
Nicolò Carandini
 
Web api 2.0
Web api 2.0Web api 2.0
Web api 2.0
Nicolò Carandini
 
Web app slots and WebAPI versioning
Web app slots and WebAPI versioningWeb app slots and WebAPI versioning
Web app slots and WebAPI versioning
Nicolò Carandini
 
Game matching with SignalR
Game matching with SignalRGame matching with SignalR
Game matching with SignalR
Nicolò Carandini
 
Swagger loves webapi
Swagger loves webapiSwagger loves webapi
Swagger loves webapi
Nicolò Carandini
 

More from Nicolò Carandini (20)

Game matching with SignalR
Game matching with SignalRGame matching with SignalR
Game matching with SignalR
 
Swagger loves WebAPI
Swagger loves WebAPISwagger loves WebAPI
Swagger loves WebAPI
 
Xamarin Workbooks
Xamarin WorkbooksXamarin Workbooks
Xamarin Workbooks
 
Swagger per tutti
Swagger per tuttiSwagger per tutti
Swagger per tutti
 
Web app slots and webapi versioning
Web app slots and webapi versioningWeb app slots and webapi versioning
Web app slots and webapi versioning
 
Intro xamarin forms
Intro xamarin formsIntro xamarin forms
Intro xamarin forms
 
Swagger pertutti
Swagger pertuttiSwagger pertutti
Swagger pertutti
 
Windows 10 design
Windows 10 designWindows 10 design
Windows 10 design
 
Windows 10 IoT
Windows 10 IoTWindows 10 IoT
Windows 10 IoT
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con Xamarin
 
Universal Apps localization and globalization
Universal Apps localization and globalizationUniversal Apps localization and globalization
Universal Apps localization and globalization
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e Katana
 
Azure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET FrameworkAzure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET Framework
 
Sviluppare app per iOS e Android con Xamarin e Visual Studio
Sviluppare app per iOS e Android con Xamarin e Visual StudioSviluppare app per iOS e Android con Xamarin e Visual Studio
Sviluppare app per iOS e Android con Xamarin e Visual Studio
 
Web in real time con signalR
Web in real time con signalRWeb in real time con signalR
Web in real time con signalR
 
Self hosted Services with .NET OWin
Self hosted Services with .NET OWinSelf hosted Services with .NET OWin
Self hosted Services with .NET OWin
 
Web api 2.0
Web api 2.0Web api 2.0
Web api 2.0
 
Web app slots and WebAPI versioning
Web app slots and WebAPI versioningWeb app slots and WebAPI versioning
Web app slots and WebAPI versioning
 
Game matching with SignalR
Game matching with SignalRGame matching with SignalR
Game matching with SignalR
 
Swagger loves webapi
Swagger loves webapiSwagger loves webapi
Swagger loves webapi
 

Xaml introduction

  • 2. Speaker Nicolò Carandini MVP Visual C# n.carandini@tpcware.com Twitter: @TPCWare blogs.ugidotnet.org/Nick60
  • 3. Agenda • Interfaccia utente • Scatole cinesi e alberi visuali • Programmazione dichiarativa • ContentPropertyAttribute • Assegnazione di valori complessi agli attributi • Conversione implicita dei valori degli attributi • Eredità OOP ed eredità visuale • Codice "tradizionale" e codice XAML • Link utili
  • 5. Scatole cinesi e alberi visualiPage Grid StackPanel TextBlock TextBlock Image TextBlock StackPanel TextBlock TextBlock Page Grid StackPanel TextBlock TextBlock Image TextBlock StackPanel TextBlock TextBlock
  • 6. Programmazione dichiarativa • XAML deriva da XML e per tale motivo è sintatticamente molto adatto a descrivere strutture gerarchiche padre-figli. • In XAML si dichiarano le relazioni di parentela (contenitore- contenuto/i) e il valore degli attributi. • Ogni elemento XAML corrisponde alla dichiarazione di una istanza della classe corrispondente. • Gli attributi XAML corrispondono alle proprietà e agli eventi di tali classi. • Il framework si incarica di effettuare il rendering di ciascun elemento e di inoltrare gli eventi prodotti dalla UI al codice associato.
  • 7. Esempio • Nota Bene: non c’è alcuna informazione relativa al posizionamento sullo schermo dei vari elementi, che viene calcolata dal Layout System a partire dalle proprietà dei singoli elementi e dalla loro relazione di parentela.
  • 9. Assegnazione di valori complessi agli attributi • Quando non è possibile assegnare il valore di un attributo mediante una stringa, allora occorre utilizzare la sintassi estesa:
  • 10. Conversione implicita dei valori degli attributi • XAML è in grado di convertire alcuni valori testuali nei corrispondenti tipi.
  • 11. Eredità object-oriented Vs. eredità visuale
  • 12. Codice "tradizionale" e codice XAML XAML è solo uno dei possibili modi di rappresentare il grafo di oggetti che implementano la UI, volendo possiamo farlo via codice:
  • 13. Link utili • Il fattore X http://www.domusdotnet.org/articoli/introduzione-a-xaml.aspx • XAML Layout System http://www.domusdotnet.org/articoli/xaml-layout-system.aspx • XAML Transformations http://www.domusdotnet.org/articoli/xaml-transformations.aspx