Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea รจ quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Alcune note sulla notazione pack:// di WPF

Causa malattia, sono a casa a leggermi il super-librone di Petzold su Presentation Foundation. Ho completato la prima parte pure C# e mi sono appena inoltrato nella seconda XAML-oriented. Fa spesso uso della nuova notazione pack:// per fare riferimento a risorse dell'applicazione. Ci sono delle avvertenze ad usare questa notazione, che voglio evidenziare in questo post.

Dunque, supponiamo di aver creato un nuovo progetto Windows Application (WPF). Il template per questo tipo di progetto comprende essenzialmente due files soltanto: App.xaml e Window1.xaml. Quest'ultimo file è una Window a tutti gli effetti. Editiamo il suo costruttore: per raggiungerlo dobbiamo espandere la TreeView e vedere quindi Window1.xaml.cs. Dopo la chiamata al classico InitializeComponent() aggiungiamo il seguente blocco di codice:

Uri uri = new Uri("pack://application:,,,/mia_immagine.gif"); BitmapImage bitmap = new BitmapImage(uri); Image img = new Image(); img.Source = bitmap; img.Stretch = Stretch.Fill; Content = img;

Questo blocco di codice riempie la Windows con un'immagine caricata come risorsa dell'applicazione. Istanzia un oggetto Uri che fa uso di pack:// per puntare al file. Istanzia un oggetto BitmapImage ed un oggetto Image. Quest'ultimo viene messo come contenuto della Window, non prima di aver consentito a WPF di stretchare l'immagine in modo tale che occupi sempre la totalità dell'area della Window.

Prima di eseguire il codice, dobbiamo aggiungere il file mia_immagine.gif al progetto. Non dobbiamo fare altro che fare Add Existing Item e sfogliare una qualsiasi immagine sul nostro hard-disk. Rinominiamola mia_immagine.gif, altrimenti avremo qualche problema. Visual Studio 2005 imposta automaticamente la Build Action per questo file su Resource. ATTENZIONE: non impostatela come Embedded Resource, come mi sono ostinato a fare io per qualche minuto. Gli oggetti Uri che puntano attraverso pack:// funzionano solo con risorse esplicitamente impostate come Resource. A questo punto, se compilate ed eseguite il codice, vi apparirà una finestra nella quale fa bella mostra l'immagine caricata.

Un'altra annotazione è questa: la notazione pack://application funziona solo se state creando un'applicazione vera e propria. Un'exe, insomma. Se state creando una class library, la risorsa non potrà essere caricata. Provate per esempio a cambiare l' Output Type per il progetto (da Windows Application a Class Library, appunto): dovrete innanzitutto cancellare dal progetto il file App.xaml (o almeno modificarne il Build Action che per default vale ApplicationDefinition). Questo file permette la generazione del file App.g.cs (visibile solo se è attiva l'opzione Project --> Show All Files) che istanzia l'applicazione e mostra Window1. Fatto questo, potete compilare senza problemi, ma se provate ad utilizzare la class library in un altro exe, vi accorgerete che pack://application punta sempre al progetto exe della vostra soluzione.

Qualsiasi commento/correzione/rettifica è ben accetta.

Update del giorno dopo: leggete i commenti che mi hanno lasciato Raffaele e Corrado, perchè chiariscono qualche imprecisione/errore che ho lasciato nel post. Mi raccomando, perchè sono importanti!

Print | posted on Tuesday, February 6, 2007 7:32 PM | Filed Under [ Sviluppo .NET ]

Feedback

Gravatar

# Re: Alcune note sulla notazione pack:// di WPF

grazie Corrado, domani ci provo...
2/6/2007 10:58 PM | Igor Damiani
Gravatar

# re: Alcune note sulla notazione pack:// di WPF

Igor magari ho capito male ma non è vero che pack:// funzioni solo con le risorse ma funziona anche con i contenuti di tipo "content".
Mi spiace che non sia pubblica ma ho mostrato demo e ppt alla WPC lo scorso novembre parlando proprio di pack://

Ciao!
2/7/2007 11:49 AM | Raffaele Rialdi
Gravatar

# Qualche precisazione sul pack:// di ieri

2/7/2007 5:07 PM | Technology Experience
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET