<feed xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns="http://www.w3.org/2005/Atom" xml:lang="it-IT">
    <title>Il Blog di Nicolò Carandini</title>
    <link rel="self" type="application/atom+xml" href="http://blogs.ugidotnet.org/Nick60/Atom.aspx" />
    <subtitle type="html">L'intramontabile passione dello sviluppo software</subtitle>
    <id>http://blogs.ugidotnet.org/Nick60/Default.aspx</id>
    <author>
        <name>Nicolò Carandini</name>
        <uri>http://blogs.ugidotnet.org/Nick60/Default.aspx</uri>
    </author>
    <generator uri="http://subtextproject.com" version="Subtext Version 2.1.0.3">Subtext</generator>
    <updated>2012-02-05T12:58:33Z</updated>
    <entry>
        <title>WP7 Bing Map</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/Nick60/archive/2012/02/05/wp7-bing-map.aspx" />
        <id>http://blogs.ugidotnet.org/Nick60/archive/2012/02/05/wp7-bing-map.aspx</id>
        <published>2012-02-05T12:58:33Z</published>
        <updated>2012-02-05T12:58:33Z</updated>
        <content type="html">&lt;p&gt;E anche la Mappa delle segnalazioni di Decoro Urbano è completata.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/WP7-Bing-Map-e-custom-pushpin_AACA/PushpinsMappa.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="PushpinsMappa" border="0" alt="PushpinsMappa" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/WP7-Bing-Map-e-custom-pushpin_AACA/PushpinsMappa_thumb.png" width="450" height="339" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Prima di tutto devo dire che l’emulatore di Windows Phone è una grande comodità, perché consente di simulare lo spostamento del telefono in giro per il mondo senza muoversi di un metro, risparmiandoci la “fatica” di dover mockare il servizio di posizionamento.&lt;/p&gt;  &lt;p&gt;Ma veniamo alla gestione della mappa delle segnalazioni di Decoro Urbano, per la quale è necessario:&lt;/p&gt;  &lt;p&gt;1. Aggiornare l’area visualizzata al variare della posizione dell’utente;&lt;/p&gt;  &lt;p&gt;2. Recuperare dal servizio web di Decoro Urbano le segnalazioni relative all’area geografica visualizzata nella mappa e mostrare i relativi “pushpin”.&lt;/p&gt;  &lt;p&gt;Il primo punto è facilmente realizzabile usufruendo del metodo &lt;strong&gt;&lt;font color="#0000ff"&gt;SetView(GeoCoordinate center, double zoomLevel)&lt;/font&gt;&lt;/strong&gt; del “Bing Map Control” (Microsoft.Phone.Controls.Maps.Map), dove lo ZoomLevel è il livello di dettaglio richiesto e center è la posizione ottenuta del servizio di localizzazione di cui ho già parlato in un mio precedente post.&lt;/p&gt;  &lt;p&gt;Per il secondo punto occorre fare una breve premessa.&lt;/p&gt;  &lt;p&gt;Colacolare l’area geografica a partire dalle dimensioni del controllo (in termini di pixel, intendo) non è una cosa facile, tutt’altro. Poiché la terra non è piatta e il Sole non gira intorno alla Terra, rappresentare la geometria sferica su di un piano comporta l’uso di una proiezione. Nella cartografia vi sono svariati metodi, ciascuno adatto ad un particolare scopo. A noi serve ottenere la latitudine e la longitudine minima e massima visibili nella mappa, e per tale scopo il Bing Map control offre un paio di metodi.&lt;/p&gt;  &lt;p&gt;Inizialmente ho usato una proprietà che mi sembrava calzasse a pennello: &lt;strong&gt;&lt;font color="#2ccbd3"&gt;LocationRect&lt;/font&gt;&lt;/strong&gt; &lt;font color="#000000"&gt;&lt;strong&gt;BoundingRectangle&lt;/strong&gt; dove Microsoft.Phone.Controls.Maps.LocationRect è una classe che ha le seguenti proprietà:&lt;/font&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:812efc78-97ff-4b2b-9d11-8dcc6b886e10" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color: #ffffff; max-height: 300px; overflow: auto; padding: 2px 5px; white-space: nowrap"&gt;&lt;span style="color:#2b91af"&gt;GeoCoordinate&lt;/span&gt; Center { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; }&lt;br /&gt; &lt;span style="color:#0000ff"&gt;double&lt;/span&gt; East { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt; &lt;span style="color:#0000ff"&gt;double&lt;/span&gt; Height { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; }&lt;br /&gt; &lt;span style="color:#0000ff"&gt;double&lt;/span&gt; North { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt; &lt;span style="color:#2b91af"&gt;GeoCoordinate&lt;/span&gt; Northeast { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt; &lt;span style="color:#2b91af"&gt;GeoCoordinate&lt;/span&gt; Northwest { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt; &lt;span style="color:#0000ff"&gt;double&lt;/span&gt; South { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt; &lt;span style="color:#2b91af"&gt;GeoCoordinate&lt;/span&gt; Southeast { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt; &lt;span style="color:#2b91af"&gt;GeoCoordinate&lt;/span&gt; Southwest { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt; &lt;span style="color:#0000ff"&gt;double&lt;/span&gt; West { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt; &lt;span style="color:#0000ff"&gt;double&lt;/span&gt; Width { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt;; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Ma dato che la mappa è asincrona nel recuperare le immagini dal sito per spostarsi con fluidità, dall’istante in cui impostiamo il centro e lo zoom level della mappa al momento in cui la proprietà BoundingRectangle restituisce i dati che ci interessano passa ovviamente del tempo, ovvero quello necessario per spostarsi nella nuova posizione.&lt;/p&gt;  &lt;p&gt;Per fortuna esiste un’altra proprietà, la &lt;strong&gt;TargetBoundingRectangle&lt;/strong&gt; che restituisce immediatamente i dati a noi necessari. In questo modo è stato facile usare le proprietà North e South per ricavare la minima e massima latitudine, West ed East per la minima e massima longitudine, infine passare la richiesta al web service di Decoro Urbano e ottenere le segnalazioni comprese nell’area visualizzata in mappa.&lt;/p&gt;    &lt;p&gt;Nel prossimo post vedremo come bindare l’elenco delle segnalazioni ai pushpins della mappa e personalizzarne l’aspetto.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/100751.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/Nick60/comments/100751.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/Nick60/comments/commentRss/100751.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/Nick60/services/trackbacks/100751.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Quasi XML e Regular Expressions Negative Lookup</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/Nick60/archive/2012/02/02/quasi-xml-e-regular-expressions-negative-lookup.aspx" />
        <id>http://blogs.ugidotnet.org/Nick60/archive/2012/02/02/quasi-xml-e-regular-expressions-negative-lookup.aspx</id>
        <published>2012-02-02T18:43:15Z</published>
        <updated>2012-02-02T19:03:34Z</updated>
        <content type="html">&lt;p&gt;Premessa:&lt;/p&gt;  &lt;p&gt;Oggi mi sono trovato a dover risolvere una questione relativa alla “pulizia” di dati “quasi XML”, che all’interno dei tag XML possono eventualmente contenere il carattere “proibito” &amp;amp; (ampersand).&lt;/p&gt;  &lt;p&gt;Com’è noto, tale carattere è un metacarattere che serve a rappresentare i caratteri non consentiti all’interno dei tags XML, secondo la nota tabella:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/Quasi-XML-e-Regular-expressions_FA6E/Tabella%20Metachars%20XML_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Tabella Metachars XML" border="0" alt="Tabella Metachars XML" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/Quasi-XML-e-Regular-expressions_FA6E/Tabella%20Metachars%20XML_thumb_1.png" width="240" height="145" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La cosa è complicata per il fatto che i dati suddetti possono contenere sia ampersand errate (un ampersand solo soletto) e sia corretti (&amp;amp;amp;), com’è possibile vedere nell’esempio dove il valore contenuto nel &amp;lt;tag&amp;gt; è &lt;font color="#0000ff"&gt;&lt;strong&gt;Mario scrive: "You &amp;amp; Me, forever!"&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="Courier New"&gt;&amp;lt;tag&amp;gt;&lt;font color="#0000ff"&gt;Mario scrive: &amp;amp;quot;You &lt;font color="#ff0000"&gt;&amp;amp;&lt;/font&gt; Me, forever!&amp;amp;quot;&lt;/font&gt;&amp;lt;/tag&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;che dobbiamo trasformare in&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="Courier New"&gt;&amp;lt;tag&amp;gt;&lt;font color="#0000ff"&gt;Mario scrive: &amp;amp;quot;You &lt;font color="#00ff00"&gt;&amp;amp;amp;&lt;/font&gt; Me, forever!&amp;amp;quot;&lt;/font&gt;&amp;lt;/tag&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;E’ evidente che non possiamo semplicemente sostituire ogni ampersand con &amp;amp;amp; perchè altrimenti otterremmo:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="Courier New"&gt;&amp;lt;tag&amp;gt;&lt;font color="#0000ff"&gt;Mario scrive: &lt;font color="#ff0000"&gt;&amp;amp;amp;quot;&lt;/font&gt;You &lt;font color="#00ff00"&gt;&amp;amp;amp;&lt;/font&gt; Me, forever&lt;/font&gt;&lt;font color="#ff0000"&gt;!&amp;amp;amp;quot;&lt;/font&gt;&amp;lt;/tag&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Veniamo quindi all’oggetto di questo post:&lt;/p&gt;  &lt;p&gt;Nelle espressioni regolari è possibile utilizzare il “Negative Lookup” per NON riconoscere un costrutto SE DOPO ce n’è un’altro.&lt;/p&gt;  &lt;p&gt;Nel nostro caso in esempio, l’espressione regolare è&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" size="4" face="Courier New"&gt;&lt;strong&gt;&amp;amp;&lt;font color="#9b00d3"&gt;(?!&lt;/font&gt;quot;&lt;font color="#9b00d3"&gt;)&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;che troverà tutti gli &lt;strong&gt;&lt;font color="#0000ff"&gt;&amp;amp;&lt;/font&gt;&lt;/strong&gt; non seguiti da &lt;font color="#0000ff"&gt;&lt;strong&gt;quot;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;e più in generale:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" size="4" face="Courier New"&gt;&lt;strong&gt;&amp;amp;&lt;font color="#9b00d3"&gt;(?!&lt;/font&gt;lt;|gt;|amp;|apos;|quot;&lt;font color="#9b00d3"&gt;)&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;That’s all folks!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/100746.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/Nick60/comments/100746.aspx</wfw:comment>
        <slash:comments>6</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/Nick60/comments/commentRss/100746.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/Nick60/services/trackbacks/100746.aspx</trackback:ping>
    </entry>
    <entry>
        <title>WP7 e la geolocalizzazione</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/Nick60/archive/2012/01/29/wp7-e-la-geolocalizzazione.aspx" />
        <id>http://blogs.ugidotnet.org/Nick60/archive/2012/01/29/wp7-e-la-geolocalizzazione.aspx</id>
        <published>2012-01-29T19:25:26Z</published>
        <updated>2012-01-29T19:25:26Z</updated>
        <content type="html">&lt;p&gt;Nello sviluppo del client per Decoro Urbano, un aspetto essenziale è quello della localizzazione.&lt;/p&gt;  &lt;p&gt;WP7 mette a disposizione un servizio che utilizza in modo efficiente tre fonti di dati, secondo la disponibilità: GPS, Wi-Fi e rete cellulare. vi sono due livelli di precisione (standard e alta) e la possibilità di definire un valore di distanza minima entro la quale non deve essere segnalata alcuna variazione di posizione. In tal modo il consumo della batteria viene ridotto al minimo. E’ comunque buona prassi, nello sviluppo della propria applicazione, attenersi alle buone pratiche d’uso descritte &lt;a href="http://msdn.microsoft.com/en-us/library/ff431814(v=vs.92).aspx" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Io, per maggiore comodità, ho wrappato il servizio in una classe “GeoPosition” che gestisce il servizio (più o meno secondo qaunto descritto &lt;a href="http://msdn.microsoft.com/en-us/library/ff431782(v=vs.92).aspx" target="_blank"&gt;qui&lt;/a&gt;) esponendo le proprietà utili quali lo stato del servizio, la posizione, ecc. attraverso l’ INotifyPropertyChanged. In questo modo, inserendo nel ViewModel una proprietà di tipo GeoPosition posso aggiornare la view utilizzando il classico meccanismo di binding. Poiché al cambio di posizione corrisponde una chiamata al web service di Decoro Urbano che ritorna il nome del Comune ed alcune informazioni associate (ad esempio se tale Comune partecipa al progetto), è stato divertente provare sull’emulatore e scoprire che mi trovavo a Redmon, che al momento non partecipa a Decoro Urbano (ma mai dire mai!) :-D&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/f30759ba9504_FAAA/PosizioneRedmond_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="PosizioneRedmond" border="0" alt="PosizioneRedmond" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/f30759ba9504_FAAA/PosizioneRedmond_thumb_1.png" width="450" height="339" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Il motivo è semplice. Nell’emulatore il servizio fornisce la posizione di default. Cambiando manualmente la posizione nella mappa dall’apposita finestra dell’emulatore (ad esempio su viale Mazzini, a Roma), otteniamo in asincrono la modifica del testo nella view:&lt;/p&gt;        &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/f30759ba9504_FAAA/PosizioneRoma_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="PosizioneRoma" border="0" alt="PosizioneRoma" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/f30759ba9504_FAAA/PosizioneRoma_thumb.png" width="450" height="338" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Riassumendo: il Location Service aggiorna la proprietà posizione della classe“GeoPosition” che notifica il suo cambiamento mediante INotifyPropertyChanged, il mio ViewModel lancia una richiesta HTTP asincrona al servizio web di Decoro Urbano. Quando viene ricevuta la risposta viene modificata la proprietà “UserStatAndPositionDescription” che restituisce il testo da mostrare nella view. Anche quest’ultima modifica è segnalata tramite INotifyPropertyChanged e quindi la view viene automaticamente aggiornata.&lt;/p&gt;  &lt;p&gt;Windows Phone Rulez!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/100739.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/Nick60/comments/100739.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/Nick60/comments/commentRss/100739.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/Nick60/services/trackbacks/100739.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Inutile, ma essenziale!</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/Nick60/archive/2012/01/26/inutile-ma-essenziale.aspx" />
        <id>http://blogs.ugidotnet.org/Nick60/archive/2012/01/26/inutile-ma-essenziale.aspx</id>
        <published>2012-01-26T11:41:11Z</published>
        <updated>2012-01-26T11:41:11Z</updated>
        <content type="html">&lt;p&gt;Alle volte le piccole cose inutili sono essenziali per per aggiungere un po’ di sale alla quotidianità.&lt;/p&gt;  &lt;p&gt;Tra queste, a mio umilissimo parere, c’è la possibilità di modificare la skin dell’emulatore Windows Phone 7:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/9b53da9aeca5_A2EB/image_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/9b53da9aeca5_A2EB/image_thumb.png" width="250" height="472" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Questa e altre cose più serie nel post di Doug Rathbone: &lt;a href="http://www.diaryofaninja.com/blog/2012/01/23/8-musthave-tools-for-windows-phone-7-development"&gt;8 Must-Have Tools for Windows Phone 7 Development&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/100731.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/Nick60/comments/100731.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/Nick60/comments/commentRss/100731.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/Nick60/services/trackbacks/100731.aspx</trackback:ping>
    </entry>
    <entry>
        <title>WP7 Emulator e Servizi Web</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/Nick60/archive/2012/01/22/wp7-emulator-e-servizi-web.aspx" />
        <id>http://blogs.ugidotnet.org/Nick60/archive/2012/01/22/wp7-emulator-e-servizi-web.aspx</id>
        <published>2012-01-22T14:52:13Z</published>
        <updated>2012-01-22T14:53:27Z</updated>
        <content type="html">&lt;p&gt;Un piacevole side-effect che ho riscontrato nell’uso di Fiddler con l’emulatore del Windows Phone è che “magicamente” hanno cominciato a funzionare anche le richieste ai servizi web che prima si rifiutavano di andare. Ho perso un bel po’ di tempo facendo varie prove, convinto che fossi io a sbagliare qualcosa, invece è prorpio l’emulatore che non ne voleva sentir parlare, visto che facendo gli stessi test con il telefono tutto filava liscio.&lt;/p&gt;  &lt;p&gt;Devo ammettere che non ho capito bene da cosa dipenda, ma per il momento mi va bene così (ho altro più urgente di cui occuparmi).&lt;/p&gt;  &lt;p&gt;Quindi, se vi dovesse capitare di aver difficoltà nell’esecuzione di comandi HTTP per accedere ai servizi web dall’emulatore WP7, scaricatevi Fiddler e impostatelo seguendo le indicazioni del &lt;a href="http://blogs.ugidotnet.org/Nick60/archive/2012/01/20/usare-fiddler-con-lrsquoemulatore-windows-phone.aspx" target="_blank"&gt;precedente post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Come si suol dire, due piccioni con una fava!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/100722.aspx" width="1" height="1" /&gt;</content>
    </entry>
    <entry>
        <title>Usare fiddler con l&amp;rsquo;emulatore Windows Phone</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/Nick60/archive/2012/01/20/usare-fiddler-con-lrsquoemulatore-windows-phone.aspx" />
        <id>http://blogs.ugidotnet.org/Nick60/archive/2012/01/20/usare-fiddler-con-lrsquoemulatore-windows-phone.aspx</id>
        <published>2012-01-20T13:01:43Z</published>
        <updated>2012-01-20T13:01:43Z</updated>
        <content type="html">&lt;p&gt;Per usare fiddler con l’emulatore bisogna fare così:&lt;/p&gt;  &lt;p&gt;1. Da “Tools | Fiddler Options” settare l’opzione evidenziata e confermare cliccando su OK:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/46f37401a5d0_B201/image_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/46f37401a5d0_B201/image_thumb.png" width="400" height="272" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. Nella QuickExec box sotto la lista delle sessioni, digitare “&lt;strong&gt;prefs set fiddler.network.proxy.registrationhostname &amp;lt;&lt;em&gt;Host&amp;gt; &lt;/em&gt;&lt;/strong&gt;dove&amp;lt;&lt;em&gt;&lt;strong&gt;Host&amp;gt; &lt;/strong&gt;&lt;/em&gt;e il nome del vostro desktop:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/46f37401a5d0_B201/image_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/46f37401a5d0_B201/image_thumb_1.png" width="404" height="457" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3. Riavviare Fiddler.&lt;/p&gt;  &lt;p&gt;4. Avviare (o riavviare) l’emulatore Windows Phone 7&lt;/p&gt;  &lt;p&gt;Per verificare il funzionamento, aprire Internet Explorer nell’emulatore e controllare che il traffico venga visualizzato in Fiddler. &lt;/p&gt;  &lt;p&gt;Maggiori info &lt;a href="http://blogs.msdn.com/b/fiddler/archive/2010/10/15/fiddler-and-the-windows-phone-emulator.aspx" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;That’s all folks!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/100717.aspx" width="1" height="1" /&gt;</content>
    </entry>
    <entry>
        <title>[WP7] Forzare il binding di una TextBox</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/Nick60/archive/2012/01/20/wp7-forzare-il-binding-di-una-textbox.aspx" />
        <id>http://blogs.ugidotnet.org/Nick60/archive/2012/01/20/wp7-forzare-il-binding-di-una-textbox.aspx</id>
        <published>2012-01-20T11:06:15Z</published>
        <updated>2012-01-20T11:08:24Z</updated>
        <content type="html">&lt;p&gt;Generalmente il binding two-way di una textbox aggiorna la proprietà a cui è bindata quando il controllo perde il focus.&lt;/p&gt;  &lt;p&gt;Poiché però i pulsanti posizionati nel menu non spostano il focus della pagina, vediamo cosa accade in pratica:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/f6749f0fd9c8_9253/Step1_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Step1" border="0" alt="Step1" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/f6749f0fd9c8_9253/Step1_thumb.png" width="225" height="409" /&gt;&lt;/a&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/f6749f0fd9c8_9253/Step2_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Step2" border="0" alt="Step2" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/f6749f0fd9c8_9253/Step2_thumb.png" width="225" height="409" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Il motivo è semplice: poiché la TextBox che contiene il cognome non ha perso il focus, il binding non ha aggiornato la proprietà sorgente (Binding source) del ViewModel, quindi il controllo della validità dei dati immessi ritorna l’errore. Peggio ancora, poiché di fatto il valore della proprietà bindata suddetta è ancora quello vecchio, nel nostro caso abbiamo un errore perché la nostra logica di business richiede un valore non vuoto e siamo partiti da zero, ma in caso di una maschera di editing dei dati, dove magari vogliamo correggere il valore contenuto nella textbox, di fatto senza accorgerci di nulla il programma utilizzerà il VECCHIO valore e non darà errore perché tale valore non è vuoto.&lt;/p&gt;  &lt;p&gt;Se avessimo utilizzato un bottone nella pagina e non un ApplicationBarIconButton, il focus si sarebbe spostato sul bottone stesso e il binding avrebbe completato l’aggiornamento della sorgente senza problema alcuno.&lt;/p&gt;  &lt;p&gt;Dunque risulta assolutamente necessario, nello scenario descritto, forzare il binding in modo da aggiornare la sorgente al contenuto delle TextBox e dell’eventuali PasswordBox.&lt;/p&gt;  &lt;p&gt;Per farlo si può utilizzare il seguente codice, da inserire nel codice associato all'evento prodotto dal pulsante:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7d049170-b882-4c01-8858-795bd000baa9" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;C#:&lt;/div&gt; &lt;div style="background-color: #ffffff; max-height: 300px; overflow: auto; padding: 2px 5px; white-space: nowrap"&gt;&lt;span style="color:#008000"&gt;// Force two-way binding of the editing field&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; focusObj = &lt;span style="color:#2b91af"&gt;FocusManager&lt;/span&gt;.GetFocusedElement();&lt;br /&gt; &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (focusObj != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; (focusObj &lt;span style="color:#0000ff"&gt;is&lt;/span&gt; &lt;span style="color:#2b91af"&gt;TextBox&lt;/span&gt; || focusObj &lt;span style="color:#0000ff"&gt;is&lt;/span&gt; &lt;span style="color:#2b91af"&gt;PasswordBox&lt;/span&gt;))&lt;br /&gt; {&lt;br /&gt;     &lt;span style="color:#2b91af"&gt;BindingExpression&lt;/span&gt; binding;&lt;br /&gt;     &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (focusObj &lt;span style="color:#0000ff"&gt;is&lt;/span&gt; &lt;span style="color:#2b91af"&gt;TextBox&lt;/span&gt;)&lt;br /&gt;     {&lt;br /&gt;         binding = (focusObj &lt;span style="color:#0000ff"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af"&gt;TextBox&lt;/span&gt;).GetBindingExpression(&lt;span style="color:#2b91af"&gt;TextBox&lt;/span&gt;.TextProperty);&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color:#0000ff"&gt;else&lt;/span&gt;&lt;br /&gt;     {&lt;br /&gt;         binding = (focusObj &lt;span style="color:#0000ff"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af"&gt;PasswordBox&lt;/span&gt;).GetBindingExpression(&lt;span style="color:#2b91af"&gt;PasswordBox&lt;/span&gt;.PasswordProperty);&lt;br /&gt;     }&lt;br /&gt;     binding.UpdateSource();&lt;br /&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;      &lt;p&gt;That’s all folks!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/100716.aspx" width="1" height="1" /&gt;</content>
    </entry>
    <entry>
        <title>Lab addicted&amp;hellip;</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/Nick60/archive/2012/01/19/lab-addictedhellip.aspx" />
        <id>http://blogs.ugidotnet.org/Nick60/archive/2012/01/19/lab-addictedhellip.aspx</id>
        <published>2012-01-19T10:51:57Z</published>
        <updated>2012-01-19T10:51:57Z</updated>
        <content type="html">&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/Lab-addicted_9889/image_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/Lab-addicted_9889/image_thumb.png" width="300" height="206" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Il Lab a Roma è stato un successo, e io bisso a Napoli!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/100712.aspx" width="1" height="1" /&gt;</content>
    </entry>
    <entry>
        <title>WP7 Panorama e Bing Map</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/Nick60/archive/2012/01/11/wp7-panorama-e-bing-map.aspx" />
        <id>http://blogs.ugidotnet.org/Nick60/archive/2012/01/11/wp7-panorama-e-bing-map.aspx</id>
        <published>2012-01-11T02:37:45Z</published>
        <updated>2012-01-11T02:55:51Z</updated>
        <content type="html">&lt;p&gt;Sto sviluppando la versione per WP7 di &lt;a href="http://www.decorourbano.org/"&gt;Decoro Urbano&lt;/a&gt;, e ho deciso di realizzare un Panorama così fatto:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/cdd1c201e57b_15ED/clip_image002_2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/cdd1c201e57b_15ED/clip_image002_thumb.jpg" width="454" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ovviamente lo sfondo diventa chiaro se l’utente sceglie un tema a sfondo chiaro.&lt;/p&gt;  &lt;p&gt;Il problema, segnalatomi da Lorenzo, sta nell’uso della mappa bing nel panorama. Funzionare funziona benissimo, è solo che si manifasta una incongruenza nella User eXperience, in quanto in un panorama l’utente deve poter scorrere le pagine, e questo non avviene se la gesture viene fatta nella mappa. Infatti in questo caso il componente Bing Map interpreta la gesture come una richiesta di scorrimento della mappa stessa. E’ chiaro che l’utente potrebbe comunque scorrere il contenuto del panorama eseguendo la gesture al di fuori della mappa (nel mio caso al di sopra) ma rimane una inconsistenza poco piacevole.&lt;/p&gt;  &lt;p&gt;Io ho risolto incorporando la mappa come contenuto di un pulsante, del quale ho cambiato lo stile in modo tale da mostrare una leggera cornice solo quando tocco la mappa (di fatto quando tocco il pulsante che la contiene) in modo da dare un feedback visivo al “tocco”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/cdd1c201e57b_15ED/image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/cdd1c201e57b_15ED/image_thumb.png" width="200" height="366" /&gt;&lt;/a&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/cdd1c201e57b_15ED/image_6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/cdd1c201e57b_15ED/image_thumb_2.png" width="200" height="366" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La cosa funziona bene perché se la gesture è un “tocco”, il bottone esegue il codice associato all’evento Click, se invece si tratta di un “trascinamento”, il pulsante ignora la gesture e il panorama scorre.&lt;/p&gt;  &lt;p&gt;L’evento click è associato ad una pagina di visualizzazione della mappa, che in questo caso è libera di interpretare le gesture come spostamento della mappa:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/cdd1c201e57b_15ED/image_8.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/cdd1c201e57b_15ED/image_thumb_3.png" width="200" height="372" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Di seguito il sorgente dello stile:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6fc73c54-ad41-42d7-a598-76d258404804" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;C#:&lt;/div&gt; &lt;div style="background-color: #ffffff; max-height: 300px; overflow: auto; padding: 2px 5px; white-space: nowrap"&gt;&lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Style&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Key&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="BingMapButtonStyle"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; TargetType&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Button"&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Property&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Background"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Transparent"/&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Property&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="BorderBrush"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; PhoneForegroundBrush}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"/&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Property&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Foreground"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; PhoneForegroundBrush}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"/&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Property&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="BorderThickness"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; PhoneBorderThickness}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"/&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Property&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="FontFamily"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; PhoneFontFamilySemiBold}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"/&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Property&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="FontSize"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; PhoneFontSizeMediumLarge}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"/&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Property&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Padding"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="10,3,10,5"/&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Property&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Template"&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter.Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;             &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color:#ff0000"&gt; TargetType&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Button"&amp;gt;&lt;/span&gt;&lt;br /&gt;                 &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Background&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Transparent"&amp;gt;&lt;/span&gt;&lt;br /&gt;                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;VisualStateManager.VisualStateGroups&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;VisualStateGroup&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="CommonStates"&amp;gt;&lt;/span&gt;&lt;br /&gt;                             &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;VisualState&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Normal"/&amp;gt;&lt;/span&gt;&lt;br /&gt;                             &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;VisualState&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="MouseOver"/&amp;gt;&lt;/span&gt;&lt;br /&gt;                             &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;VisualState&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Pressed"&amp;gt;&lt;/span&gt;&lt;br /&gt;                                 &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Storyboard&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Foreground"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ContentContainer"&amp;gt;&lt;/span&gt;&lt;br /&gt;                                         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DiscreteObjectKeyFrame&lt;/span&gt;&lt;span style="color:#ff0000"&gt; KeyTime&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; PhoneBackgroundBrush}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"/&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Background"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ButtonBackground"&amp;gt;&lt;/span&gt;&lt;br /&gt;                                         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DiscreteObjectKeyFrame&lt;/span&gt;&lt;span style="color:#ff0000"&gt; KeyTime&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; PhoneForegroundBrush}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"/&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="BorderBrush"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ButtonBackground"&amp;gt;&lt;/span&gt;&lt;br /&gt;                                         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DiscreteObjectKeyFrame&lt;/span&gt;&lt;span style="color:#ff0000"&gt; KeyTime&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; PhoneForegroundBrush}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"/&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="(Border.BorderThickness)"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ButtonBackground"&amp;gt;&lt;/span&gt;&lt;br /&gt;                                         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DiscreteObjectKeyFrame&lt;/span&gt;&lt;span style="color:#ff0000"&gt; KeyTime&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="5"/&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                 &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Storyboard&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                             &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;VisualState&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                             &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;VisualState&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Disabled"&amp;gt;&lt;/span&gt;&lt;br /&gt;                                 &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Storyboard&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Foreground"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ContentContainer"&amp;gt;&lt;/span&gt;&lt;br /&gt;                                         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DiscreteObjectKeyFrame&lt;/span&gt;&lt;span style="color:#ff0000"&gt; KeyTime&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; PhoneDisabledBrush}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"/&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="BorderBrush"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ButtonBackground"&amp;gt;&lt;/span&gt;&lt;br /&gt;                                         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DiscreteObjectKeyFrame&lt;/span&gt;&lt;span style="color:#ff0000"&gt; KeyTime&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; PhoneDisabledBrush}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"/&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Background"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ButtonBackground"&amp;gt;&lt;/span&gt;&lt;br /&gt;                                         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DiscreteObjectKeyFrame&lt;/span&gt;&lt;span style="color:#ff0000"&gt; KeyTime&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Transparent"/&amp;gt;&lt;/span&gt;&lt;br /&gt;                                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                 &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Storyboard&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                             &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;VisualState&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;VisualStateGroup&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;VisualStateManager.VisualStateGroups&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Border&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ButtonBackground"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; BorderBrush&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;TemplateBinding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; BorderBrush}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; BorderThickness&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Background&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;TemplateBinding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Background}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; CornerRadius&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="0"&amp;gt;&lt;/span&gt;&lt;br /&gt;                         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ContentControl&lt;/span&gt;&lt;span style="color:#ff0000"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="ContentContainer"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ContentTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;TemplateBinding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ContentTemplate}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;TemplateBinding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Content}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Foreground&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;TemplateBinding&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Foreground}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; VerticalContentAlignment&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Stretch"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; HorizontalContentAlignment&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Stretch"/&amp;gt;&lt;/span&gt;&lt;br /&gt;                     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Border&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                 &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;             &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter.Value&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Setter&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Style&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;e del bottone con la mappa:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4feca10b-d52d-4faf-9be6-a3e14c3ff2ff" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;C#:&lt;/div&gt; &lt;div style="background-color: #ffffff; max-height: 300px; overflow: auto; padding: 2px 5px; white-space: nowrap"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Style&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color:#ff0000"&gt; BingMapButtonStyle}&lt;/span&gt;&lt;span style="color:#0000ff"&gt;"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Click&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="Button_Click"&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;bing&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Map&lt;/span&gt;&lt;span style="color:#ff0000"&gt; CredentialsProvider&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="&amp;lt;inserire qui le credenziali per connettersi a bing map&amp;gt;"&lt;/span&gt;&lt;br /&gt;                &lt;span style="color:#ff0000"&gt; IsEnabled&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="False"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; ZoomLevel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="13"&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;bing&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Map.Center&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;             &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;my&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;GeoCoordinate&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Latitude&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="41.9"&lt;/span&gt;&lt;span style="color:#ff0000"&gt; Longitude&lt;/span&gt;&lt;span style="color:#0000ff"&gt;="12.5" /&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;bing&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Map.Center&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a31515" /&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;bing&lt;/span&gt;&lt;span style="color:#0000ff"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Map&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Ovviamente lo stile del bottone può essere variato a piacere, qui quello che conta è solo il metodo, che prevede l’incapsulamento del componente Bing Map dentro un bottone, impostando al contempo la proprietà “IsEnabled” della mappa a “false”.&lt;/p&gt;  &lt;p&gt;That’s all folks!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/100691.aspx" width="1" height="1" /&gt;</content>
    </entry>
    <entry>
        <title>Ruby Or Not Ruby</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/Nick60/archive/2012/01/07/ruby-or-not-ruby.aspx" />
        <id>http://blogs.ugidotnet.org/Nick60/archive/2012/01/07/ruby-or-not-ruby.aspx</id>
        <published>2012-01-07T22:27:00Z</published>
        <updated>2012-01-07T22:27:00Z</updated>
        <content type="html">&lt;p&gt;Visto che stanno fiorendo un po’ di post su Ruby, approfitto per dire la mia rispondendo qui al blog di &lt;a href="http://blogs.ugidotnet.org/luKa/archive/2012/01/07/ruby-koans-and-ruby-idioms.aspx"&gt;Luca&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;Caro Luca, Ruby è una strada molto perigliosa!&lt;/p&gt;  &lt;p&gt;Dopo due anni d'uso posso dire che nasconde molte insidie. Specialmente in ambienti dove diversi plugin devono coesistere e devi solo sperare che gli altri siano stati abbastanza educati da non toglierti la sedia sotto il sedere...&lt;/p&gt;  &lt;p&gt;Mi spiego: Essendo un linguaggio dinamico, è banale poter ridefinire i metodi di qualsiasi classe anche di base. In particolare, è possibile TOGLIERLI.&lt;/p&gt;  &lt;p&gt;Io uso Ruby come linguaggio di programmazione per l'API di  Google SketchUp dove praticamente chiunque può creare dei plugin in ruby. Il che significa che nelle macchine dove viene installato il tuo plugin possono manifestarsi problemi d'uso che non dipendono dal tuo ma da altri plugin "maleducati". In generale questo ti costringe ad una programmazione "estremamente" (ed a mio avviso eccesivamente) difensiva.&lt;/p&gt;  &lt;p&gt;Ma vi sono casi in cui alcuni plugin (anche rinomati) fanno uso di librerie altrettanto rinomate (e mi riferisco in particolare ad una libreria molto usata che estende i metodi di datetime) che purtroppo sono bacate, in senso grave, in quanto rimuovono alcuni metodi senza verificare se tali metodi non siano stati eventualmente già rimossi (non ho parole) e visto che in tale caso Ruby genera un errore (e anche qui avrei da ridire, visto che se ti dico di togliere una cosa che non c'è, per lo stile di programmazione tipicamente lasco dei linguaggi dinamici, me lo dovresti tranquillamente ignorare) non c'è difesa.&lt;/p&gt;  &lt;p&gt;E' come cucinare la pasta in due in modo indipendente (tu vai in cucina e metti l'acqua a bollire, poi arrivo io a buttare la pasta quando bolle, O VICEVERSA) :   &lt;br /&gt;Io posso pure controllare se c'è il sale prima di metterlo nella pentola e se vengo dopo di te va tutto bene. Ma se tu lo metti senza controllare, e vieni DOPO di me, sicuramente mangeremo una pasta molto SALATA...    &lt;br /&gt;Questo rischia di crearti un'infinità di problemi che paiono (al cliente) appartenere al tuo plugin...    &lt;br /&gt;Io ho risolto perché il cliente ha uno stretto controllo sul parco macchine utilizzate, ma prova a fare un plugin da vendere liberamente... sono cavoli amari. Ciò non significa che non si possano fare, ci sono molti plugin commerciali (ma molti di questi hanno due versioni, una per Mac e una per Win. E visto che esite un'API (obsoleta) per il c++, ho tanto l'idea che molti pezzi siano scritti in c++ ...&lt;/p&gt;  &lt;p&gt;Cio non di meno, Ruby ha una sua eleganza e un suo fascino, e ci sono molte storie di successo sviluppate in Ruby On Rail. Ma francamente, se devo usare MVC, io preferisco l'implementazione Microsoft, Visual Studio e .NET è troppo comodo!&lt;/p&gt;  &lt;p&gt;Con tutta sincerità, di Ruby ne ho piene le scatole.&lt;/p&gt;  &lt;p&gt;Perché la libertà è bellissima e le sue potenzialità infinite, ma la potenza senza il controllo, è niente! (&amp;lt;cit.&amp;gt;). Quando sei libero di fare tutto e quel tutto può nuocere agli altri, nasce l’esigenza di un “corpus” (il più possibilmente piccolo) di regole condivise e di un sistema di controllo e applicazione di quelle regole. Cosicché si è forzatamente meno liberi, ma in cambio si può coesistere pacificamente. E per me questo vale anche nel campo dello sviluppo software.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/100678.aspx" width="1" height="1" /&gt;</content>
    </entry>
</feed>
