Technology Experience
.NET World

Qualche info su “Silverlight for Windows Phone 7 Toolkit”–November 2010

Il toolkit in oggetto è disponibile su CodePlex a questo indirizzo. E’ un componente molto interessante, oserei dire quasi indispensabile, per chiunque voglia sviluppare applicazioni per Windows Phone 7. Oggi pomeriggio ho dato un’occhiata ai vari controlli aggiuntivi; davvero stupefacente, perchè praticamente a costo zero usate controlli un po’ più in linea con quelle che sono le guidelines, e vi uniformate all’interfaccia utente che WP7 mette già a disposizione.

Controllo ToggleSwitch
In pratica, è una CheckBox standard ri-templizzata, in modo tale da apparire come un interruttore/switch. In pratica, è lo stesso controllo che con WP7 vedete sotto Impostazioni –> toni & suonerie, per attivare le suonerie e la vibrazione. Dal punto di vista developer, è una vera e propria CheckBox, quindi dispone della proprietà IsChecked che può essere messa in binding con una qualsiasi proprietà booleana, etc. etc.

ToggleSwitch

<ctl:ToggleSwitch 
    Header=”Mantieni centrato l’aereo”
    IsChecked=”True” />

Notare che per creare un ToggleSwitch come si deve, bisogna usare la proprietà Header per dare un titolo, che appare in un carattere più piccolo. Non usate la proprietà Content, che invece reimposta quello che appare quando si sposta la levetta. Per default, il ToggleSwitch mostra On/Off. Come tutti i controlli, anche questo può essere personalizzato come si vuole, con colori, template, bordi, font, etc. etc.

Controllo DatePicker
Come dice il nome, è un controllo che visualizza un DateTime nel formato in cui volete voi. Cliccandoci sopra, il controllo naviga in una pagina che permette di impostare una nuova data, scegliendo giorno/mese/anno. E’ esattamente il controllo che WP7 vi fa usare quando reimpostate l’ora di sistema.

DatePicker01

DatePicker02

<ctl:DatePicker
    ValueStringFormat=”{}{0:d}”
    Header=”Data di nascita” />

Ancora una volta, ho utilizzato la proprietà Header per dare un titolo al controllo. Ho usato la proprietà ValueStringFormat per specificare una stringa di formattazione per la data. Specificare “d” significa data in formato breve; specificare “D” significa data in formato esteso. Notare che la Culture con cui viene visualizzata la data dipende dalla lingua del sistema operativo (oppure quella che avete messo in Impostazioni –> paese e lingua). La proprietà PickerPageUri – che non ho avuto tempo di testare – dovrebbe servire ad impostare la pagina XAML per scegliere la data – nel caso in cui quella predefinita non vi andasse bene (ad esempio, notare nell’immagine qui sopra il titolo della pagina “Choose Date”, nonostante l’emulatore stia girando in italiano).

Controllo TimePicker
Tutto come sopra, però per l’ora.

TimePicker01

TimePicker02

<ctl:TimePicker
    ValueStringFormat=”{}{0:t}”
    Header=”Imposta l’ora corrente” />

 

TransitionService – transizioni ed effetti durante la navigazione delle pagine
Tutto molto semplice anche in questo caso. In pratica, voi utilizzate la solita classe NavigationService per spostarvi da una pagina all’altra, ma un engine dietro le quinte le fa apparire con diversi effetti: rotazione, slider, etc. etc. Il tutto è molto semplice e naturale:

<ctl:TransitionService.NavigationInTransition>
    <ctl:NavigationInTransition>
        <ctl:NavigationInTransition.Backward>
            <ctl:RollTransition />
        </ctl:NavigationInTransition.Backward>
        <ctl:NavigationInTransition.Forward>
            <ctl:RollTransition />
        </ctl:NavigationInTransition.Forward>
    </ctl:NavigationInTransition>
</ctl:TransitionService.NavigationInTransition>

 

Il namespace ctl è dichiarato come:

xmlns:ctl="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

 

Il blocco XAML qui sopra va inserito appena dopo il nodo <phone:PhoneApplicationPage>. In pratica, si specifica l’effetto di transizione da applicare quando si raggiunge questa pagina, in ambedue i sensi (cioè…sia attraverso un back che un forward). Ovviamente si può anche specificare l’effetto quando si lascia questa pagina: è sufficiente usare NavigationOutTransition al posto di NavigationInTransition. Gli effetti disponbili attualmente sono:

  • RollTransition
  • RotateTransition
  • SlideTransition
  • SwiveTransition
  • TurnstileTransition

L’ultimo accorgimento per far funzionare le transizioni è andare a toccare il code-behind nel file App.xaml.cs:

private void InitializePhoneApplication()
{
    if (phoneApplicationInitialized)
        return;
    RootFrame = new TransitionFrame();
    RootFrame.Navigated += CompleteInitializePhoneApplication;
    RootFrame.NavigationFailed += RootFrame_NavigationFailed;
    phoneApplicationInitialized = true;
}

 

L’oggetto RootFrame, che è dichiarato come PhoneApplicationFrame, deve essere creato con il tipo TransitionFrame, altrimenti nisba.

Ovviamente il tipo TransitionFrame è un tipo dichiarato e definito nell’assembly Microsoft.Phone.Controls.Toolkit, ed eredita da PhoneApplicationFrame.

AutoCompleteBox

A metà strada tra una TextBox ed una ComboBox, controllo imperdibile se volete facilitare la scelta di una voce da un elenco predefinito. Purtroppo il mio tempo per questa sera terminato, lascio approfondire a voi la cosa!

Smile

Send to Kindle
My personal life

Dal 15 Novembre obbligo di gomme invernali/catene a bordo in tutta Lombardia

L’url migliore che ho trovato che spiega questa cosa è questo. In pratica, dal 15 Novembre prossimo se siete in Lombardia dovete o montare le gomme invernali, oppure avere a bordo le catene. Questo vale in qualsiasi circostanza e su tutti i tipi di strade.

Riporto questa notizia, fresca di ieri, che in pratica dice che stanno partendo un po’ di ricorsi, per due motivi principali: perchè obbligare tutti a comprare gomme invernali, oppure le catene, per circolare per le strade, anche se non sta nevicando? E qui voglio subito fare una precisazione: non sto dicendo che io non le comprerei, sta dicendo che è una cosa da pazzi obbligare tutti – ancora una volta – a spendere soldi, quando mi sembra di aver capito che in giro soldi non ce ne sono poi molti. Per motivi di lavoro, ormai è da circa un anno che ogni tanto vado in Valtellina, per cui sono stato il primo a pensare di montare sulla mia auto qualcosa che mi permettesse di viaggiare più tranquillo, per cui il tema qui non è se io sono d’accordo oppure no.

Il tema è obbligare tutti a spendere un minimo di 50 euro per le catene, oppure molto di più per acquistare un treno di gomme nuovo. E poi, lasciatemelo bisbigliare: ho il leggero sospetto che questo provvedimento sia nato perchè quando nevica la Provincia o la Regione non riescono praticamente mai a pulire le strade, e quindi ribaltano il problema su di noi. Davvero da idioti. Mi ricorda tanto quella legge che obbliga all’uso degli anabbaglianti anche in pieno giorno – una cosa sinceramente che non ho mai seguito, perchè se c’è il sole e uno fa fatica a vedere la mia auto, ha evidentemente un problema che gli anabbaglianti non risolvono di sicuro. E nessuno mi ha mai fermato per questo motivo. Inoltre sono proprio contento che una volta tanto il centro-destra, che governa la Provincia, abbia avviato dei ricorsi, perchè è veramente una cosa da folli.

Chiudendo questo post, lancio questo appello: se andate a sciare, se viaggate molto, se guidare sulla neve vi preoccupa, vi consiglio assoluatemente le gomme invernali; conosco alcune persone che mi consigliano di montarle, perchè la guida migliora, e anche notevolmente. Per cui niente da dire su questo.

Se volete, commentate pure, ma prima c’è un requisito: leggete 10 volte quello che ho scritto.
Smile

Send to Kindle
Software

A che punto sono le mie app per Windows Phone 7?

Dunque, le mie applicazioni attive sul marketplace sono fondamentalmente quattro:

  1. Prova Del Cuoco
  2. Bank Finder
  3. Keyzard
  4. Flight Simulator X Viewer (in breve FSX Viewer)

La (2) e la (3) sono ferme, nel senso che non sono previsti ulteriori sviluppi. Di Keyzard sto preparando una nuova versione – Keyzard Saloon – che con la precedente non c’entra proprio nulla, ma ne parlerò in un prossimo post.

Per quanto riguarda FSX Viewer invece le cose si sono fatte complicate. I diversi aggiornamenti che ho mandato (3 fino a questo momento) sono stati tutti respinti per diversi motivi – alcuni stupidi – altri invece che riguardano la violazione di marchi registrati. Nel caso specifico, il logo originale di Microsoft Flight Simulator X. Prima che mi arrivasse il ‘test failed’ dell’applicazione, mi ha contattato un certo Chris avvisandomi che se non avessi rimosso il logo originale di FSX, l’applicazione sarebbe stata bocciata. Ho provveduto immediatamente, rimuovendo il logo originale ed inserendone uno mio fatto in casa.

Sta di fatto, però, che l’applicazione è stata bocciata comunque, proprio questa mattina. A questo punto mi chiedo (e queste domande le ho girate a Chris): posso usare la dicitura ‘Microsoft Flight Simulator X’, anche solo in formato testuale? Siccome ho inserito diverse immagini derivanti da FSX, devo rimuovere anche quelle? Qual’è esattamente il problema?

Insomma, stay tuned!

Send to Kindle
Software

Ascoltare podcast con Windows Phone 7

Quando installate il software Zune 4.7 viene creata una nuova Raccolta (Library) chiamata “Podcasts”, che è l’unico scopo di contenere tutti i files audio di tutti i podcast che vogliamo seguire. Cos’è un podcast? La definizione più accurata la trovate ovviamente su Wikipedia. In breve, si tratta di un feed rss – lo stesso che usate per seguire i blog – solo che invece di post & testo avete a che fare con contenuto audio: quindi files .mp3 o .wav, e via dicendo.

Grazie all’accoppiata Zune 4.7 e Windows Phone 7, potete ascoltare i vostri podcast preferiti.
Come? Vediamo di rispondere a questa domanda.

La prima cosa da fare è: quale podcast voglio seguire?
E vabbè, qui i gusti son gusti. E’ necessario googlare alla ricerca del podcast che vi interessa: ce ne sono di tutti i tipi, tratti da trasmissioni radio o TV, che parlano di tecnologia, politica, narrativa, fantasy, etc. etc. Prendiamo uno come esempio: quello dello Zoo di Radio 105. L’url del feed del post è http://podcasting.105.net/zoobest/zoobest.xml. Copiate questo url ed avviate Zune 4.7.

Sottoscriviamo l’abbonamento al podcast
Qui entra in gioco la stessa terminologia che viene usata con i newsgroup. In pratica, si dice a Zune: ti do in pasto questo feed, tu scarica i post i files audio, tienimi aggiornato, avendo cura di sincronizzare il mio wp7.

Dicevo: avviamo Zune 4.7, andiamo in Collection –> Podcasts, clicchiamo su Add a favorite podcast che si trova sulla sinistra.

ZunePodcast01

A questo punto ci viene chiesto l’url del feed. Incollatelo o scrivetelo, poi confermate cliccando su Subscribe.
Zune si collega al feed, ne scarica il contenuto ed un certo numero di files audio.

ZunePodcast02

Ho evidenziato alcune cose interessanti. Rettangolo verde: l’icona del podcast appena sottoscritto. Rettangolo arancio: i 3 episodi più recenti vengonoscaricati immediatamente; l’elenco continua elencando tutti gli altri episodi, che possiamo scaricare manualmente cliccando sul pulsante Download. Rettangolo viola: qui c’è il pulsante per annullare la sottoscrizione al podcast, ed un altro pulsante per impostare le…ehm…impostazioni specificatamente per questo podcast.

Annulliamo la sottoscrizione al podcast
Se clicchiamo sul pulsante Unsubscribe, Zune ci chiede la conferma.

ZunePodcast03

La conferma può avvenire in due modi: possiamo decidere di mantenere comunque i files audio già scaricati (Save), oppure decidiamo di eliminarli (Delete). Possiamo attivare la casella per far ricordare a Zune quello che stiamo scegliendo in questo momento. Ovviamente il pulsante Cancel chiude la finestra senza fare nulla.

Impostazioni del podcast
Il pulsante Series settings apre una nuova finestra all’interno della quale possiamo decidere come deve funzionare questa sottoscrizione.

ZunePodcast04

Vediamo le voci una ad una. La zona Episodes permette di impostare quanti episodi/puntate mantenere nella raccolta: il valore predefinito è 3, che guarda caso corrisponde al numero di files audio scaricati automaticamente al passaggio precedente. Se aumentiamo questo valore (quello più a destra dice All), nel momento in cui confermiamo cliccando su Ok Zune procederà allo scaricamento dei nuovi episodi, in base a quello che abbiamo scelto.

La zona Playback order permette di impostare se avere gli episodi più recenti o quelli più vecchi. Se abbiamo scelto di mantenere sempre 3 episodi, quindi, saranno i 3 episodi più recenti (che è l’impostazione predefinita), oppure i 3 episodi più vecchi.

La zona Syncing permette di impostare la sincronizzazione con il vostro telefono WP7. Possiamo scegliere:

  1. Sincronizza tutti gli episodi scaricati non ancora ascoltati
  2. Sincronizza tutti gli episodi scaricati
  3. Sincronizza solo il primo episodio non ancora ascoltato
  4. Non sincronizzare un bel nulla

Precisazione sul punto (4): ovviamente non è assolutamente necessario avere un telefono WP7 per utilizzare Zune 4.7. Questa ultima versione di Zune è un normalissimo media player per Windows, quindi è perfettamente lecito scaricare ed ascoltare i podcast anche sul vostro PC.

Sincronizzazione con il telefono Windows Phone 7

Per impostazione predefinita, Zune sincronizza automaticamente tutto quanto. Quindi, se a questo punto collegate il telefono con il cavetto USB, partirà la sincronizzazione. Al termine, basta andare in Musica & Video –> podcast (sul telefono) per vedere l’elenco dei podcast sottoscritti, e per ciascuno gli episodi sincronizzati.

Se volete dare un’occhiata alle impostazioni di Zune, andate in Settings –> Phone –> Sync Options.

ZunePodcast05

Precisazione: per quanto riguarda musica, video e immagini, ho lasciato l’impostazione Items I choose – vale a dire: ti dico io quali canzoni/video/immagini devo sincronizzare. Per quanto riguarda i podcast, invece, ho impostato la voce su All. Ovviamente questo All è soggetto a quello che ci siamo detti prima: se ho un solo podcast sottoscritto, e di questo voglio solo i 5 episodi più recenti, sul telefono finiscono solo 5 files audio.

Sincronizzazione con il cavetto o via wireless

Personalmente fino ad oggi ho sempre sincronizzato usando il cavetto USB e aprendo Zune. Nelle impostazioni di Zune posso anche decidere di effettuare la sincronizzazione attraverso la rete WiFi di casa vostra. L’ho solo impostata, ma a parte questo non ne ho un’esperienza diretta. Tecnicamente parlando:

  1. E’ necessario che il telefono abbia attivato il WiFi e sia regolarmente connesso alla rete
  2. E’ necessario che Zune sia avviato
  3. E’ necessario che il telefono sia sotto carica (la sincronizzazione parte automaticamente dopo 10 minuti di carica della batteria)

Nel momento in cui impostate Zune per la sincronizzazione Wireless, quest’ultimo apre delle porte sul firewall software di Windows Vista/7. Inoltre, è necessario che il telefono sia connesso al PC, questo Zune chiede al telefono quali reti WiFi conosce: dall’elenco ne va scelta una come preferita per la sincronizzazione.

Send to Kindle
My personal life

Cosa mi piace di Windows Phone 7

Ovvio, non vorrete mica che venga a dire a voi cosa non mi piace! Smile

A parte scherzi, ormai è parecchio tempo che ho a che fare con questo nuovo sistema operativo – dal 21 ottobre ufficialmente con il mio wp7, ed ancora prima, durante il periodo di test & sviluppo.

Come ha detto l’amico Ale qualche settimana fa, la cosa che adoro di più di questo nuovo cellulare, nel suo insieme, è che è molto fruibile, e grazie alle app è entrato proprio nella mia vita quotidiana. Sabato sera sono uscito con alcuni amici e diverse volte ho sfoggiato wp7 per risolvere le solite “discussioni” che nascono davanti ad un cocktail (daiquiri alla nutella, per la cronaca) – discussioni del tipo…che film c’è in quel cinema, che attore è quello, il Fiordaliso è aperto domenica?, etc. etc. Il tutto senza troppe complicazioni e fruendo del dispositivo in modo estremamente rapido, e senza tirar fuori pennini o plettri, come con il mio ex-Nokia 5800.

A casa idem. Prima ero abituato a seguire la trasmissione “TV Talk” su Rai Tre il sabato mattina. Da quest’anno è stata spostata nel pomeriggio, ed io purtroppo non riesco più a seguirla. Con l’applicazione Rai TV prima me la sono vista in streaming. Va da sè che certi vantaggi sono conseguenza della disponibilità delle app giuste, altre invece derivano dall’ottimo hardware.

Il fatto di avere uno schermo touch di questa qualità rende l’utilizzo ovviamente molto istintivo, pratico e naturale. Ho twitterato guidando, ho fatto ricerche su Google mentre ero a tavola o nel locale di cui sopra, senza disturbare la compagnia. Sembra una cosa sciocca da dire, però se per rispondere ad una banale domanda ci devo mettere 15 minuti, aprendo magari su Symbian un browser un po’ limitato, probabilmente sto solo perdendo il mio tempo. Ho fatto vedere wp7 agli amici – alcuni lavorano nel mio stesso settore – e l’hanno molto apprezzato. Non sono molto microsoftiani – passatemi il termine – ma la prima che han detto quando l’han visto è: sembra tutto fuorchè che sia di Microsoft. Ed ovviamente con tono entusiastico!

Smile

L’importante è che ci siano le applicazioni giuste. Ad esempio, sul mio wp7 non mancano applicazioni come Aperto Domenica, Repubblica, iMdb, CineTrailer, eBay, ovviamente Facebook, la già citata Rai.tv. Spesso mi ritrovo ad aprirle così, solo per ingannare qualche minuto e leggere le ultime notizie o robe simile. Una piccola parentesi la voglio fare per la lettura dei blog: io ho installato Flux, che trovo ottimo perchè si sincronizza con l’account GMail: è sufficiente dare il vostro username e password. Dopo il login, vi ritrovate le vostre cartelle e tutti i vostri blog. Un’altra delle attività che ho “trasferito” su wp7 è proprio la lettura dei blog, tecnici e non, ovviamente quando non sono davanti al PC. Questo pomeriggio – causa maltempo – ero tranquillo rilassato sul mio letto a guardare la TV a basso volume e a leggere qualche post interessante. Prima dovevo per forza usare il notebook, oppure salire in mansarda per usare il desktop. Per adesso i miei 10/10 di vista reggono, e non ho alcun tipo di problema.

Probabilmente chi aveva già un iPhone non vedrà molte novità in quello che ho detto, ma per gente come me che è sempre rimasta un po’ lontana dal mondo della mela mangiata, le novità ci sono eccome, e sono tutte molto gradite.

Send to Kindle
.NET World

WP7, SoundEffect, frequenza di campionamento e Audacity

Dunque, faccio un breve riassunto. Per fare il play di suoni all’interno di una applicazione Windows Phone 7, abbiamo essenzialmente due metodi diversi:

  1. usando un MediaElement
  2. usando la classe SoundEffect

Il primo è disponibile solo all’interno di applicazioni Silverlight, il secondo è disponibile sia in Silverlight che in XNA.

In questo post parliamo della classe SoundEffect, e dei files .wav che è in grado di prendere in pasto e da mandare in play. Essenzialmente si tratta di avere del codice che fa una cosa simile:

SoundEffect slideEffect;
private void prepareSoundEffects()
{
    slideEffect = SoundEffect.FromStream(TitleContainer.OpenStream("Slide.wav"));
}

 

In questo caso carico il file Slide.wav. Quando ci sarà bisogno di farlo sentire all’utente è sufficiente chiamare il metodo Play(). Nulla di particolarmente complicato. Ricordiamoci che nel code-behind di App.xaml bisogna fare quanto segue:

readonly DispatcherTimer timer = new DispatcherTimer();

public App()
{
    this.timer.Tick += (s, e) =>
    {
        FrameworkDispatcher.Update();
    };

    this.timer.Interval = TimeSpan.FromMilliseconds(100);
    this.timer.Start();

    UnhandledException += Application_UnhandledException;
    InitializeComponent();
    InitializePhoneApplication();
}

 

Non so bene il perchè di questa cosa, so solo che bisogna farla! Sorriso

Che tipo di files posso far sentire?

Soltanto files .wav: gli mp3 in questo frangente non sono ammessi. Se tentate di caricare un file .mp3 otterrete una InvalidOperationException. Potete caricare solamente files .wav campionati a 44100Hz.

Ora, se siete come me, probabilmente in questi giorni state scandagliando il Web alla ricerca di questo o quell’effetto sonoro che sì, sul click di quel Button ci sta proprio bene. Però non tutti i files sono a 44100Hz: cosa succede, in questo caso? Che otterrete ancora una bella InvalidOperationException, proprio al momento del caricamento che abbiamo visto prima.

E quindi? Quindi vi consiglio di scaricare Audacity, che è un free digital audio editor disponibile su SoundForge. Audacity è disponibile ovviamente in download, sia in formato zip, che nel classico installer .msi. Avviate Audacity, aprite il file .wav che volete modificare e reimpostate la frequenza di campionamento, impostandola su 44100Hz.

Ma anche qui c’è una piccola precisazione da fare. Date un’occhiata a questo screenshot:

Audacity

Audacity riporta la frequenza di campionato in due punti diversi. Nell’esempio qui sopra ho aperto un file audio a 11025Hz. Se volete portare la frequenza a 44100Hz, per renderlo compatibile con la SoundEffect di XNA, cambiate quella che ho evidenziato dal rettangolo verde – in basso a sinistra nella finestra. Se toccate quella evidenziata dal rettangolo rosso, il suono risulterà distorto – perchè ovviamente modificare il campionamento significa anche “accelerare” il suono (un po’ come mandare un vecchio vinile 33 giri a 45).

Per salvare il file con le nuove impostazioni, usate il menu File –> Export As WAV… ed il gioco è fatto.

Send to Kindle
Software

GR Sites – Absolute Sound Effects Archive

Annotatevi questo indirizzo:

http://www.grsites.com/archive/sounds/

Qui trovate un sacco di effetti sonori (in formato .wav & .mp3), liberamente scaricabili, pronti per essere utilizzati nelle vostre applicazioni. Il webmaster dice espressamente che tutti i suoni messi a disposizione sono stati raccolti filtrando solamente quelli indicati come “freely distributable”.

L’ho sfogliato tutta sera alla ricerca di cose che mi servivano per il prossimo Keyzard – Saloon Edition e ho trovato cose carine, anche se certi sound effect li ho dovuti tagliare su misura con Audacity.

Send to Kindle
.NET World

Come ripristinare il PivotItem corretto dopo il tombstoning

Faccio il mea-culpa e correggo il tiro, in riferimento al mio post di ieri pomeriggio.

Il modo corretto di ripristinare il PivotItem dopo un tombstoning è quello di farlo nell’evento Loaded della Page.

Quindi:

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
    appStatus.State["PageIndex"] = this.Pivot.SelectedIndex;
    base.OnNavigatedFrom(e);
}

 

Qui salviamo nello stato dell’applicazione il SelectedIndex del Pivot. Quando si ritorna all’applicazione succede quanto segue:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    if (appStatus.State.ContainsKey("PageIndex"))
        pageIndex = (int)appStatus.State["PageIndex"];

    base.OnNavigatedTo(e);
}

 

Qui carichiamo la situazione salvata precedentemente. Notare che pageIndex è definita a livello di classe, ed in questa fase semplicemente ne carichiamo il valore. Dentro l’evento Loaded della Page andiamo a settare il PivotItem:

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    if (pageIndex >= 0)
        this.Pivot.SelectedIndex = pageIndex;
}

 

Nell’evento Loaded siamo sicuri che la pagina sia stata interamente caricata, perciò non avremo problemi di alcun tipo.

Resta da capire perchè il codice descritto ieri si schianti solo con certi valori di SelectedIndex, e soprattutto perchè a run-time (in esecuzione senza breakpoint, tanto per capirci) vedo il controllo Pivot prendere il focus e poi…Boom! Mah!

Grazie al buon Gabriele che, nonostante non si stia occupando di sviluppo WP7, non ha perso il post dell’amico Matteo che spiegava questa cosa.

Send to Kindle
.NET World

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?

Sad smile

Send to Kindle
.NET World

WP7 Developer Registration

Questa mattina ho registrato il mio nuovo WP7 – acquistato esattamente tre giorni fa – usando il tool Windows Phone Developer Registration (d’ora in poi WPDR) – che trovate comodamente nel menù Start sotto il gruppo di programmi Windows Phone Developer Tools. Questo tool richiede fondamentalmente tre cose:

  1. un cellulare Windows Phone 7 collegato al PC tramite cavetto USB
  2. il client Zune avviato (non ho provato con il WPConnect disponibile con i WP7 Developer Tools October Update)
  3. un account Live ID regolarmente attivato sul portale http://create.msdn.com

Quindi, è sufficiente inserire il vostro account e cliccare sul pulsante Register. Il vostro cellulare deve anche avere il display sbloccato e trovarsi quindi nella schermata iniziale, in qualche hub e via dicendo. Nota bene: rispetto al prototipo che ho avuto in dotazione per circa 2 settimane, ho notato che su questo LG è stata rimossa la possibilità di impostare “Mai” nell’opzione “Blocca lo schermo dopo”, disponibile in Impostazioni –> blocco e sfondo.

Questa mattina, sbloccando il mio per deployare da VS2010, mi sono accorto di una cosa. Se l’orologio del cellulare non è impostato in modo corretto, la registrazione del cellulare fallirà. Il messaggio di errore purtroppo non riesco a farvelo vedere, ho cercato di riprodurlo ma non c’è stato verso. Era una sorta di:

Please verify date and time on your phone, or verify Internet connection. Can’t connect to developer portal because date and time are different bla bla bla.

E’ bastato andare in Impostazioni –> data e ora –> ed attivare imposta automaticamente sulla voce SI. Fatto questo, sono riuscito ad abilitare il telefono per lo sviluppo.  Evidentemente è sufficiente avere l’orario sballato di 1-2 minuti per impedire la connessione e la registrazione del cellulare.

Send to Kindle