Aprire Internet Explorer da codice in un’applicazione Metro style

Print Content | More

Una delle applicazioni che ho sviluppato per Windows 8 è quella dedicata al mio blog, che permette di consultare i miei post più recenti sfruttando alcune delle feature di Windows 8 (sharing, notifiche, ecc.).

Una delle problematiche ho dovuto affrontare nello sviluppo è stata la gestione della modalità snapped: se per quanto riguarda la pagina principale non ho avuto difficoltà (è stato sufficiente convertire una GridView orizzontale in una ListView verticale), qualche problema è sorto quando si è trattato di gestire la pagina di dettaglio, costituita da una web view con il contenuto del post. La modalità snapped, infatti, lascia troppo poco spazio affinchè la web view sia usabile.

Durante il lab mi è stato dato un suggerimento molto intelligente: far si che, in modalità snapped, non venga visualizzata la pagina di dettaglio ma venga direttamente aperto Internet Explorer: in questo modo il browser va ad occupare lo spazio restante (in modalità Filled), rendendo il post leggibile.

Ma come fare? Il primo passo è stato determinare lo stato in cui si trova l’applicazione: la gestione della selezione dell’elemento nella lista deve essere differente a seconda se mi trovo in modalità Snapped (apertura del browser) o in una delle qualsiasi altre disponibili (navigazione alla pagina di dettaglio).

Per fare questo ci viene in aiuto la classe ApplicationView, facente parte del namespace Windows.UI.ViewManagement. Tale oggetto contiene la proprietà statica Value, che è di tipo ApplicationViewState: si tratta di un enumeratore che espone un valore per ognuno degli stati visivi disponibili (Snapped, Filled, FullScreenLandscape e FullScreenPortrait). Il valore di questa proprietà corrisponde allo stato visivo corrente dell’applicazione.

Il secondo passo è stato trovare il modo di avviare il browser direttamente sul post selezionato, un po’ come avviene su Windows Phone quando si utilizza il launcher WebBrowserTask. Anche in questo caso la documentazione MSDN è venuta in mio aiuto: il namespace Windows.System.Launcher contiene una classe statica chiamata Launcher, che espone il metodo asincrono LaunchUriAsync, che accetta come parametro un url di tipo Uri.

Ecco perciò un esempio di codice in cui ci sottoscriviamo all’evento SelectionChanged per ottenere il risultato desiderato:

private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (ApplicationView.Value == ApplicationViewState.Snapped)
    {
        Launcher.LaunchUriAsync(new Uri(e.AddedItems[0]));
    }
    else
    {
        Frame.Navigate(typeof (DetailPage), e.AddedItems[0]);
    }
}


Windows 8 , Microsoft

0 comments

Related Post


(will not be published)
(es: http://www.mysite.com)