Pivot, PivotItem e tomb-stoning: strano problema, qualcuno mi sa dire il perchè?
Sì, ehm, voglio dire, qualche problema c’è. Aprite Visual Studio 2010 e cominciate un nuovo progetto di tipo Windows Phone Application. Nei riferimenti aggiungete l’assembly Microsoft.Phone.Controls, in modo da poter utilizzare il controllo Pivot. Nella pagina MainPage.xaml, quella creata di default, cancellate tutto e fate in modo che il content sia il seguente:
<controls:Pivot x:Name="Pivot" > <controls:PivotItem Header="Item 1" /> <controls:PivotItem Header="Item 2" /> <controls:PivotItem Header="Item 3" /> <controls:PivotItem Header="Item 4" /> <controls:PivotItem Header="Item 5" /> </controls:Pivot>
E’ un semplice Pivot con 5 pagine PivotItem, identificabili dall’header che va da “Item 1” a “Item 5”. Ora supponiamo di voler gestire il tombstoning, ovvero se l’utente interrompe l’utilizzo dell’applicazione mentre si trova su ”Item 3”, quando la riprende deve ritornare su quella pagina. Idem ovviamente per le altre. Quindi:
PhoneApplicationService appStatus = PhoneApplicationService.Current; protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { appStatus.State["PageIndex"] = this.Pivot.SelectedIndex; base.OnNavigatedFrom(e); } protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { if (appStatus.State.ContainsKey("PageIndex")) this.Pivot.SelectedIndex = (int)appStatus.State["PageIndex"]; base.OnNavigatedTo(e); }
Il tutto è ovviamente definito nel code-behind MainPage.xaml.cs.
Qualcuno mi sa dire perchè se mi trovo su: Item 1, Item 2 o Item 5 la procedura di tombstoning funziona correttamente,
mentre se mi trovo su Item 3 o Item 4 l’applicazione crasha inesorabilmente?
Per comodità, vi metto a disposizione il file zip con la soluzione VS2010 pronta da aprire e provare. Ma solo a me succede?