Tag Cloud: wp7

Il fattore X

Scritto da Nicolò Carandini il 20 giugno 2012 • Linguaggio: C#  • Livello: 100 

In questo articolo viene introdotto il linguaggio XAML, le sue origini e la sua ragion d'essere, con una descrizione della sua sintassi, in modo da consentirne un'agevole lettura, nei sempre più frequenti casi d'uso.

Serializzare una classe derivata in WP7

Scritto da Nicolò Carandini il 18 maggio 2012 • Linguaggio: C#  • Livello: 100 

Se utilizziamo i Data Contracts per persistere le nostre classi nell'IsolatedStorageSettings.ApplicationSettings, è bene ricordare che la serializzazione delle classi derivate da una classe base richiede l'uso dell'attributo [KnownType(typeof(DerivedClass))] nella classe base, altrimenti la serializzazione fallisce.

Esempio:

[DataContract]
public class MySettings
{
  [DataMember]
  public BaseUserSettingsClass UserSettings { get; set; }
  // …
}
 
[DataContract]
[KnownType(typeof(DerivedUserSettingsClass))]
public class  BaseUserSettingsClass
{
  [DataMember]
  public string UserName { get; set; }
  // …
}
 
[DataContract]
public class  DerivedUserSettingsClass
{
  [DataMember]
  public int VolumeLevel { get; set; }
  // …
}

 

 

Windows Phone: rimuovere le informazioni di debug dall’emulatore

Scritto da Roberto Albano il 13 aprile 2012 • Linguaggio: C#  • Livello: 100 

Uno dei requisiti del processo di approvazione di una app sul marketplace di Microsoft è quello di presentare una o più schermate della app stessa.

Queste schermate possono essere facilmente ottenute tramite l'emulatore. Infatti premendo l'ultimo dei pulsanti che sono sulla destra dell'emulatore (quello con il simbolo >>per intenderci) viene mostrata una finestra di "Additional Tools" in cui una comoda sezione di "Screenshot" ci consente appunto di catturare e poi salvare le immagini che potremo proporre sul marketplace.

Un esempio di schermata ottenuta potrebbe essere la seguente: 

Figura1

Come potrete notare, sul lato destro della schermata ci sono delle informazioni di debug che vengono proposte di default nell'emulatore per aiutarci nel processo di sviluppo.

Tuttavia uno dei requisiti del processo di approvazione di una app sul marketplace dice testualmente: "Screenshots must only contain application graphics, and must not include any emulator chrome, frame rate counters or debug information."

Quindi la pubblicazione della vostra app potrebbe essere rifiutata a causa di questo motivo. E' importante quindi ricordare di rimuovere queste informazioni prima di fare gli screenshot per il marketplace.

Per rimuoverle è sufficiente andare nel file App.xaml.cs, andare nel costruttore e impostare a false la proprietà EnableFrameRateCounter in questo modo:

 
Application.Current.Host.Settings.EnableFrameRateCounter = false;
 

 

Da quel momento in poi, il vostro emulatore (e quindi le schermate che ne otterrete) non mostreranno più queste informazioni e, almeno per questo aspetto, non rischierete che la vostra app non venga approvata.

Windows Phone: mostrare le giuste icone nell’application bar del DatePicker

Scritto da Roberto Albano il 09 aprile 2012 • Livello: 100 

Quando si usa il componente DatePicker presente nel Silverlight for Windows Phone Toolkit, ci si può trovare nella situazione in cui, selezionando la data, venga mostrata la pagina di scelta della data con due pulsanti senza icone, come mostrato in figura:

Figura1

Questo avviene perchè il componente DatePicker usa una "naming convention" specifica, ovvero cerca le icone in una determinata posizione del progetto e che abbiano un certo nome.

Per risolvere il problema basta aggiungere alla root del progetto una cartella che si chiami Toolkit.Content in cui ci siano due icone ApplicationBar.Check.png (per l'ok) e ApplicationBar.Cancel.png (per l'annulla).

Attenzione a indicare per queste due icone la action Content.

Se non avete delle vostre icone specifiche, potete prendere le due icone fornite direttamente con i file che vi installa il toolkit :

 
C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Toolkit\Oct11\Bin\Icons
 

 

N.B. In base al vostro sistema operativo (32 o 64 bit) al vostro SDK (7.0 o 7.1) e alla release del toolkit (agosto 2011 o ottobre 2011) questo percorso potrebbe risultarvi diverso.

A questo punto la situazione si presenterà in questo modo:

Figura2

 

Windows Phone: proteggere i file presenti sul telefono

Scritto da Roberto Albano il 30 marzo 2012 • Linguaggio: C#  • Livello: 200 

Quando sviluppiamo una app che deve salvare dei dati sul telefono, questi possono essere salvati nello spazio previsto per l'applicazione, in quello che viene chiamato "Isolated Storage".

Sebbene questi file non siano facilmente accessibili, è sempre cosa buona e giusta salvare questi file in una forma non leggibile, ovvero criptandoli adeguatamente, specialmente quando in questi file vengano salvati dati sensibili come nel caso, ad esempio, delle password.

Per gestire queste situazioni, esiste una classe apposita: System.Security.Cryptography.ProtectedData

Tramite questa classe è possibile criptare e decriptare le informazioni che saranno poi salvate sul telefono con maggiore sicurezza. I metodi che consentono di effettuare queste informazioni si chiamano Protect e Unprotect.

ProtectedData.Protect(byte[] userData, byte[] optionalEntropy)
 
ProtectedData.Unprotect(byte[] encryptedData, byte[] optionalEntropy)

 

L'operazione di criptatura come quella di decriptatura viene eseguita non direttamente su un file ma su un array di byte, consentendo quindi una maggiore versatilità del metodo, non necessariamente per dati diretti appunto verso un file ma, volendo, anche verso un database o quant'altro.

Un parametro opzionale non a caso chiamato optionalEntropy consente di introdurre una complessità aggiuntiva all'operazione, e di conseguenza aumentare ancora il livello di sicurezza.
Ovviamente questo stesso dato deve essere utilizzato nella fase inversa, altrimenti l'operazione di decriptatura non andrebbe a buon fine, generando anche una exception.
L'utilizzo di questo parametro aggiuntivo, di contro, implica un onere aggiuntivo che è proprio quello di salvare a sua volta questa informazione in maniera sicura.
Di sicuro se il dato da proteggere è molto importante potrebbe valerne comunque la pena.

Per spiegare meglio il funzionamento di quanto detto finora, è stata sviluppata una semplice  classe CryptoHelper:

public class CryptoHelper
{
    private CryptoHelper() { }
 
    private IsolatedStorageFile isostore = null;
    public IsolatedStorageFile IsoStore
    {
        get { return isostore ?? (isostore = IsolatedStorageFile.GetUserStoreForApplication()); }
    }
 
    private static CryptoHelper instance = null;
    public static CryptoHelper Instance
    {
        get { return instance ?? (instance = new CryptoHelper()); }
    }
 
    public void CryptContentAndSave(string Content, string Entropy, string FileName)
    {
        byte[] UnprotectedContentAsByteArray = Encoding.UTF8.GetBytes(Content);
        byte[] AdditionalEntropy = (string.IsNullOrEmpty(Entropy) || string.IsNullOrWhiteSpace(Entropy))
                                   ? null
                                   : Encoding.UTF8.GetBytes(Entropy);
        byte[] ProtectedContentAsByteArray = ProtectedData.Protect(UnprotectedContentAsByteArray, AdditionalEntropy);
        if (IsoStore.FileExists(FileName)) IsoStore.DeleteFile(FileName);
        IsolatedStorageFileStream writestream = new IsolatedStorageFileStream(FileName, System.IO.FileMode.Create, FileAccess.Write, IsoStore);
        Stream writer = new StreamWriter(writestream).BaseStream;
        writer.Write(ProtectedContentAsByteArray, 0, ProtectedContentAsByteArray.Length);
        writer.Close();
        writestream.Close();
    }
 
    public string DecryptFileAndGetContent(string FileName, string Entropy)
    {
        string UnprotectedContent = string.Empty;
        if (IsoStore.FileExists(FileName))
        {
            using (IsolatedStorageFileStream Filestream = new IsolatedStorageFileStream(FileName, FileMode.Open, IsoStore))
            {
                Stream reader = new StreamReader(Filestream).BaseStream;
                byte[] ProtectedContentAsByteArray = new byte[reader.Length];
                byte[] AdditionalEntropy = (string.IsNullOrEmpty(Entropy) || string.IsNullOrWhiteSpace(Entropy))
                                           ? null
                                           : Encoding.UTF8.GetBytes(Entropy);
                reader.Read(ProtectedContentAsByteArray, 0, ProtectedContentAsByteArray.Length);
                reader.Close();
                Filestream.Close();
                byte[] UnprotectedContentAsByteArray = ProtectedData.Unprotect(ProtectedContentAsByteArray, AdditionalEntropy);
                UnprotectedContent = Encoding.UTF8.GetString(UnprotectedContentAsByteArray, 0, UnprotectedContentAsByteArray.Length);
            };
        }
        return UnprotectedContent;
    }
}

 

Disabilitare il lock screen di Windows Phone 7

Scritto da Roberto Albano il 19 marzo 2012 • Linguaggio: C#  • Livello: 100 

Se stiamo sviluppando una app che necessiti di lasciare sempre acceso lo schermo, dobbiamo semplicemente impostare una proprietà tramite la quale indicare al sistema che non deve avviare il lock screen (e quindi non deve spegnere lo schermo) dopo il tempo indicato nelle impostazioni :

using Microsoft.Phone.Shell;
...
PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;

 

Ovviamente, per annullare questa richiesta, basterà riabilitare questa modalità:

 
PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Enabled;
 

 

Fate attenzione perchè queste impostazioni valgono solo per l'app in cui vengono utilizzate, se infatti lasciamo la nostra app (per esempio per tornare nel menù principale) il telefono riapplicherà le impostazioni di sistema, tornando quindi a spegnersi dopo il tempo indicato nelle impostazioni.

Per lo stesso motivo se torniamo nella nostra app dobbiamo nuovamente richiedere di disabilitare lo spegnimento. 

Localizzazione e lingue accessorie in WP7

Scritto da Massimo Bonanni il 17 febbraio 2012 • Livello: 100 

Se stiamo realizzando applicazioni localizzate dobbiamo porre attenzione all'indicare quali lingue sono supportate (oltre a quella neutral che si può impostare all'interno delle impostazioni dell'assembly).
Per fare ciò è necessario modificare il file di progetto (vbproj per VB.NET e csproj per C#), inserendo le lingue accessorie nel tag SupportedCultures, come nell'esempio:

 
<SupportedCultures>es-ES;fr-FR;de-DE;en-US</SupportedCultures>
 

 

 In questo caso, oltre che la lingua neutral impostata nelle proprietà dell'assembly, sono supportate lo spagnolo, il francese, l'inglese (Stati Uniti) e il tedesco.

Testare applicazioni WP7 che usano foto e musica

Scritto da Nicolò Carandini il 13 febbraio 2012 • Livello: 100 

Nello sviluppo di applicazioni Windows Phone che accedono alla musica o alle foto, può capitare di fare il debug dell'applicazione sul device e ricevere un messaggio che chiede di sconnetersi da Zune prima di poter accedere alla musica o alle foto. Per risolvere il problema occorre seguire i seguenti passi, dando per scontato che il telefono sia già stato sbloccato:

  1. Collegare il telefono
  2. Attendere l'apertura di Zune (se non era già aperto) e poi chiuderlo
  3. Avviare WPConnect ("C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Tools\WPConnect\x64\WPConnect.exe")
  4. Avviare il programma da debuggare.

Nota: Al passo 3, se si ha una macchina a 32 bit il path da usare è "C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Tools\WPConnect\x86\WPConnect.exe"

Aprire la pagina del marketplace dell'applicazione WP7

Scritto da Massimo Bonanni il 10 febbraio 2012 • Linguaggio: VB  • Livello: 100 

Il seguente codice consente di aprire la pagina del marketplace relativa ai dettagli dell'applicazione in esecuzione:

Dim marketplaceDetailTask = New MarketplaceDetailTask()
marketplaceDetailTask.ContentType = MarketplaceContentType.Applications
marketplaceDetailTask.Show()

 

 Se impostiamo, invece, la proprietà ContentIdentifier del MarketplaceDetailTask con un Id valido, viene aperta la pagina di una applicazione specifica:

Dim marketplaceDetailTask = new MarketplaceDetailTask()
marketplaceDetailTask.ContentIdentifier = "c14e93aa-27d7-df11-a844-00237de2db9e"
marketplaceDetailTask.ContentType = MarketplaceContentType.Applications
marketplaceDetailTask.Show()

 

Forzare il binding di un TextBox su WP7

Scritto da Nicolò Carandini il 06 febbraio 2012 • Linguaggio: C#  • Livello: 100 

Generalmente il binding two-way di una textbox aggiorna la proprietà a cui è bindata quando il controllo perde il focus. Poiché però i pulsanti posizionati nel menu non spostano il focus della pagina, un eventuale pulsante di conferma ivi posizionato fa si che ciò che l'utente ha inserito nella textbox non venga trascritto nella sorgente. Per forzare il binding si può eseguire il seguente codice, da inserire nel codice associato all'evento prodotto dal pulsante:

//Force two-way binding of the editing field
object focusObj = FocusManager.GetFocusedElement();
if (focusObj != null && focusObj is TextBox)
{
    var binding = (focusObj as TextBox).GetBindingExpression(TextBox.TextProperty);
    binding.UpdateSource();
}

 

Se poi oltre alle textbox abbiamo anche una o più PasswordBox, allora occorre estendere il codice in questo modo:

// Force two-way binding of the editing field
object focusObj = FocusManager.GetFocusedElement();
if (focusObj != null && (focusObj is TextBox || focusObj is PasswordBox))
{
    BindingExpression binding;
    if (focusObj is TextBox)
    {
        binding = (focusObj as TextBox).GetBindingExpression(TextBox.TextProperty);
    }
    else
    {
        binding = (focusObj as PasswordBox).GetBindingExpression(PasswordBox.PasswordProperty);
    }
    binding.UpdateSource();
}

 

Recuperare la versione di un assembly in WP7

Scritto da Massimo Bonanni il 03 febbraio 2012 • Linguaggio: VB  • Livello: 100 

Uno dei possibili modi per recuperare la versione di un assembly è "parsare" il full name dello stesso.
La seguente funzione mostra come fare:

Public Function GetAssemblyVersion(asm As Assembly) As String
    If asm.FullName IsNot Nothing Then
        Dim parts = asm.FullName.Split(","c)
        Dim version = parts(1).ToLower().Replace("version=", "")
        Return version
    End If
    Return Nothing
End Function

 

 Un utilizzo può essere quello di recuperare la versione dell'applicazione:

Dim ver = GetAssemblyVersion(Assembly.GetExecutingAssembly())

 

 

Inserimento della password in WP7

Scritto da Nicolò Carandini il 30 gennaio 2012 • Livello: 100 

Per gestire l'inserimento di una password, in Windows Phone 7 non bisogna utilizzare il TextBox, che infatti non ha alcuna proprietà per visualizzare i classici pallini al posto dei caratteri digitati, ma il PasswordBox.
Il controllo PasswordBox mostra il carattere digitato per un paio di secondi per poi rimpiazzarlo col classico pallino.

Scrivere con la tastiera nell'emulatore Windows Phone 7

Scritto da Luca Cestola il 27 gennaio 2012 • Livello: 100 

Nell'emulatore di Windows Phone 7, in alternativa alla tastiera su schermo, è possibile utilizzare la tastiera del computer. Basta premere il tasto PgSu quando è visibile la tastiera sull'emulatore.

Utilizzare i Code Contracts su WP7

Scritto da Massimo Bonanni il 20 gennaio 2012 • Livello: 100 

Il CLR per Windows Phone 7 non prevede la presenza della classe Contract e, quindi, se vogliamo utilizzare i Code Contract sul nostro WP/ dobbiamo referenziare la dll Microsoft.Contracts.dll che si trova nella cartella:

 
%PROGRAMFILES%/Microsoft/Contracts/PublicAssemblies/Silverlight3
 

 

 

Come rilevare il tema usato in WP7

Scritto da Luca Cestola il 16 gennaio 2012 • Linguaggio: C#  • Livello: 100 

Per verificare se il tema correntemente impostato è il tema Light basta effettuare una verifica sulla risorsa "PhoneLightThemeVisibility".

 
bool isLightTheme = ((Visibility)Application.Current.Resources["PhoneLightThemeVisibility"] == Visibility.Visible);
 

 

Abilitare la console dell'emulatore di Windows Phone 7

Scritto da Luca Cestola il 12 dicembre 2011 • Livello: 100 

In fase di sviluppo, può tornare utile poter utilizzare istruzioni come Console.WtriteLine in un'applicazione che giri nell'emulatore di WP7. Di default la console dell'emulatore non è visibile, ma è possibile attivarla tramite una chiave di registro:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\XDE]
"EnableConsole"=dword:00000001

 

Si può inserire manualmente la chiave nel registro o copiare il testo precedente in un file con estensione "reg" per poi eseguirlo. Sui sistemi a 64 bit, poiché la console di WP7 è a 32 bit, è necessario inserire la chiave di registro nella parte a 32 bit, utilizzando il programma regedit.exe che si trova normalmente nella cartella c:\Windows\SysWow64 oppure utilizzando quest'altro contenuto per il file con estensione "reg":

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\XDE]
"EnableConsole"=dword:00000001

Evento on-line su Windows Phone Mango

Pubblicata il 15 luglio 2011

Da ieri è pubblico lo streaming dell'evento on-line su Windows Phone 7 "Mango".

L'evento (link) è composto da una keynote e da 6 sessioni tecniche:

  • Introduzione allo sviluppo per Windows Phone - Cristian Civera
  • Il design delle applicazioni Windows Phone - Roberto Cavallini
  • Le novità della piattaforma di sviluppo in Windows Phone "Mango" - Lorenzo Barbieri
  • Multitasking nelle applicazioni Windows Phone "Mango" - Matteo Pagani
  • Live Tile e notifiche in Windows Phone "Mango" - Michele Locuratolo
  • Phone + Cloud in pochi clic con Azure Toolkit per Windows Phone 7 - Roberto Freato

Windows Phone 7 : E’ arrivato “Mango” Beta 2!!

Pubblicata il 29 giugno 2011

E' stato annunciato il rilascio della ROM con Mango per gli sviluppatori Windows Phone 7 registrati sul Marketplace.

L'annuncio è stato dato con il seguente post sul blog ufficiale di Windows Phone e rilanciato dal post di MSDN Italia.

Per maggiori informazioni e per il download consultate i precedenti link.

Disponibili i nuovi tools di sviluppo per WP7

Pubblicata il 24 maggio 2011

Microsoft ha annunciato il rilascio nelle prossime ore dei tools (in beta) per lo sviluppo con le nuove funzionalità previste per l'aggiornamento denominato "Mango".

Maggiori informazioni relativamente alle funzionalità introdotte con questa versione sono disponibili all'indirizzo http://www.microsoft.com/presspass/presskits/windowsphone/.

I tools saranno scaricabili dall'hub degli sviluppatori all'indirizzo http://create.msdn.com/en-us/resources/downloads.

LA documentazione relativa alle nuove API è già disponibile all'indirizzo http://msdn.microsoft.com/en-us/library/hh237343%28v=VS.96%29.aspx

Presentate le novità sulla piattaforma di sviluppo Windows Phone

Pubblicata il 14 aprile 2011

Presentate, durante la keynote del Mix11, le novità sulla piattafoema di sviluppo per Windows Phone7.

Le novità introdotte sono tantissime e tutte interessanti. Per maggiori info consultare il post.

I tools di sviluppo saranno disponibili nel mese di maggio.

Caliburn.Micro 1.0 RTW presentato al MIX 11 Open Source Fest

Pubblicata il 12 aprile 2011

Ieri è stata rilasciata e presentata al MIX 11 Open Source Fest la versione 1.0 RTW di Caliburn.Micro.

Questa versione contiene numerosi miglioramenti e correzioni delle funzionalità esistenti e introduce il supporto per i dialog modali (con approccio View-Model-First) anche sulla piattaforma WP7, con un design grafico analogo a quello dei Message Box nativi.

Inoltre da questa versione è possibile installare il framework attraverso NuGet.

Annuncio | Download | Package NuGet

Aggiornamenti al Marketplace di WP7

Pubblicata il 09 marzo 2011

Il blog ufficiale di Windows Phone comunica che sono stati rilasciati alcuni aggiornamenti riguardanti le policy del marketplace di WP7.

In sostanza, gli aggiornamenti riguardano:

  • Numero di applicazioni gratuite (che passano dalle 5 precedenti alle 100 attuali);
  • La policy 5.6 sui credits è stata resa consigliata e non più obbligatoria;
  •  Sono state aggiunte altre tipologie di license Open Source;

In più sono presenti alcuni altri annunci che possono essere consultati nel post presente sul blog.

 

Fonte: Windows Phone Developer Blog

Silverlight for Windows Phone Toolkit - Feb 2011

Pubblicata il 18 febbraio 2011

E' disponibile sul codeplex (link) la versione di febbraio 2011 del toolkit per Windows Phone 7.

Nella stessa pagina sono scaricabili anche gli esempi e i sorgenti.

Rilasciato l'aggiornamento dei Developer Tools per WP7

Pubblicata il 05 febbraio 2011

Sono stati rilasciati i Developer Tools di Gennaio per Windows Phone 7.

Il download è disponibile al seguente link mentre maggiori info sono disponibili sul post pubblicato nel blog dedicato.

 

Fonte: The Windows Phone Developer Blog

Cambiare la pagina di avvio di un'applicazione WP7

Scritto da Massimo Bonanni il 21 gennaio 2011 • Linguaggio: C#,VB  • Livello: 100 

Quando creiamo una applicazione WP7 (sia in C# che in VB.NET) la pagina di startup della stessa è MainPage.xaml.
Per poter cambiare questa pagina di startup con un'altra è necessairio intervenire all'interno del file WMAppManifest.xml contenuto della cartella Properties e modificare il seguente tag xml:

<Tasks>
<DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
</Tasks>

Aprire il browser di Windows Phone 7 da codice

Scritto da Massimo Bonanni il 07 gennaio 2011 • Linguaggio: C#,VB  • Livello: 100 

Se vogliamo, all'interno della nostra applicazione WP7, aprire il browser ad una specifica pagina possiamo utilizzare il seguente pezzo di codice:

VB.NET

Dim task = New WebBrowserTask()
task.URL = ""
task.Show()

 

C#

WebBrowserTask task = new WebBrowserTask();
task.URL = "";
task.Show();

 

All'esecuzione del metodo Show(), ovviamente, la nostra applicazione subisce il tombstoning.
Il namespace Microsoft.Phone.Tasks contiene tutti i principali task che si possono eseguire su WP7, come, ad esempio inviare una mail, scegliere un indirizzo di mail, inviare un sms e così via.

Annunciati gli aggiornamenti per WP7

Pubblicata il 07 gennaio 2011

Negli scorsi giorni sono stati annunciati gli aggiornamenti che verranno rilasciati per il sistema operativo Windows Phone 7.

Per maggiori informazioni è possibile consultare il comunicato sul sito ufficiale di Windows Phone a seguente link.

Concorso WP 7 Factor

Pubblicata il 23 dicembre 2010

Parte il concorso WP7 Factor indetto da Microsoft Italia per premiare gli sviluppatori WP7.

Dal 20 Dicembre 2010 al 7 Aprile 2011 sono in palio 14 Zune Pass annuali e, al termine del periodo, tre buoni acquisto per un totale di 5000€.

La pagina del concorso con il regolamento completo è qui.

 

Fonte: MSDN Italia

Enumerare risorse e contenuti inclusi all’interno di un’applicazione Windows Phone 7

Scritto da Marco Amendola il 03 dicembre 2010 • Linguaggio: C#  • Livello: 100 

All'interno di un applicazione WP7 le risorse aggiuntive (ad es. immagini o suoni) possono essere incluse con due modalità di compilazione: Resource e Content.
La prima include gli elementi all'interno dell'assembly dell'applicazione (il quale a sua volta è contenuto all'interno del pacchetto Xap, che è in sostanza uno Zip), mentre la seconda inserisce gli elementi nello Xap, a fianco del'assembly principale e delle eventuali librerie referenziate nel progetto.

La seconda modalità è da preferire in quanto riduce la dimensione dell'assembly, migliorando il tempo di caricamento. Inoltre alcuni controlli (ad es. l'Application Bar) richiedono che le relative icone siano compilate come Content.

Per gli elementi compilati come "Resource", l'URI da utilizzare per la lettura è nella forma: /My.Assembly;component/Path/To/ImageFile.ext
Se invece gli elementi inclusi sono compilati come "Content", gli URI relativi sono nella forma: /Path/To/ImageFile.ext

Mentre l'accesso diretto ai singoli elementi è piuttosto semplice, conoscendone il nome e il path, l'enumerazione non lo è altrettanto.

Per enumerare gli elementi Resource è possibile utilizzare la classe ResourceManager; di seguito un esempio:

IEnumerable<Uri> GetAllImageUrisInternal()
{
var assembly = Assembly.GetExecutingAssembly();
var assemblyName = assembly.FullName;
assemblyName = assemblyName.Remove(assemblyName.IndexOf(","));
ResourceManager rm = new ResourceManager(assemblyName + ".g", assembly);

//HACK: senza questo primo accesso l'enumerazione sembra fallire
using (Stream stm = rm.GetStream("app.xaml")) { }

var entries = new DictionaryEntry[]{};
using (ResourceSet rs = rm.GetResourceSet(Thread.CurrentThread.CurrentUICulture, false, true)) {
entries = rs.Cast<DictionaryEntry>().ToArray();
}

foreach (var entry in entries)
{
var key = entry.Key.ToString();
if (key.StartsWith("resources/images/")) //qui è possibile filtrare le risorse di interesse in base al nome e al path
yield return new Uri(string.Format("/{0};component/{1}", assemblyName, key),UriKind.RelativeOrAbsolute);
}
}

 

Per enumerare gli elementi inclusi come Content, invece, non conosco una soluzione che consenta di ispezionare il pacchetto Xap direttamente dall'applicazione.

E' però possibile includere nello Xap un file di testo contenente un elenco degli elementi inclusi (una sorta di indice).
Accedendo a questo file, che deve avere ovviamente un nome noto, è possibile ricostruire l'elenco dei Content.
Per non dover manutenere manualmente l'elenco è possibile aggiungere nel file di progetto .csprj (che descrive il processo di build) un piccolo task MSBuild che scrive l'elenco dei "Content" in un file di testo:

<Target Name="BeforeBuild">
<WriteLinesToFile File="Resources\ContentList.txt" Lines="@(Content)" Overwrite="true" Encoding="Unicode"/>
</Target>

 

Questo "step" sarà eseguito automaticamente prima di ogni compilazione, in modo che l'elenco sia sempre allineato ai contenuti correnti del progetto.

Rilasciati i VB Developer Tools per WP7 RTW

Pubblicata il 30 novembre 2010

E' stato annunciato il rilascio dei Developer Tools per VB.NET per la piattaforma Windows Phone 7.

La versione rilasciata è la RTW, sono disponibili i soli progetti Silverlight (no XNA) ma le applicazioni sviluppate con i tools possono essere sottomesse nel marketplace.

L'annuncio è stato dato sul blog di WP7 con il seguente post. Il download dei tools è disponibile dal seguente link.

 

Fonte: Windows Phone Developer Blog

Rilasciato il Silverlight Toolkit for Windows Phone di Novembre

Pubblicata il 03 novembre 2010

E' stato rilasciato il Silverlight Toolkit for Windows Phone di Novembre.

Per scaricare il pacchetto di installazione utilizzare il link.

E-book gratuito su Windows Phone 7

Pubblicata il 01 novembre 2010

Charles Petzold, leggenda nel nostro settore, ha pubblicato gratuitamente un e-book sullo sviluppo per Windows Phone 7.0 per la gioia di chi ha iniziato a programmare sui nuovi dispositivi mobile di Microsoft.

Download

Caliburn Micro: un mini-framework per WPF, Silverlight e Windows Phone 7

Pubblicata il 07 luglio 2010

E' stato presentato Caliburn.Micro, un mini framework per applicazioni WPF 4, Silverlight 4 e WP7. Si tratta di una implementazione molto compatta (circa 50Kb) del "fratello maggiore" Caliburn, che consente la realizzazione di applicazioni basate su pattern MVVM (Presentation Model) e Application Controller.

Annuncio | Home

 
x