Tramite l'oggetto WebBrowser di windows phone è possivile visualizzare all'interno delle nostre applicazioni pagine web sfruttando il motore di internet explorer integrato nel sistema operativo. Un altro utile utilizzo però può essere la visualizzazione di contenuti statici o dinamici recuperati da fonti di dati diverse, la vera potenza di questo sistema è quella che possiamo formattare i nostri contenuti in html con tutto quello che ne consegue.
Per fare questo esiste un metodo molto semplice, basta creare un file col nostro contenuto da visualizzare e salvarlo nell'Isolated Storage e all'onload del WebBrowser fargli caricare la uri del nostro file.
Qui di seguito trovate un semplice esempio di funzionamento, il file html viene salvato nello storage tramite un BinaryWriter e letto passando come Uri al browser il nome del file nello storage e il parametro Relative
Pagina xaml
<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneBackgroundBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitleGrid is the name of the application and page title-->
<Grid x:Name="TitleGrid" Grid.Row="0">
<TextBlock Text="Ollie10.it" x:Name="textBlockPageTitle" Style="{StaticResource PhoneTextPageTitle1Style}"/>
<TextBlock Text="Web Browser" x:Name="textBlockListTitle" Style="{StaticResource PhoneTextPageTitle2Style}"/>
</Grid>
<!--ContentGrid is empty. Place new content here-->
<Grid x:Name="ContentGrid" Grid.Row="1">
<browser:WebBrowser x:Name="PageBrowser" Width="400" Height="600" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>
</Grid>
Codice C#
public partial class MainPage : PhoneApplicationPage
{
private const string htmlFile = "file.html";
public MainPage()
{
InitializeComponent();
SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
string html = @"<body style=""font-family:'Segoe WP';font-size:60px"">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus erat mi, dignissim eu tristique sed, mollis et diam. Nulla facilisi. Nam in mauris arcu. Integer tellus lorem, dignissim at pulvinar vel, mollis ac dui. Vivamus et cursus lorem. Curabitur vel augue tortor, id interdum ante. Morbi non tellus lorem, sit amet cursus mi. Phasellus blandit aliquet viverra. Sed et nulla enim, non eleifend leo. Integer ullamcorper fermentum semper. Cras rhoncus, est a mollis elementum, nisi dui tempus leo, in bibendum urna orci at magna. Nullam at metus sapien, ut eleifend tellus. Donec sodales ligula vitae velit rhoncus vitae commodo justo rhoncus. Nunc non dolor augue, sed adipiscing lectus. Aliquam convallis accumsan ligula ut lobortis. Pellentesque egestas cursus augue, vel rutrum quam ullamcorper id. Maecenas ultrices ipsum sed nisl placerat ut consequat libero luctus. Mauris in sapien nunc, sed sollicitudin purus. Curabitur eu quam eu nibh cursus sagittis. In consectetur adipiscing tellus, sed accumsan est scelerisque id.</p>
<p>Qui un altro paragrafo con un link
<a href=""http://www.ollie10.it"">ollie10.it</a> e
<b>un testo in grassetto, <u>sottolineato</u> e sotto una lista</b></p>
<ul><li>primo elemento</li><li>secondo elemento</li></ul>
</body>";
// SALVO IL FILE NELL'ISOLATED STORAGE
SaveToIsoStore(htmlFile, new System.Text.UTF8Encoding().GetBytes(html));
// INDICO ALL'OGGETTO WEB BROWSER IL FILE DA LEGGERE
PageBrowser.Loaded += WebBrowser_OnLoaded;
}
private void WebBrowser_OnLoaded(object sender, RoutedEventArgs e)
{
PageBrowser.Navigate(new Uri(htmlFile, UriKind.Relative));
}
private void SaveToIsoStore(string fileName, byte[] data)
{
string strBaseDir = string.Empty;
string delimStr = "/";
char[] delimiter = delimStr.ToCharArray();
string[] dirsPath = fileName.Split(delimiter);
//RECUPERO L'ISOLATED STORAGE
IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
//RICREO LA STRUTTURA DELLE CARTELLE
for (int i = 0; i < dirsPath.Length - 1; i++)
{
strBaseDir = System.IO.Path.Combine(strBaseDir, dirsPath[i]);
isoStore.CreateDirectory(strBaseDir);
}
//RIMUOVO IL FILE SE ESISTE GIA'
if (isoStore.FileExists(fileName))
isoStore.DeleteFile(fileName);
//SCRIVO DENTRO AL FILE
using (BinaryWriter bw = new BinaryWriter(isoStore.CreateFile(fileName)))
{
bw.Write(data);
bw.Close();
}
}
}