Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

WPF: aprire un file Html in un controllo Frame in modalità imperativa (VB 2008)

Sappiamo che il controllo Frame di Windows Presentation Foundation consente di mostrare contenuti Html, siano essi file o pagine di un sito internet. Se volessimo visualizzare un file, dobbiamo assegnare alla proprietà Source del controllo l'URI corrispondente al pathname del file da visualizzare, ricordando che il percorso del file è di tipo String mentre il Frame accetta solo il tipo URI. Il costruttore della classe System.Uri consente di definire l'URI relativo al pathname di un file contenuto in una stringa.

Ma cosa succede se il file Html viene incluso nel nostro progetto e viene pubblicato nella stessa cartella ove risiede l'eseguibile?

In questo caso non è possibile utilizzare il percorso ove risiede l'eseguibile aggiungendo il nome del file Html, poichè in questo caso avremmo un tipo String mentre a noi serve un Uri. Ipotizziamo di aver aggiunto al nostro progetto WPF un file chiamato myFile.htm, che vogliamo visualizzare in un controllo Frame chiamato myFrame. Nella finestra Solution Explorer, facciamo clic destro sul file myFile.htm e selezioniamo il comando Properties del menu di contesto, al fine di attivare la relativa Properties Window. Impostiamo la proprietà Build Action su Content (che consente di includere il file nell'insieme dei file da pubblicare) e la proprietà Copy To Output Directory su Copy Always. Ora, supponiamo che il nostro file debba essere visualizzato solo quando lo decidiamo noi (ad esempio alla pressione di un pulsante). Per questo motivo non possiamo ricorrere alla modalità dichiarativa (XAML), ma solo a quella imperativa (codice managed).

Come detto poc'anzi, dobbiamo stabilire l'URI relativo al nostro file, piuttosto che determinare il suo percorso fisico (dal momento che questo è inutilizzabile). .NET Framework 3.x implementa una caratteristica chiamata Uri Packing, della quale non entrerò nei dettagli, ma che ci aiuta nello scopo. L'obiettivo si raggiunge digitando il seguente codice Visual Basic all'interno di un metodo:

Dim fileUri As New Uri("pack://siteoforigin:,,,/myFile.htm", UriKind.RelativeOrAbsolute)

La sintassi pack://siteoforigin,,, consente di determinare il percorso dell'applicazione sotto forma di Uri. Se l'applicazione è stata distribuita con ClickOnce, il SiteOfOrigin corrisponde alla directory di pubblicazione sul sito o percorso di rete. Se l'applicazione è un eseguibile stand-alone, SiteOfOrigin ci permette di determinare la cartella che contiene l'eseguibile. Il risultato ottenuto è di tipo Uri ed è assegnabile alla proprietà Source del controllo Frame.

L'ultima riga di codice, quindi, ci consente di visualizzare il file Html desiderato all'interno del controllo Frame:

myFrame.Source = fileUri

Ovviamente questo è un esempio di utilizzo di questa tecnica con riferimento al controllo Frame, ma può essere utilizzata anche in altri frangenti (in particolare nell'ambito di applicazione del concetto più generale di Navigation).

Alessandro

Print | posted on mercoledì 6 febbraio 2008 22:32 | Filed Under [ Windows Presentation Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET