3. Software Engineer @ Funambol
Microsoft MVP – Windows Phone Development
Nokia Developer Champion
Autore dei libri «Sviluppare applicazioni per Windows Phone 8»
e «Windows Phone 8 Development Succinctly»
Membro della community DotNetLombardia e fondatore di
WPDev Fusion
chi sono
4. Universal app
Cosa cambia per lo sviluppatore?
• La gestione del layout
• I nuovi controlli XAML
• La navigazione
• La gestione dello storage
Quale percorso?
agenda
6. Convergenza delle API
6
Il Windows Runtime (WinRT) è la
piattaforma che consente di condividere il
runtime e le API usate dalle Store app
(telefono e tablet / pc)
Convergenza quasi totale in 8.1
• L’obiettivo è la convergenza al 100% per gli scenari di
sviluppo
• 8.0 aveva circa il 30% di API convergenti
• 8.1 ha più del 90% di API convergenti
7. • Due applicazioni separate per le due piattaforme
• Un progetto comune, che permette di condividere:
• Codice
• Controlli XAML
• Asset grafici
• Template basato sul meccanismo dei linked files: i file è come
se fossero presenti in entrambi i progetti, ma fisicamente
sono memorizzati in una sola posizione
Welcome Universal Windows app
10. La gestione del layout – WP 8.0
1.0x 1.6x 1.5x 2.25x
480x800 480x800 480x853 480x853
11. La gestione del layout – WP 8.1
7”
6”
5”
4.5”
canvas virtualmente infinito
Limiti superiori di X, Y vengono
calcolati a seconda del
dispositivo utilizzando
• dimensione del display
• risoluzione dello schermo
Funziona sia per i device attuali
che per quelli futuri
Stesso approccio di Windows
8.1
y
12. La gestione del layout – WP 8.1
12:38
larghezza
altezza
“raw” pixels
12:38
larghezza
altezza
“view” pixels
diviso per il
fattore di
scala
15. • In alcuni scenari (ad esempio, un gioco) non è possibile
mostrare più contenuto
• Il controllo ViewBox consente di applicare il vecchio approccio
di 8.0
• Il contenuto all’interno del controllo viene semplicemente
scalato
Il controllo ViewBox
19. • Il controllo Panorama è stato sostituito dal
controllo Hub
• E’ composto da HubSection per definire le
varie sezioni
• Principale differenza con il controllo
Panorama: le sezioni sono definite da un
DataTemplate
Panorama
20. <Hub>
<HubSection Header="Prima sezione">
<DataTemplate>
<Image Source="/Assets/small-logo.jpg" />
</DataTemplate>
</HubSection>
<HubSection Header="Seconda sezione">
<DataTemplate>
<StackPanel>
<TextBlock Text="Contenuto della seconda sezione" />
</StackPanel>
</DataTemplate>
</HubSection>
</Hub>
Il controllo Hub
21. Il controllo ApplicationBar è stato sostituito dal controllo
CommandBar
ApplicationBar
<Page.BottomAppBar>
<CommandBar x:Name="commandBar">
<CommandBar.PrimaryCommands>
<AppBarButton Label="edit" Icon="Edit" />
<AppBarButton Label="favorite" Icon="Favorite" />
<AppBarSeparator />
<AppBarToggleButton Label="play" Icon="Play" />
</CommandBar.PrimaryCommands>
<CommandBar.SecondaryCommands>
<AppBarButton Label="help" Icon="Question" />
</CommandBar.SecondaryCommands>
</CommandBar>
</Page.BottomAppBar>
23. • E’ stato sostituito dai controlli GridView e ListView
• Il controllo GridView è ottimizzato per una visualizzazione a
griglia
• Il controllo ListView è ottimizzato per una visualizzazione a
lista
• Entrambi non richiedono più di creare una classe ad hoc per
gestire il raggruppamento
Il controllo LongListSelector
33. • Si usa il metodo Navigate() della classe Frame
• E’ richiesto il tipo della pagina e non l’url
• Ora è supportato il passaggio di oggetti complessi
private void Comics_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
Comic selectedComic = Comics.SelectedItem as Comic;
Frame.Navigate(typeof (DetailPage), selectedComic);
}
Navigazione tra le pagine
34. • La classe Frame sostituisce il NavigationService
• BackStack per accedere allo stack delle pagine
• GoBack() per tornare alla pagina precedente
• CanGoBack per sapere se ci sono pagine nello stack
• Di default viene sempre restituita una nuova istanza della
pagina
• E’ possibile controllarlo tramite la proprietà
NavigationCacheMode
Gestione dello stack delle pagine
35. Gestire lo stato della pagina
NavigationCacheMode.Disabled
NavigationCacheMode.Enabled Required
Page 1 Page 2 Page 3
new new
?
36. • Nuovo comportamento predefinito per allinearsi a Windows
8: il pulsante Back porta all’applicazione precedente
• Tutti i template di Visual Studio (tranne Blank App)
contengono la classe NavigationHelper che include la logica
per mantenere il comportamento tradizionale
• E’ possibile modificarlo pagina per pagina sottoscrivendosi
all’evento
Windows.Phone.UI.Input.HardwareButtons.BackPressed
Il pulsante Back
40. • Alcune feature non sono ancora supportate dal Windows
Runtime
• Non esiste un processo di conversione automatico da un
progetto già esistente
• Le librerie e i toolkit per Windows Phone 7.x / 8.0 non sono
compatibili con le Windows Phone Store app
Windows Phone Store app
41. • Migliori performance e minor consumo di memoria
• Possibilità di condividere la maggior parte del codice con
Windows 8 e, in futuro, Xbox One
• Possibilità di sfruttare tutte le novità introdotte in Windows
Phone 8.1
Ma…
42. • Molte librerie hanno già una versione compatibile con il
Windows Runtime (Caliburn Micro, MVVM Light, JSON.NET,
ecc.)
• I principali produttori di toolkit sono al lavoro per supportare
le Universal Windows app:
• Telerik -> Beta disponibile su richiesta: universalwindows@telerik.com
• Syncfusion
• Infragistics
Ma…
43. Grazie a tutti per la partecipazione
Riceverete il link per il download a slide e demo via email nei
prossimi giorni
Per contattarmi
info@qmatteoq.com
@qmatteoq
Grazie