Template designed by
What's new in Windows Phone
Matteo Pagani
info@qmatteoq.com - @qmatteoq
http://www.qmatteoq.com
Template designed by
brought to you by
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
Universal app
Cosa cambia per lo sviluppatore?
• La gestione del layout
• I nuovi controlli XAML
• La navigazione
• La gestione dello storage
Quale percorso?
agenda
Windows Developer Platform in 8.1
| |
Legend
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
• 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
demo
Universal app
Il layout
La gestione del layout – WP 8.0
1.0x 1.6x 1.5x 2.25x
480x800 480x800 480x853 480x853
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
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
Stessa dimensione, diverse risoluzioni
12:38
540
960 5.5”
12:38
5.5”
720
1280
12:38
5.5”
1080
1920
450
800
“view” pixels
Stessa risoluzione, diverse dimensioni
12:38
4.7”
1080
1920
“view” pixels 368x686
12:38
5.5”
1080
1920
450x800
12:38
6”
1080
1920
491x873
• 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
demo
Gestire il layout
I controlli
Convergenza dei controlli
80% XAML condiviso 20% personalizzato
Common SignatureOptimized
DatePicker
TimePicker
CommandBar
Button
CheckBox
RadioButton ProgressBar
Slider
ToggleSwitch
Hub
Pivot
ListView
GridView
SysTray
• 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
<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
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>
Il controllo CommandBar
Windows Phone
Windows
• 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
ListView e GridView
Semantic Zoom
<SemanticZoom>
<SemanticZoom.ZoomedInView>
<!-- ListView or GridView -->
<!-- ItemsSource binds to
CollectionViewSource -->
</SemanticZoom.ZoomedInView>
<SemanticZoom.ZoomedOutView>
<!-- ListView or GridView -->
<!-- ItemsSource bound to
CollectionViewSource,
Path=CollectionGroups -->
</SemanticZoom.ZoomedOutView>
</SemanticZoom>
demo
ListView e GridView
E’ stata sostituita dal controllo StatusBar e non può essere
gestito dallo XAML
StatusBar
StatusBar
StatusBar
StatusBar
StatusBar
SystemTray
I flyout sostituiscono i controlli ContextMenu e ListPicker
Flyout
<Button Content="Show Menu Flyout" Margin="20, 20, 100, 20">
<Button.Flyout>
<MenuFlyout>
<MenuFlyoutItem Text="Option 1" />
<MenuFlyoutItem Text="Option 2" />
<MenuFlyoutSeparator />
<ToggleMenuFlyoutItem Text="Toggle Option 1"
IsChecked="True" />
<ToggleMenuFlyoutItem Text="Toggle Option 2" />
</MenuFlyout>
</Button.Flyout>
</Button>
MenuFlyout
<Button>
<Button.Flyout>
<ListPickerFlyout x:Name="ListPickerFlyout"
ItemsSource="{Binding Path=Comics}">
<ListPickerFlyout.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Title}" />
</StackPanel>
</DataTemplate>
</ListPickerFlyout.ItemTemplate>
</ListPickerFlyout>
</Button.Flyout>
</Button
ListPickerFlyout
La navigazione
Il nuovo approccio
Window
Frame
Page
Window
• 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
• 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
Gestire lo stato della pagina
NavigationCacheMode.Disabled
NavigationCacheMode.Enabled Required
Page 1 Page 2 Page 3
new new
?
• 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
Esempio di gestione del pulsante Back
E tanto altro ancora
Attenzione!
• 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
• 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…
• 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…
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

Mob03 what's new in windows phone

  • 1.
    Template designed by What'snew in Windows Phone Matteo Pagani info@qmatteoq.com - @qmatteoq http://www.qmatteoq.com Template designed by
  • 2.
  • 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 cambiaper lo sviluppatore? • La gestione del layout • I nuovi controlli XAML • La navigazione • La gestione dello storage Quale percorso? agenda
  • 5.
    Windows Developer Platformin 8.1 | | Legend
  • 6.
    Convergenza delle API 6 IlWindows 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 applicazioniseparate 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
  • 8.
  • 9.
  • 10.
    La gestione dellayout – WP 8.0 1.0x 1.6x 1.5x 2.25x 480x800 480x800 480x853 480x853
  • 11.
    La gestione dellayout – 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 dellayout – WP 8.1 12:38 larghezza altezza “raw” pixels 12:38 larghezza altezza “view” pixels diviso per il fattore di scala
  • 13.
    Stessa dimensione, diverserisoluzioni 12:38 540 960 5.5” 12:38 5.5” 720 1280 12:38 5.5” 1080 1920 450 800 “view” pixels
  • 14.
    Stessa risoluzione, diversedimensioni 12:38 4.7” 1080 1920 “view” pixels 368x686 12:38 5.5” 1080 1920 450x800 12:38 6” 1080 1920 491x873
  • 15.
    • In alcuniscenari (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
  • 16.
  • 17.
  • 18.
    Convergenza dei controlli 80%XAML condiviso 20% personalizzato Common SignatureOptimized DatePicker TimePicker CommandBar Button CheckBox RadioButton ProgressBar Slider ToggleSwitch Hub Pivot ListView GridView SysTray
  • 19.
    • Il controlloPanorama è 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> <ImageSource="/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>
  • 22.
  • 23.
    • E’ statosostituito 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
  • 24.
  • 25.
    Semantic Zoom <SemanticZoom> <SemanticZoom.ZoomedInView> <!-- ListViewor GridView --> <!-- ItemsSource binds to CollectionViewSource --> </SemanticZoom.ZoomedInView> <SemanticZoom.ZoomedOutView> <!-- ListView or GridView --> <!-- ItemsSource bound to CollectionViewSource, Path=CollectionGroups --> </SemanticZoom.ZoomedOutView> </SemanticZoom>
  • 26.
  • 27.
    E’ stata sostituitadal controllo StatusBar e non può essere gestito dallo XAML StatusBar StatusBar StatusBar StatusBar StatusBar SystemTray
  • 28.
    I flyout sostituisconoi controlli ContextMenu e ListPicker Flyout
  • 29.
    <Button Content="Show MenuFlyout" Margin="20, 20, 100, 20"> <Button.Flyout> <MenuFlyout> <MenuFlyoutItem Text="Option 1" /> <MenuFlyoutItem Text="Option 2" /> <MenuFlyoutSeparator /> <ToggleMenuFlyoutItem Text="Toggle Option 1" IsChecked="True" /> <ToggleMenuFlyoutItem Text="Toggle Option 2" /> </MenuFlyout> </Button.Flyout> </Button> MenuFlyout
  • 30.
    <Button> <Button.Flyout> <ListPickerFlyout x:Name="ListPickerFlyout" ItemsSource="{Binding Path=Comics}"> <ListPickerFlyout.ItemTemplate> <DataTemplate> <StackPanel> <TextBlockText="{Binding Title}" /> </StackPanel> </DataTemplate> </ListPickerFlyout.ItemTemplate> </ListPickerFlyout> </Button.Flyout> </Button ListPickerFlyout
  • 31.
  • 32.
  • 33.
    • Si usail 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 classeFrame 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 statodella pagina NavigationCacheMode.Disabled NavigationCacheMode.Enabled Required Page 1 Page 2 Page 3 new new ?
  • 36.
    • Nuovo comportamentopredefinito 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
  • 37.
    Esempio di gestionedel pulsante Back
  • 38.
  • 39.
  • 40.
    • Alcune featurenon 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 performancee 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 libreriehanno 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 tuttiper la partecipazione Riceverete il link per il download a slide e demo via email nei prossimi giorni Per contattarmi info@qmatteoq.com @qmatteoq Grazie