<rss version="2.0" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Silverlight</title>
        <link>http://blogs.ugidotnet.org/dsantarelli/category/Silverlight.aspx</link>
        <description>Silverlight</description>
        <language>it-IT</language>
        <copyright>Dario Santarelli</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>[Silverlight 5] ICustomTypeProvider</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2011/05/17/silverlight-5-icustomtypeprovider-again.aspx</link>
            <description>&lt;p&gt;La beta di Silverlight 5 ha introdotto una nuova interfaccia &lt;a target="_blank" href="http://msdn.microsoft.com/en-sg/library/system.reflection.icustomtypeprovider.aspx"&gt;ICustomTypeProvider&lt;/a&gt; che permette di effettuare il binding tra elementi della UI ed oggetti la cui struttura non è nota a compile-time. Nello specifico, l’esigenza che questa interfaccia soddisfa è evidente quando si lavora con dati provenienti da fonti eterogenee (database, istanze XML, oggetti JSON, dati binari, csv etc.) che si desiderano presentare senza ricompilare ogni volta che viene aggiunto/rimosso un attributo, una colonna o un campo dalla sorgente dati. In questi contesti si può valutare di rendere flessibile il meccanismo di binding permettendo di aggiungere/rimuovere proprietà a runtime lasciando al motore di databinding il compito di determinarne il tipo senza obbligare lo sviluppatore a ri-compilare/ri-deployare l’applicazione ogni volta che si necessita di una modifica al model. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/dsantarelli/archive/2011/05/16/silverlight-5-icustomtypeprovider.aspx"&gt;Continua &amp;gt;&amp;gt;&lt;/a&gt; &lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/100042.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2011/05/17/silverlight-5-icustomtypeprovider-again.aspx</guid>
            <pubDate>Tue, 17 May 2011 01:25:34 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2011/05/17/silverlight-5-icustomtypeprovider-again.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/100042.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/100042.aspx</trackback:ping>
        </item>
        <item>
            <title>[Silverlight 5] ICustomTypeProvider</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2011/05/17/silverlight-5-icustomtypeprovider.aspx</link>
            <description>&lt;p&gt;La beta di Silverlight 5 ha introdotto una nuova interfaccia &lt;a target="_blank" href="http://msdn.microsoft.com/en-sg/library/system.reflection.icustomtypeprovider.aspx"&gt;ICustomTypeProvider&lt;/a&gt; che permette di effettuare il binding tra elementi della UI ed oggetti la cui struttura non è nota a compile-time. Nello specifico, l’esigenza che questa interfaccia soddisfa è evidente quando si lavora con dati provenienti da fonti eterogenee (database, istanze XML, oggetti JSON, dati binari, csv etc.) che si desiderano presentare senza ricompilare ogni volta che viene aggiunto/rimosso un attributo, una colonna o un campo dalla sorgente dati. In questi contesti si può valutare di rendere flessibile il meccanismo di binding permettendo di aggiungere/rimuovere proprietà a runtime lasciando al motore di databinding il compito di determinarne il tipo senza obbligare lo sviluppatore a ri-compilare/ri-deployare l’applicazione ogni volta che si necessita di una modifica al model. L’interfaccia &lt;a target="_blank" href="http://msdn.microsoft.com/en-sg/library/system.reflection.icustomtypeprovider.aspx"&gt;ICustomTypeProvider&lt;/a&gt; è così definita:     &lt;br /&gt;
&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 8.3pt;"&gt;         &lt;br /&gt;
public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 8.3pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;interface&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;ICustomTypeProvider&lt;/font&gt;&lt;/span&gt;       &lt;br /&gt;
{       &lt;br /&gt;
    &lt;span&gt;&lt;font color="#2b91af"&gt;Type&lt;/font&gt;&lt;/span&gt; GetCustomType();       &lt;br /&gt;
}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Quando la si implementa, viene chiesto di ritornare un oggetto di tipo &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.type(v=vs.80).aspx"&gt;System.Type&lt;/a&gt;. Oggi l’engine di Silverlight 5 controlla in fase di binding se l’oggetto che stiamo passando implementa o meno l’interfaccia &lt;a target="_blank" href="http://msdn.microsoft.com/en-sg/library/system.reflection.icustomtypeprovider.aspx"&gt;ICustomTypeProvider&lt;/a&gt; per capire se usare i metadati del nostro tipo custom piuttosto che del fallback System.Type.     &lt;br /&gt;
Bisogna dire che l’implementazione di questa interfaccia richiede un certo sforzo iniziale, poiché implica la creazione di un tipo custom in grado di gestire ad esempio un “repository” di proprietà (&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx"&gt;PropertyInfo&lt;/a&gt;) che possiamo aggiungere/rimuovere dinamicamente. Inoltre, non dobbiamo dimenticarci della solita &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx"&gt;INotifyPropertyChanged&lt;/a&gt; utile per il corretto funzionamento del binding e di &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.componentmodel.inotifydataerrorinfo(v=vs.95).aspx"&gt;INotifyDataErrorInfo&lt;/a&gt; per la validazione. I benefici che otteniamo sono tuttavia notevoli rispetto alle versioni precedenti di Silverlight, dove non è possibile derivare Type o PropertyInfo per questi scopi. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Esempio di utilizzo      &lt;br /&gt;
&lt;/strong&gt;A titolo di esempio, proviamo a definire una classe &lt;em&gt;DictionaryObject&lt;/em&gt; che, come il nome fa intendere, espone a mo’ di dictionary l’elenco delle sue proprietà in modo tale che possono essere aggiunte e rimosse a runtime. L’obiettivo è rendere “binding-friendly” queste coppie chiave-valore!&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 8.3pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 8.3pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObject&lt;/font&gt;&lt;/span&gt; : &lt;span&gt;&lt;font color="#2b91af"&gt;&lt;strong&gt;ICustomTypeProvider&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;INotifyPropertyChanged&lt;/font&gt;&lt;/span&gt;       &lt;br /&gt;
{       &lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Dictionary&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&amp;gt; _properties = &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;;       &lt;br /&gt;
&lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;event&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;PropertyChangedEventHandler&lt;/font&gt;&lt;/span&gt; PropertyChanged;       &lt;br /&gt;
&lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;[&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; propertyName]       &lt;br /&gt;
    {       &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt; { &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; _properties.ContainsKey(propertyName) ? _properties[propertyName] : &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;; }       &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;       &lt;br /&gt;
        {       &lt;br /&gt;
            AddProperty(propertyName);       &lt;br /&gt;
            &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (_properties[propertyName] != &lt;span&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;/span&gt;)       &lt;br /&gt;
            {       &lt;br /&gt;
                _properties[propertyName] = &lt;span&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;/span&gt;;       &lt;br /&gt;
                OnPropertyChanged(propertyName);       &lt;br /&gt;
            }       &lt;br /&gt;
        }       &lt;br /&gt;
    }       &lt;br /&gt;
&lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; DictionaryObject()       &lt;br /&gt;
    {  &lt;br /&gt;
        _properties = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Dictionary&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&amp;gt;();  &lt;br /&gt;
    }       &lt;br /&gt;
&lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt; AddProperty(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; name)  &lt;br /&gt;
    {  &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; AddProperty(name, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;);  &lt;br /&gt;
    }       &lt;br /&gt;
&lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt; AddProperty(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; name, &lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; value)       &lt;br /&gt;
    {       &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!_properties.ContainsKey(name))       &lt;br /&gt;
        {       &lt;br /&gt;
            _properties.Add(name, value);       &lt;br /&gt;
            &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;;       &lt;br /&gt;
        }       &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;;       &lt;br /&gt;
    }       &lt;br /&gt;
&lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt; RemoveProperty(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; name)       &lt;br /&gt;
    {       &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (_properties.ContainsKey(name))       &lt;br /&gt;
        {       &lt;br /&gt;
            _properties.Remove(name);       &lt;br /&gt;
            &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;;       &lt;br /&gt;
        }       &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;;       &lt;br /&gt;
    }       &lt;br /&gt;
&lt;br /&gt;
    &lt;strong&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Type&lt;/font&gt;&lt;/span&gt; GetCustomType()  &lt;br /&gt;
    {  &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObjectType&lt;/font&gt;&lt;/span&gt;(_properties);         &lt;br /&gt;
    }         &lt;br /&gt;
&lt;/strong&gt;      &lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; OnPropertyChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; key)       &lt;br /&gt;
    {       &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (PropertyChanged != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) PropertyChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;PropertyChangedEventArgs&lt;/font&gt;&lt;/span&gt;(key));       &lt;br /&gt;
    }       &lt;br /&gt;
}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Affinché il runtime di Silverlight tratti le coppie chiave-valore alla stregua di proprietà vere e proprie di un generico oggetto del CLR, il trucco sta nel definire un tipo custom in grado di fornire al volo tutti i metadati che servono in fase di binding. Riportiamo solo le righe di codice rilevanti…&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 8.3pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 8.3pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObjectType&lt;/font&gt;&lt;/span&gt; : &lt;span&gt;&lt;font color="#2b91af"&gt;Type&lt;/font&gt;&lt;/span&gt;       &lt;br /&gt;
{       &lt;br /&gt;
&lt;span&gt;&lt;font color="#0000ff"&gt;   private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Type&lt;/font&gt;&lt;/span&gt; _proxyType = &lt;span&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObject&lt;/font&gt;&lt;/span&gt;);       &lt;br /&gt;
&lt;span&gt;&lt;font color="#0000ff"&gt;   private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Dictionary&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&amp;gt; _propertiesDictionary = &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;;       &lt;br /&gt;
&lt;/font&gt;&lt;font style="font-size: 8.3pt;"&gt;   &lt;font size="4"&gt;…&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 8.3pt;"&gt;      &lt;br /&gt;
&lt;span&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;/span&gt;  &lt;br /&gt;
&lt;span&gt;&lt;font color="#0000ff"&gt;   public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;PropertyInfo&lt;/font&gt;&lt;/span&gt;[] GetProperties(&lt;span&gt;&lt;font color="#2b91af"&gt;BindingFlags&lt;/font&gt;&lt;/span&gt; bindingAttr)       &lt;br /&gt;
   {       &lt;br /&gt;
      &lt;span&gt;&lt;font color="#2b91af"&gt;PropertyInfo&lt;/font&gt;&lt;/span&gt;[] properties = _proxyType.GetProperties(bindingAttr);       &lt;br /&gt;
&lt;br /&gt;
      &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;BindingFlags&lt;/font&gt;&lt;/span&gt;.Instance == (bindingAttr &amp;amp; &lt;span&gt;&lt;font color="#2b91af"&gt;BindingFlags&lt;/font&gt;&lt;/span&gt;.Instance) &amp;amp;&amp;amp;       &lt;br /&gt;
          &lt;span&gt;&lt;font color="#2b91af"&gt;BindingFlags&lt;/font&gt;&lt;/span&gt;.Public == (bindingAttr &amp;amp; &lt;span&gt;&lt;font color="#2b91af"&gt;BindingFlags&lt;/font&gt;&lt;/span&gt;.Public))       &lt;br /&gt;
          {       &lt;br /&gt;
             &lt;strong&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; GetDynamicProperties().ToArray();&lt;/strong&gt;       &lt;br /&gt;
          }       &lt;br /&gt;
&lt;br /&gt;
      &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; properties;       &lt;br /&gt;
   }       &lt;br /&gt;
 &lt;span&gt;&lt;font color="#0000ff"&gt;  &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font style="font-size: 8.3pt;"&gt;   &lt;br /&gt;
&lt;span&gt;&lt;font color="#0000ff"&gt;   private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;PropertyInfo&lt;/font&gt;&lt;/span&gt;&amp;gt; GetDynamicProperties()       &lt;br /&gt;
   {       &lt;br /&gt;
     &lt;span&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;PropertyInfo&lt;/font&gt;&lt;/span&gt;&amp;gt; properties = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;PropertyInfo&lt;/font&gt;&lt;/span&gt;&amp;gt;();       &lt;br /&gt;
&lt;br /&gt;
     &lt;span&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; key &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; _propertiesDictionary.Keys)       &lt;br /&gt;
     {                 &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (_propertiesDictionary[key] != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;)  &lt;/font&gt;&lt;span&gt;&lt;font color="#008000"&gt;&lt;font style="font-size: 8.3pt;"&gt;// null values will be ignored!&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 8.3pt;"&gt;      &lt;br /&gt;
        {       &lt;br /&gt;
            properties.Add(&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObjectPropertyInfo&lt;/font&gt;&lt;/span&gt;(_propertiesDictionary[key].GetType(), &lt;span&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObject&lt;/font&gt;&lt;/span&gt;), key));       &lt;br /&gt;
        }       &lt;br /&gt;
     }       &lt;br /&gt;
&lt;br /&gt;
     &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; properties;       &lt;br /&gt;
   }       &lt;br /&gt;
}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Per gli oggetti che implementano l’interfaccia &lt;em&gt;ICustomTypeProvider&lt;/em&gt;, abbiamo la possibilità di intercettare le richieste di informazioni di reflection che provengono dal motore di databinding e fornire metadati personalizzati. Nel nostro esempio, per comunicare al runtime come fare la &lt;em&gt;get&lt;/em&gt; e la &lt;em&gt;set&lt;/em&gt; sulle proprietà di un &lt;em&gt;DictionaryObject&lt;/em&gt;, abbiamo bisogno di ereditare anche &lt;em&gt;PropertyInfo.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 8.3pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 8.3pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObjectPropertyInfo&lt;/font&gt;&lt;/span&gt; : &lt;span&gt;&lt;font color="#2b91af"&gt;PropertyInfo&lt;/font&gt;&lt;/span&gt;       &lt;br /&gt;
{       &lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Type&lt;/font&gt;&lt;/span&gt; _propertyType;       &lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Type&lt;/font&gt;&lt;/span&gt; _declaringType;       &lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; _name;       &lt;br /&gt;
&lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; DictionaryObjectPropertyInfo(&lt;span&gt;&lt;font color="#2b91af"&gt;Type&lt;/font&gt;&lt;/span&gt; propertyType, &lt;span&gt;&lt;font color="#2b91af"&gt;Type&lt;/font&gt;&lt;/span&gt; declaringType, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; propertyName)       &lt;br /&gt;
    {       &lt;br /&gt;
        _propertyType = propertyType;       &lt;br /&gt;
        _declaringType = declaringType;       &lt;br /&gt;
        _name = propertyName;       &lt;br /&gt;
    }       &lt;br /&gt;
  &lt;br /&gt;
    ...       &lt;br /&gt;
&lt;/font&gt;&lt;font style="font-size: 8.3pt;"&gt;    &lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; GetValue(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; obj, &lt;span&gt;&lt;font color="#2b91af"&gt;BindingFlags&lt;/font&gt;&lt;/span&gt; invokeAttr, &lt;span&gt;&lt;font color="#2b91af"&gt;Binder&lt;/font&gt;&lt;/span&gt; binder, &lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;[] index, System.Globalization.&lt;span&gt;&lt;font color="#2b91af"&gt;CultureInfo&lt;/font&gt;&lt;/span&gt; culture)       &lt;br /&gt;
    {       &lt;br /&gt;
        &lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObject&lt;/font&gt;&lt;/span&gt; dictionaryObject = (&lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObject&lt;/font&gt;&lt;/span&gt;)obj;             &lt;br /&gt;
        &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; dictionaryObject[Name];       &lt;br /&gt;
    }       &lt;br /&gt;
       &lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; SetValue(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; obj, &lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; value, &lt;span&gt;&lt;font color="#2b91af"&gt;BindingFlags&lt;/font&gt;&lt;/span&gt; invokeAttr, &lt;span&gt;&lt;font color="#2b91af"&gt;Binder&lt;/font&gt;&lt;/span&gt; binder, &lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;[] index, System.Globalization.&lt;span&gt;&lt;font color="#2b91af"&gt;CultureInfo&lt;/font&gt;&lt;/span&gt; culture)       &lt;br /&gt;
    {       &lt;br /&gt;
        &lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObject&lt;/font&gt;&lt;/span&gt; dictionaryObject = (&lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObject&lt;/font&gt;&lt;/span&gt;)obj;       &lt;br /&gt;
        dictionaryObject[Name] = value;       &lt;br /&gt;
    }       &lt;br /&gt;
}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;OK non abbiamo bisogno di altro! Proviamo a utilizzare concretamente la classe &lt;em&gt;DictionaryObject&lt;/em&gt;. Creiamo una view con una DataGrid le cui colonne vengono autogenerate. L’obiettivo è di rendere il databinding bidirezionale e consistente rispetto al tipo CLR di ciascuna proprietà esposta.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 8.3pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 8.3pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;UserControl&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Class&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"ICustomTypeProviderSample.MainPage"&lt;/span&gt;&lt;/font&gt;       &lt;br /&gt;
   &lt;span&gt;&lt;font color="#ff0000"&gt;xmlns&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/font&gt;       &lt;br /&gt;
   &lt;span&gt;&lt;font color="#ff0000"&gt;xmlns&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;x&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;/font&gt;     &lt;br /&gt;
   &lt;span&gt;&lt;font color="#ff0000"&gt;xmlns&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;sdk&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;       &lt;br /&gt;
&lt;span&gt;&lt;font color="#a31515"&gt;    &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"LayoutRoot"&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; HorizontalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"Center"&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Margin&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"20"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;       &lt;br /&gt;
&lt;span&gt;&lt;font color="#a31515"&gt;        &lt;/font&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;sdk&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;DataGrid&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; AutoGenerateColumns&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"True"&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; ItemsSource&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;="{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Binding&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Items&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;span&gt;&lt;font color="#a31515"&gt;        &lt;/font&gt;&lt;/span&gt;      &lt;br /&gt;
&lt;span&gt;&lt;font color="#a31515"&gt;    &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;       &lt;br /&gt;
&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;UserControl&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff" style="font-size: 8.3pt;"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Nel viewmodel definiamo le proprietà degli items come coppie chiave-valore.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 8.3pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 8.3pt;"&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;MainPageViewModel&lt;/font&gt;&lt;/span&gt; : &lt;span&gt;&lt;font color="#2b91af"&gt;INotifyPropertyChanged&lt;/font&gt;&lt;/span&gt;       &lt;br /&gt;
{       &lt;br /&gt;
    ...       &lt;br /&gt;
&lt;/font&gt;&lt;font style="font-size: 8.3pt;"&gt;     &lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;ObservableCollection&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObject&lt;/font&gt;&lt;/span&gt;&amp;gt; Items { &lt;span&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;; &lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;; }         &lt;br /&gt;
&lt;br /&gt;
    &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; MainPageViewModel()       &lt;br /&gt;
    {             &lt;br /&gt;
        Items = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;ObservableCollection&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObject&lt;/font&gt;&lt;/span&gt;&amp;gt;();       &lt;br /&gt;
             &lt;br /&gt;
        &lt;/font&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size: 8.3pt;"&gt;DictionaryObject&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 8.3pt;"&gt; newItem = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;DictionaryObject&lt;/font&gt;&lt;/span&gt;();         &lt;br /&gt;
        newItem[&lt;span&gt;&lt;font color="#a31515"&gt;"ID"&lt;/font&gt;&lt;/span&gt;] = 1;       &lt;br /&gt;
        newItem[&lt;span&gt;&lt;font color="#a31515"&gt;"Name"&lt;/font&gt;&lt;/span&gt;] = &lt;span&gt;&lt;font color="#a31515"&gt;"Item 1"&lt;/font&gt;&lt;/span&gt;;       &lt;br /&gt;
        newItem[&lt;span&gt;&lt;font color="#a31515"&gt;"UnitPrice"&lt;/font&gt;&lt;/span&gt;] = 5.3;       &lt;br /&gt;
        newItem[&lt;span&gt;&lt;font color="#a31515"&gt;"Created"&lt;/font&gt;&lt;/span&gt;] = &lt;span&gt;&lt;font color="#2b91af"&gt;DateTime&lt;/font&gt;&lt;/span&gt;.Now;     &lt;br /&gt;
&lt;/font&gt;&lt;font style="font-size: 8.3pt;"&gt;     &lt;br /&gt;
        Items.Add(newItem);       &lt;br /&gt;
&lt;br /&gt;
        ...       &lt;br /&gt;
   }       &lt;br /&gt;
}   &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;La view risultante è coerente rispetto ai tipi delle proprietà. L’oggetto &lt;em&gt;DictionaryObject&lt;/em&gt; implementa l’interfaccia &lt;em&gt;INotifyPropertyChanged&lt;/em&gt; (e preferibilmente &lt;em&gt;INotifyDataErrorInfo&lt;/em&gt;) quindi la nostra interazione con le celle della DataGrid si riflette direttamente sul valore delle proprietà coinvolte nel databinding.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://img691.imageshack.us/img691/2720/immagine1uy.jpg" /&gt;  &lt;br /&gt;
&lt;img alt="" src="http://img823.imageshack.us/img823/7738/immagine2ha.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;L’esempio mostrato è molto banale ma fa intendere quanti miglioramenti possono essere concepiti. Il codice completo di questo esempio è scaricabile al seguente &lt;a target="_blank" href="http://cid-fd34d9886368eda3.office.live.com/self.aspx/Pubblica/ICustomTypeProviderSample.zip"&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ma non esisteva qualcosa del genere anche in WPF?  &lt;br /&gt;
&lt;/strong&gt;A chi possiede familiarità con l’interfaccia &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.icustomtypedescriptor.aspx"&gt;ICustomTypeDescriptor&lt;/a&gt; di WPF (la quale risolve lo stesso problema di ICustomTypeProvider di Silverlight 5… i nomi addirittura sono più o meno gli stessi!) verrà subito in mente la domanda “Perché non hanno aggiunto direttamente l’interfaccia ICustomTypeDescriptor”?     &lt;br /&gt;
Leggendo la documentazione MSDN non sono riuscito ad estrarre una risposta chiara. Sembrerebbe che il motivo (per ora almeno) sia dovuto al fatto che &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.icustomtypedescriptor.aspx"&gt;ICustomTypeDescriptor&lt;/a&gt; richiede una sua gerarchia di classi  (&lt;em&gt;TypeDescriptor&lt;/em&gt;, &lt;em&gt;EventDescriptor&lt;/em&gt;, etc.) che di fatto duplica la gerarchia di reflection, il che incrementerebbe la dimensione del pacchetto Silverlight da installare client-side. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E il DLR?      &lt;br /&gt;
&lt;/strong&gt;Questa feature in realtà non ha nulla a che vedere con il DLR. Oggetti del DLR come &lt;a href="http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx"&gt;ExpandoObject&lt;/a&gt; o &lt;a href="http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx"&gt;DynamicObject&lt;/a&gt; (o qualunque implementazione dell’interfaccia &lt;a href="http://msdn.microsoft.com/en-us/library/system.dynamic.idynamicmetaobjectprovider.aspx"&gt;IDynamicMetaObjectProvider&lt;/a&gt;) non apportano alcun tipo di informazione sulle loro proprietà. Il motore del databinding ha invece bisogno di queste informazioni per effettuare correttamente conversioni di tipo per tutto ciò che non sia una semplice stringa. Ad esempio, se abbiamo una TextBox in binding con una proprietà DateTime di un oggetto, quando inseriamo un nuovo valore nella TextBox l’engine valuta il tipo della proprietà e converte il testo contenuto nella TextBox da stringa a DateTime e viceversa. Se invece si effettua il binding su una proprietà di un ExpandoObject, il valore della proprietà sarà convertito semplicemente a stringa e non possono essere fatte valutazioni di binding. Insomma, in WPF è possibile associare elementi del DLR agli elementi della UI, ma non avviene nessuna conversione di tipo… tutto ciò su cui possiamo lavorare sono solo stringhe.     &lt;br /&gt;
In definitiva, mentre il DLR è conveniente quando si interagisce con altri linguaggi o altre piattaforme, non è consigliabile per il databinding e l’interazione con la UI.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Riferimenti      &lt;br /&gt;
&lt;/strong&gt;Segnalo i due interessanti articoli da cui ho preso spunto:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.damonpayne.com/post/2011/04/14/Using-ICustomTypeProvider-in-Silverlight-5.aspx"&gt;Using ICustomTypeProvider in Silverlight 5&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://blogs.msdn.com/b/silverlight_sdk/archive/2011/04/25/binding-to-dynamic-properties-with-icustomtypeprovider-silverlight-5-beta.aspx"&gt;Binding to Dynamic Properties with ICustomTypeProvider (Silverlight 5 Beta)&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/100041.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2011/05/17/silverlight-5-icustomtypeprovider.aspx</guid>
            <pubDate>Tue, 17 May 2011 00:51:56 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2011/05/17/silverlight-5-icustomtypeprovider.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/100041.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/100041.aspx</trackback:ping>
        </item>
        <item>
            <title>nRoute e "Reverse Commands"</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2010/01/08/nroute-e-reverse-commands.aspx</link>
            <description>&lt;p&gt;&lt;a target="_blank" href="http://nroute.codeplex.com"&gt;nRoute&lt;/a&gt; è uno dei framework a supporto di applicazioni Silverlight sviluppate secondo il pattern M-V-VM. In merito, segnalo &lt;a target="_blank" href="http://www.orktane.com/Blog/post/2010/01/07/Reverse-ICommands-for-MVVM.aspx"&gt;questo interessante articolo&lt;/a&gt; in cui si parla dell' introduzione di &lt;strong&gt;Reverse Commands&lt;/strong&gt;. &lt;br /&gt;
Da un punto di vista pratico viene introdotta una nuova interfaccia &lt;em&gt;IReverseCommand&lt;/em&gt; che estende la solita &lt;em&gt;ICommand&lt;/em&gt;. Tale specializzazione permette di definire un trigger "di ritorno" dal View-Model verso la View una volta che un command è stato eseguito. L'aspetto interessante si trova quindi nel fatto che il target dell' &lt;em&gt;IReverseCommand &lt;/em&gt;è la View e non il ViewModel. &lt;br /&gt;
Secondo i principi del pattern M-V-VM in Silverlight, esistono due meccanismi primari di comunicazione tra View e ViewModel:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Cambiamenti di stato relativi a databinding tra oggetti della View e proprietà del ViewModel&lt;/li&gt;
    &lt;li&gt;Invocazioni di azioni ( &lt;em&gt;ICommand&lt;/em&gt; appunto ) dalla View verso il ViewModel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se in questi scenari architetturali gli &lt;em&gt;ICommand&lt;/em&gt; sono concepiti per essere scatenati dalla View (e gestiti nel ViewModel), l'introduzione di ReverseCommands avviene per esplicitare il meccanismo inverso sempre in un'ottica strongly-typed.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/97820.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2010/01/08/nroute-e-reverse-commands.aspx</guid>
            <pubDate>Fri, 08 Jan 2010 16:32:51 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2010/01/08/nroute-e-reverse-commands.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/97820.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/97820.aspx</trackback:ping>
        </item>
        <item>
            <title>Database client-side per Silverlight</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2010/01/06/database-client-side-per-silverlight.aspx</link>
            <description>&lt;p&gt;Con il potenziamento delle funzionalità out-of-browser, Silverlight 3+ è ormai una tecnologia matura per supportare scenari off-line. Nell’ Isolated Storage client-side, infatti, oggi possiamo gestire ad esempio un vero e proprio database engine.   &lt;br /&gt;Ultimamente la mia attenzione è rivolta in particolare a due interessanti progetti (in beta):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://silverdb.codeplex.com/" target="_blank"&gt;Silverlight Database&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://siaqodb.com/" target="_blank"&gt;siaqodb&lt;/a&gt; (object database per .NET, Mono and Silverlight)&lt;/li&gt; &lt;/ul&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f63138e8-d168-470a-9ae4-a5753fb3408f" class="wlWriterEditableSmartContent"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Isolated+Storage" rel="tag"&gt;Isolated Storage&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/97811.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2010/01/06/database-client-side-per-silverlight.aspx</guid>
            <pubDate>Wed, 06 Jan 2010 13:24:08 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2010/01/06/database-client-side-per-silverlight.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/97811.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/97811.aspx</trackback:ping>
        </item>
        <item>
            <title>[Silverlight/WPF] Resource file e Access Modifier</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/20/silverlightwpf-resource-file-e-access-modifier.aspx</link>
            <description>&lt;p&gt;Più volte nello sviluppo Silverlight/WPF mi sono imbattuto nella necessità di utilizzare i file di risorsa (.resx) e devo dire che le prime volte mi sono trovato un po’ in difficoltà dal momento che non riuscivo a capire per quale arcano i miei binding dichiarativi nel codice XAML verso le mie risorse non funzionassero affatto. Andiamo per ordine: supponendo di definire un file di risorsa in questo modo ...   &lt;br /&gt;    &lt;br /&gt; &lt;img src="http://www.freeimagehosting.net/uploads/95dd81a145.jpg" border="0" /&gt;    &lt;br /&gt;  &lt;br /&gt;... in fase di design Visual Studio notifica uno “strano” errore, &lt;/p&gt;  &lt;p&gt; &lt;img src="http://www.freeimagehosting.net/uploads/13accfadb5.jpg" border="0" /&gt;&lt;/p&gt;  &lt;p&gt;indipendentemente dal fatto che si utilizzi &lt;em&gt;Public&lt;/em&gt; o &lt;em&gt;Internal&lt;/em&gt; come access modifier (più precisamente se si selezionasse &lt;em&gt;Internal&lt;/em&gt; l’errore diverrebbe &lt;strong&gt;AG_E_PARSER_BAD_TYPE&lt;/strong&gt;). Mantenendo l’access modifier come “Public” ed andando a vedere il codice autogenerato da Visual Studio ci si imbatte in questa piccola “finezza”:&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;img src="http://www.freeimagehosting.net/uploads/6224491ed3.jpg" /&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Classe &lt;em&gt;public&lt;/em&gt; e costruttore &lt;em&gt;internal&lt;/em&gt;!!!&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Personalmente ho sempre ovviato al problema nel modo più semplice, impostando il costruttore come &lt;em&gt;public&lt;/em&gt; per ogni file di risorsa. Oggi invece mi imbatto in &lt;a href="http://www.houseofbilz.com/archive/2009/03/15/binding-to-resources-in-silverlightwpf.aspx" target="_blank"&gt;questo post&lt;/a&gt; che propone invece una soluzione più elegante a cui non avevo proprio pensato, ovvero realizzare semplicemente una classe pubblica con una singola proprietà che espone la classe associata al file di risorsa. SEMPLICE MA GENIALE!!!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f4dab442-945a-4413-8370-a28580bfa527" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/Silverlight+2" rel="tag"&gt;Silverlight 2&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WPF" rel="tag"&gt;WPF&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95753.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/20/silverlightwpf-resource-file-e-access-modifier.aspx</guid>
            <pubDate>Fri, 20 Mar 2009 00:02:41 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/20/silverlightwpf-resource-file-e-access-modifier.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95753.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95753.aspx</trackback:ping>
        </item>
        <item>
            <title>[Silverlight 2] Visibility e VisualStateManager</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/16/silverlight-2-visibility-e-visualstatemanager.aspx</link>
            <description>&lt;p&gt;Una caratteristica di un controllo visuale che spesso e volentieri risulta gradevole è la possibilità di mostrare/nascondere il contenuto del controllo stesso tramite un effetto FadeIn/FadeOut. In genere, questo effetto è realizzato tramite una semplice animazione che lavora sull’&lt;em&gt;Opacity&lt;/em&gt; del controllo (portandola da 1 a 0 e viceversa) e che magari imposta a &lt;em&gt;Visible&lt;/em&gt;/&lt;em&gt;Collapsed&lt;/em&gt; la proprietà &lt;em&gt;Visibility&lt;/em&gt; subito dopo l’animazione in modo da riempire/liberare istantaneamente un’area specifica dello schermo.  In molti casi risulta dunque utile legare l’ effetto FadeIn/FadeOut proprio alla proprietà &lt;em&gt;Visibility&lt;/em&gt; del controllo, in modo da ottenere automaticamente le animazioni desiderate al momento della valorizzazione della proprietà (che altrimenti non effettuerebbe ovviamente alcun effetto visuale di transizione). Un modo che ritengo molto interessante per ottenere questo tipo di scenario sfrutta il &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.windows.visualstatemanager(VS.95).aspx"&gt;VisualStateManager&lt;/a&gt; &lt;em&gt;: &lt;/em&gt;nel seguente esempio vediamo come sia possibile effettuare &lt;strong&gt;l’override della proprietà Visibility&lt;/strong&gt; di un UserControl per agganciare gli effetti di FadeIn/FadeOut agli stati &lt;em&gt;Visible/&lt;/em&gt;&lt;em&gt;Collapsed&lt;/em&gt; definiti tramite VisualStateManager&lt;em&gt;.&lt;/em&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;MyControl.xaml&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;UserControl&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;xmlns&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;:&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;vsm&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;="clr-namespace:System.Windows;assembly=System.Windows" &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;...&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt; &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Grid&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; x&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Name&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="LayoutRoot"&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; &lt;br /&gt;
      &lt;br /&gt;
     &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;vsm&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;VisualStateManager.VisualStateGroups&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
         &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;vsm&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;VisualStateGroup&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; x&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Name&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="CommonStates"&amp;gt; &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;           &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;vsm&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;VisualState&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; x&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Name&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="Visible"&amp;gt; &lt;br /&gt;
             &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Storyboard&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
               &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;DoubleAnimation&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; Duration&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="0:0:.5"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="LayoutRoot"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="Opacity"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; &lt;br /&gt;
                                &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="COLOR: red"&gt;From&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0"&lt;/span&gt;&lt;span style="COLOR: red"&gt; To&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; AutoReverse&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="False" &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Completed&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="VisibleCompleted"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; &lt;span style="COLOR: blue"&gt;/&amp;gt; &lt;br /&gt;
             &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Storyboard&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
           &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;vsm&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;VisualState&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
           &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;vsm&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;VisualState&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; x&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Name&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="Collapsed"&amp;gt; &lt;br /&gt;
             &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Storyboard&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
               &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;DoubleAnimation&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; Duration&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="0:0:.5"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="LayoutRoot"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="Opacity"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; &lt;br /&gt;
                                &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="COLOR: red"&gt;From&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="1"&lt;/span&gt;&lt;span style="COLOR: red"&gt; To&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="0"&lt;/span&gt;&lt;span style="COLOR: red"&gt; AutoReverse&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="False"&lt;/span&gt;&lt;span style="COLOR: red"&gt; Completed&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="CollapsedCompleted" /&amp;gt; &lt;br /&gt;
             &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Storyboard&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
           &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;vsm&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;VisualState&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
         &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;vsm&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;VisualStateGroup&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
      &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;vsm&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;VisualStateManager.VisualStateGroups&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
      ...  &lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;    &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Grid&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;UserControl&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;
MyControl&lt;/em&gt;&lt;/strong&gt;.xaml.cs&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;public&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;MyControl&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;UserControl &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;{ &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Visibility&lt;/span&gt; _visibility;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;event&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;EventHandler&lt;/span&gt; VisibilityChanged;&lt;span style="mso-spacerun: yes"&gt;         &lt;br /&gt;
  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; MyControl() { InitializeComponent(); } &lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Visibility&lt;/span&gt; Visibility &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;{ &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _visibility; } &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;set &lt;br /&gt;
     &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;{ &lt;br /&gt;
       &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (_visibility != &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;) &lt;br /&gt;
       &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;{ &lt;br /&gt;
         &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;_visibility = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;; &lt;br /&gt;
         &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;OnVisibilityChanged(); &lt;br /&gt;
       &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;} &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;} &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;} &lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;virtual&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; OnVisibilityChanged() &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;{ &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Visibility == &lt;span style="COLOR: #2b91af"&gt;Visibility&lt;/span&gt;.Visible) &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;{ &lt;br /&gt;
       &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.Visibility = &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Visibility; &lt;br /&gt;
       &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: #2b91af"&gt;VisualStateManager&lt;/span&gt;.GoToState(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"Visible"&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;); &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;} &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;VisualStateManager&lt;/span&gt;.GoToState(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"Collapsed"&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;);&lt;span style="mso-spacerun: yes"&gt;             &lt;br /&gt;
  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;} &lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; CollapsedCompleted(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;EventArgs&lt;/span&gt; e) &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;{ &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.Visibility = &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Visibility; &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;FireVisibilityChanged(); &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;}&lt;span style="mso-spacerun: yes"&gt;        &lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; VisibleCompleted(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;EventArgs&lt;/span&gt; e) { FireVisibilityChanged(); } &lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; FireVisibilityChanged() &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;{ &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (VisibilityChanged != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;) VisibilityChanged(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;EventArgs&lt;/span&gt;());&lt;span style="mso-spacerun: yes"&gt;   &lt;br /&gt;
  &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;} &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;Come si può notare, nell’esempio si è voluto implementare anche un evento &lt;em&gt;VisibilityChanged&lt;/em&gt; che viene scatenato ogni volta che l’animazione FadeIn/FadeOut ha terminato la propria esecuzione. Infatti, la transizione visuale da uno stato &lt;em&gt;Visible&lt;/em&gt; ad uno stato &lt;em&gt;Collapsed&lt;/em&gt; può essere relativamente lunga e di conseguenza potrebbe essere utile sapere esattamente quando il nostro controllo è completamente visibile/nascosto.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div&gt;Technorati Tag: &lt;a rel="tag" href="http://technorati.com/tags/Silverlight+2"&gt;Silverlight 2&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95722.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/16/silverlight-2-visibility-e-visualstatemanager.aspx</guid>
            <pubDate>Mon, 16 Mar 2009 23:04:58 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/16/silverlight-2-visibility-e-visualstatemanager.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95722.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95722.aspx</trackback:ping>
        </item>
        <item>
            <title>Interazione tra Javascript e Silverlight: un password checker</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/28/interazione-tra-javascript-e-silverlight-un-password-checker.aspx</link>
            <description>&lt;p&gt;La comunicazione tra Javascript and Silverlight è una tecnica che spesso rende molto semplice e potente l’introduzione di miglioramenti grafici nonché funzionali in applicazioni web preesistenti. In questo post viene mostrato nello specifico come integrare un password checker realizzato in Silverlight all’interno di un form ASP.NET di partenza, sfruttando javascript come “collante”. &lt;br /&gt;
Supponiamo by design che il password checker stabilisca 6 livelli di complessità raggruppabili in tre categorie: “Weak”,”Normal” e “Strong”: &lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" src="http://img88.imageshack.us/img88/3347/86046067ic4.jpg" /&gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;1. Page.xaml&lt;/em&gt;&lt;/strong&gt; &lt;br /&gt;
Partiamo dalla definizione del password checker in Silverlight. Gli elementi della UI di tale controllo, come mostrato nella figura sopra riportata, sono costituiti da 6 Rectangle ed un TextBlock disposti orizzontalmente all’interno di uno StackPanel. &lt;br /&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;UserControl&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; x&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Class&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="SilverlightAppPasswordStrength.Page" &lt;br /&gt;
             &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;  &lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: red"&gt;             xmlns&lt;/span&gt;&lt;span style="COLOR: blue"&gt;:&lt;/span&gt;&lt;span style="COLOR: red"&gt;x&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;   ... &lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;br /&gt;
  &amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Grid&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; x&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Name&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="LayoutRoot"&amp;gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                       &lt;br /&gt;
    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;StackPanel&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; x&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Name&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="mainPanel"&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; Orientation&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="Horizontal"&amp;gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;br /&gt;
      &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; ...&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; ...&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; Margin&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="2,0,0,0"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; ...&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; Margin&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="2,0,0,0"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; ...&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; Margin&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="2,0,0,0"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; ...&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; Margin&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="2,0,0,0"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; ...&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; Margin&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="2,0,0,0"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;TextBlock&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; x&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Name&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="txtPwdStrength"&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; ...&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; Margin&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;="5,2,0,0"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;TextBlock&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;br /&gt;
    &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;StackPanel&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Grid&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt; &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;UserControl&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;
2. Page.xaml.cs&lt;/em&gt;&lt;/strong&gt; &lt;br /&gt;
Nell’implementazione, il comportamento della UI è in mano ad un metodo &lt;em&gt;NotifyStrengthLevel&lt;/em&gt; che sostanzialmente si prende carico di gestire il layout degli elementi in base al livello di complessità (da 0 a 5) restituito da un metodo &lt;em&gt;GetPasswordStrengthLevel&lt;/em&gt; che implementa l’algoritmo di password cecking. Due note:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Tramite il metodo &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlpage.registerscriptableobject(VS.95).aspx"&gt;HtmlPage.RegisterScriptableObject&lt;/a&gt; possiamo “registrare” il nostro oggetto Page di Silverlight all’interno di una pagina (X)Html in modo da abilitare l’accesso da parte di javascript &lt;/li&gt;
    &lt;li&gt;Per essere invocabile via javascript, il metodo &lt;em&gt;NotifyStrengthLevel&lt;/em&gt; dell’oggetto Page deve essere decorato con l’attributo &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.browser.scriptablememberattribute(VS.95).aspx"&gt;ScriptableMember&lt;/a&gt;.  &lt;br /&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;public&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Page&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;UserControl &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;{&lt;span style="mso-spacerun: yes"&gt;        &lt;br /&gt;
  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; Page() &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;{ &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;InitializeComponent(); &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: #2b91af"&gt;HtmlPage&lt;/span&gt;.RegisterScriptableObject(&lt;span style="COLOR: #a31515"&gt;"PwdStrengthControl"&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;);&lt;span style="mso-spacerun: yes"&gt;             &lt;br /&gt;
  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;[&lt;span style="COLOR: #2b91af"&gt;ScriptableMember&lt;/span&gt;] &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; NotifyStrengthLevel(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; pwd) &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;{ &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: #2b91af"&gt;SolidColorBrush&lt;/span&gt; color = &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;; &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; text = &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;; &lt;br /&gt;
&lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; level = GetPasswordStrengthLevel(pwd);&lt;span style="mso-spacerun: yes"&gt;           &lt;br /&gt;
    &lt;br /&gt;
    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (level &amp;lt;= 1) &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;{ &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;color = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;Colors&lt;/span&gt;.Red); &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;text = &lt;span style="COLOR: #a31515"&gt;"Weak"&lt;/span&gt;; &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (level &amp;gt; 1 &amp;amp;&amp;amp; level &amp;lt;= 3) &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;{ &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;color = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;Colors&lt;/span&gt;.Orange); &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;text = &lt;span style="COLOR: #a31515"&gt;"Normal"&lt;/span&gt;; &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (level &amp;gt; 3 &amp;amp;&amp;amp; level &amp;lt;= 5) &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;{ &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;color = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;Colors&lt;/span&gt;.Green); &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;text = &lt;span style="COLOR: #a31515"&gt;"Strong"&lt;/span&gt;; &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ArgumentException&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"Invalid Strength level: {0}"&lt;/span&gt;,level)); &lt;br /&gt;
&lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;txtPwdStrength.Text = text; &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;txtPwdStrength.Foreground = color; &lt;br /&gt;
&lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: #2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Rectangle&lt;/span&gt;&amp;gt; rects = mainPanel.Children.OfType&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Rectangle&lt;/span&gt;&amp;gt;(); &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;Rectangle&lt;/span&gt; rect &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; rects) rect.Fill = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;Colors&lt;/span&gt;.LightGray); &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;for&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i = 0; i &amp;lt;= level; i++) rects.ElementAt(i).Fill = color;&lt;span style="mso-spacerun: yes"&gt;                        &lt;br /&gt;
  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; GetPasswordStrengthLevel(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; pwd) &lt;br /&gt;
  &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;{   &lt;/span&gt;&lt;/p&gt;
&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;   &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; level = 0; &lt;br /&gt;
&lt;br /&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: green; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;// Algoritmo per determinare il livello di sicurezza della password &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;br /&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; level; &lt;br /&gt;
  &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;} &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;
3. Test.aspx &lt;br /&gt;
&lt;/em&gt;&lt;/strong&gt;A questo punto, il nostro password checker in Silverlight è pronto per essere acceduto via javascript analizzando il DOM del form ASP.NET host. Nel seguente codice viene mostrata una possibile implementazione: ogni volta che si scatena l’evento client-side &lt;em&gt;onkeyup&lt;/em&gt; sulla TextBox per l’inserimento della password, viene invocata una funzione javascript &lt;em&gt;CheckPwdStrength&lt;/em&gt; che si occupa di gestire l’interazione con l’oggetto Silverlight. Da notare in particolare la sintassi: &lt;br /&gt;
&lt;br /&gt;
document.getElementById("&lt;em&gt;&amp;lt;silverlightControl&amp;gt;&lt;/em&gt;").Content.&lt;em&gt;&amp;lt;ScriptableObject&amp;gt;&lt;/em&gt;.&lt;em&gt;&amp;lt;ScriptableMember&amp;gt;&lt;/em&gt;(...); &lt;br /&gt;
&lt;br /&gt;
utilizzata per invocare il metodo di interesse &lt;em&gt;NotifyStrengthLevel&lt;/em&gt; (ScriptableMember) definito all’interno dell’oggetto Silverlight registrato. &lt;br /&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;script&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; &lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="text/javascript"&amp;gt; &lt;br /&gt;
  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;function&lt;/span&gt; CheckPwdStrength(pwd) &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;{ &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; control = document.getElementById(&lt;span style="COLOR: #a31515"&gt;"xamlPwdStrength"&lt;/span&gt;);&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;       &lt;br /&gt;
    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (pwd.length == 0) control.style.visibility = &lt;span style="COLOR: #a31515"&gt;'hidden'&lt;/span&gt;; &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;{ &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;control.style.visibility = &lt;span style="COLOR: #a31515"&gt;'visible'&lt;/span&gt;; &lt;br /&gt;
      &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;strong&gt;control.Content.PwdStrengthControl.NotifyStrengthLevel(pwd);&lt;/strong&gt;&lt;span style="mso-spacerun: yes"&gt;                &lt;br /&gt;
    &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;} &lt;br /&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;}&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;script&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;. . .&lt;br /&gt;
&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;br /&gt;
&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;asp&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;TextBox&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; &lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="txtPassword"&lt;/span&gt; &lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server"&lt;/span&gt; &lt;span style="COLOR: red"&gt;TextMode&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Password"&lt;/span&gt; &lt;span style="COLOR: red"&gt;onkeyup&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="CheckPwdStrength(this.value)" /&amp;gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;asp&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Silverlight&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; &lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="xamlPwdStrength"&lt;/span&gt; &lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server"&lt;/span&gt; &lt;span style="COLOR: red"&gt;Source&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="~/ClientBin/SilverlightAppPasswordStrength.xap" &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;MinimumVersion&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;="2.0.31005.0"&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt; &lt;span style="COLOR: red"&gt;Height&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="15px"&lt;/span&gt; &lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;br /&gt;
&lt;/span&gt;. . . &lt;br /&gt;
&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:deb21792-aacd-4f70-b1de-e665b0be030b" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;br /&gt;
Technorati Tag: &lt;a rel="tag" href="http://technorati.com/tags/Silverlight"&gt;Silverlight&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Javascript"&gt;Javascript&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95318.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/28/interazione-tra-javascript-e-silverlight-un-password-checker.aspx</guid>
            <pubDate>Wed, 28 Jan 2009 00:20:08 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/28/interazione-tra-javascript-e-silverlight-un-password-checker.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95318.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95318.aspx</trackback:ping>
        </item>
        <item>
            <title>[Silverlight 2] Simulare una MasterPage</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/22/silverlight-2-simulare-una-masterpage.aspx</link>
            <description>&lt;p&gt;Allo stato attuale, Silverlight 2 non possiede un modello di programmazione built-in per gestire il concetto di MasterPage così come avviene in ASP.NET a partire dalla versione 2.0. Ad ogni modo, per ovviare a tale mancanza, l'implementazione di una semplice soluzione custom che &lt;strong&gt;simula&lt;/strong&gt; l'interazione tra una pagina "Master" e più pagine "Content" in Silverlight 2 non è poi così difficile. &lt;br /&gt;
L'obiettivo è fondamentalmente quello di definire un PlaceHolder all'interno di una pagina Master (che funge da RootVisual) in cui caricare e visualizzare varie pagine di contenuto. Per ottenere questo risultato vengono dunque definiti due UserControl: MasterPage e ContentPage.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;- MasterPage&lt;br /&gt;
&lt;/em&gt;&lt;/strong&gt;Supponiamo di definire la master page come un semplice UserControl, avente ad esempio il seguente classico layout:&lt;br /&gt;
&lt;br /&gt;
&lt;img style="WIDTH: 180px; HEIGHT: 130px" height="148" alt="" width="280" src="http://img141.imageshack.us/img141/9503/immaginelw8.jpg" /&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Grid&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; x&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;:&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Name&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;="LayoutRoot"&amp;gt;&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;RowDefinition&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; Height&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;="100" /&amp;gt;&lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;RowDefinition&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;/&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;  &amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;!-- Header --&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;StackPanel&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; Grid.Row&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;="0" ...&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;StackPanel&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Grid&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; Grid.Row&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;="1"&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;ColumnDefinition&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; Width&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;="150" /&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;ColumnDefinition&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; /&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;!-- Left Column --&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;StackPanel&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; Grid.Column&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;="0" ...&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;      ...&lt;br /&gt;
    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;StackPanel&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;!-- Center Column --&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;StackPanel&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; x&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;:&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Name&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;="ContentPagePlaceHolder"&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; Grid.Column&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;="1" ...&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; /&amp;gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Grid&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Grid&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Come si può notare, abbiamo un header (StackPanel) e due colonne di una Grid (una a sinistra per il menu ed una centrale per il contenuto). La colonna centrale contiene uno StackPanel nominato &lt;em&gt;ContentPagePlaceHolder&lt;/em&gt; che funge appunto da PlaceHolder per le nostre pagine di contenuto.&lt;br /&gt;
Ecco una sintesi dell'implementazione della MasterPage:&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;MasterPage&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;UserControl&lt;o:p /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; MasterPage()&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;InitializeComponent();&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;LoadContentPages(&lt;span style="COLOR: #a31515"&gt;"contentPages.xml"&lt;/span&gt;);&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; LoadContentPages(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; contentPagesFile)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;XDocument&lt;/span&gt; xDoc = &lt;span style="COLOR: #2b91af"&gt;XDocument&lt;/span&gt;.Load(contentPagesFile);&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;foreach&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; (&lt;span style="COLOR: #2b91af"&gt;XElement&lt;/span&gt; node &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; xDoc.Element(&lt;span style="COLOR: #a31515"&gt;"ContentPages"&lt;/span&gt;).Descendants(&lt;span style="COLOR: #a31515"&gt;"Page"&lt;/span&gt;))&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;       &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;ContentPage&lt;/span&gt; page = &lt;span style="COLOR: #2b91af"&gt;Activator&lt;/span&gt;.CreateInstance(&lt;span style="COLOR: #2b91af"&gt;Type&lt;/span&gt;.GetType(node.Attribute(&lt;span style="COLOR: #a31515"&gt;"type"&lt;/span&gt;).Value)) &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ContentPage&lt;/span&gt;;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;       &lt;/span&gt;page.PageName = node.Attribute(&lt;span style="COLOR: #a31515"&gt;"name"&lt;/span&gt;).Value;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;       &lt;/span&gt;page.Visibility = &lt;span style="COLOR: #2b91af"&gt;Visibility&lt;/span&gt;.Collapsed;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;       &lt;/span&gt;ContentPagePlaceHolder.Children.Add(page);&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ContentPage&lt;/span&gt; GetContentPage(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; pageName)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; ContentPagePlaceHolder.Children.OfType&amp;lt;&lt;span style="COLOR: #2b91af"&gt;ContentPage&lt;/span&gt;&amp;gt;().Single(p =&amp;gt; p.PageName == pageName);&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ViewContentPage(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; pageName)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;      &lt;/span&gt;ViewContentPage(GetContentPage(pageName));&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ViewContentPage(&lt;span style="COLOR: #2b91af"&gt;ContentPage&lt;/span&gt; page)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;ContentPage&lt;/span&gt;&amp;gt; contentPages = ContentPagePlaceHolder.Children.OfType&amp;lt;&lt;span style="COLOR: #2b91af"&gt;ContentPage&lt;/span&gt;&amp;gt;();&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;ContentPage&lt;/span&gt; contentPage &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; contentPages)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;       &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (!contentPage.Equals(page)) contentPage.Visibility = &lt;span style="COLOR: #2b91af"&gt;Visibility&lt;/span&gt;.Collapsed;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;       &lt;/span&gt;&lt;span style="COLOR: blue"&gt;else&lt;/span&gt; contentPage.Visibility = &lt;span style="COLOR: #2b91af"&gt;Visibility&lt;/span&gt;.Visible;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;}&lt;span style="mso-spacerun: yes"&gt;          &lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;}&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Tramite il metodo LoadContentPages(...) popoliamo semplicemente il ContentPagePlaceHolder con le content pages del nostro progetto che in questo caso specifichiamo in un file XML contentPages.xml:&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;?&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;xml&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;version&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;=&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;"&lt;span style="COLOR: blue"&gt;1.0&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;encoding&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;utf-8&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; ?&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;ContentPages&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Page&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;name&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;=&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;"&lt;span style="COLOR: blue"&gt;Page1&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;MasterPageSilverlight.Page1&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Page&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Page&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;name&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;=&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;"&lt;span style="COLOR: blue"&gt;Page2&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;MasterPageSilverlight.Page2&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Page&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;Page&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;name&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;=&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;"&lt;span style="COLOR: blue"&gt;Page3&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;MasterPageSilverlight.Page3&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Page&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br /&gt;
  ...&lt;o:p /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;ContentPages&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Poi, tramite il metodo ViewContentPage(...)  implementiamo il meccanismo di visualizzazione di una specifica ContentPage, che in questo caso è realizzato sfruttando la proprietà &lt;em&gt;Visibility&lt;/em&gt; di ciascuna content page pre-caricata nel ContentPagePlaceHolder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;- ContentPage&lt;br /&gt;
&lt;/em&gt;&lt;/strong&gt;La classe ContentPage rappresenta una pagina di contenuto visualizzabile all'interno del ContentPagePlaceHolder definito nella MasterPage. Per questa classe potremmo definire le seguenti proprietà:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Master&lt;/em&gt;: la MasterPage che contiene la ContentPage &lt;/li&gt;
    &lt;li&gt;&lt;em&gt;PageName&lt;/em&gt;: il nome delle ContentPage che la identifica univocamente all'interno di un ContentPagePlaceHolder  &lt;/li&gt;
    &lt;li&gt;&lt;em&gt;PageData&lt;/em&gt;: un dictionary utilizzabile per passare dati tra ContentPage  &lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ContentPage&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;UserControl&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;MasterPage&lt;/span&gt; Master&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Application&lt;/span&gt;.Current.RootVisual &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;MasterPage&lt;/span&gt;; }&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; PageName { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt;&amp;gt; PageData { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ContentPage()&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.PageData = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt;&amp;gt;();&lt;span style="mso-spacerun: yes"&gt;                &lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;
Esempio di utilizzo&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;
A questo punto abbiamo un semplice programming model per "switchare" content page sia a partire dalla MasterPage contenitore che a partire da una ContentPage contenuta nel ContentPagePlaceHolder della Master. &lt;br /&gt;
In particolare, &lt;br /&gt;
- &lt;strong&gt;all'interno della MasterPage&lt;/strong&gt; possiamo selezionare la ContentPage da visualizzare nel  ContentPagePlaceHolder nel modo seguente:&lt;/p&gt;
&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #2b91af; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;ContentPage&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; contentPage = GetContentPage(&lt;span style="COLOR: #a31515"&gt;"Page2"&lt;/span&gt;);&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;page.PageData[&lt;span style="COLOR: #a31515"&gt;"Info"&lt;/span&gt;] = &lt;span style="COLOR: #a31515"&gt;"MyData..."&lt;/span&gt;; &lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;// Eventuale passaggio di dati alla pagina&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;ViewContentPage(contentPage);&lt;/span&gt;&lt;/p&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
- &lt;strong&gt;all'interno di una ContentPage&lt;/strong&gt;, invece, possiamo utilizzare la reference alla MasterPage che la contiene per comunicare con un'altra ContentPage sorella:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #2b91af; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;ContentPage&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; page = Master.GetContentPage(&lt;span style="COLOR: #a31515"&gt;"Page2"&lt;/span&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;page.PageData[&lt;span style="COLOR: #a31515"&gt;"Info"&lt;/span&gt;] = &lt;span style="COLOR: #a31515"&gt;"MyData..."&lt;/span&gt;; &lt;span style="COLOR: green"&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;// Eventuale passaggio di dati alla pagina&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Master.ViewContentPage(page);&lt;/span&gt;&lt;/p&gt;
&lt;/o:p&gt;&lt;/span&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:97c7d494-13f0-48df-97b5-7b006710493f" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tag: &lt;a rel="tag" href="http://technorati.com/tags/Silverlight"&gt;Silverlight&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/MasterPage"&gt;MasterPage&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95273.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/22/silverlight-2-simulare-una-masterpage.aspx</guid>
            <pubDate>Thu, 22 Jan 2009 15:58:32 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/22/silverlight-2-simulare-una-masterpage.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95273.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95273.aspx</trackback:ping>
        </item>
        <item>
            <title>Silverlight 2 e ICommand</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2008/12/13/94921.aspx</link>
            <description>&lt;p style="FONT-SIZE: 1em"&gt;&lt;strong&gt;Premessa&lt;/strong&gt;: l'altro ieri ho partecipato all' 8° Workshop &lt;a target="_blank" href="http://dotnetmarche.org"&gt;DotNetMarche&lt;/a&gt; dedicato a &lt;a target="_blank" href="http://dotnetmarche.org/eventi/Default.aspx?IDevento=26"&gt;Silverlight&lt;/a&gt;. Un &lt;a target="_blank" href="http://www.nablasoft.com/guardian/"&gt;Alessandro&lt;/a&gt; in grande forma ha tenuto banco per più di 3 ore illustrando una gran quantità di contenuti interessantissimi: dalla presentazione di soluzioni/problematiche architetturali che interessano le RIAs alla realizzazione di controlli custom (finestre di navigazione e menu per Silverlight) , dalla creazione di un' infrastruttura multitargeting per il porting in WPF all' IoC. Insomma, un evento per veri buongustai!!! ( ...considerando soprattutto la seguente cena in compagnia di &lt;a target="_blank" href="http://www.nablasoft.com/guardian/"&gt;Alessandro&lt;/a&gt;, &lt;a target="_blank" href="http://blogs.ugidotnet.org/rgm"&gt;Gian Maria&lt;/a&gt;, &lt;a target="_blank" href="http://blogs.ugidotnet.org/ste8/Default.aspx"&gt;Stefano&lt;/a&gt;, &lt;a target="_blank" href="http://dotnetmarche.org/members/andrea.balducci.aspx"&gt;Andrea&lt;/a&gt;, &lt;a target="_blank" href="http://www.agilemovement.it/profile/StefanoLeli"&gt;Stefano&lt;/a&gt;, &lt;a target="_blank" href="http://www.rainbowbreeze.it/"&gt;Alfredo&lt;/a&gt; e la buonissima bistecca alla fiorentina :D .  )     &lt;/p&gt;
&lt;p style="FONT-SIZE: 1em"&gt;Tornando all'oggetto di questo post, un aspetto che sta attirando la mia attenzione in questi giorni è l'assenza in Silverlight 2 del supporto built-in per l'interfaccia &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.aspx"&gt;ICommand&lt;/a&gt;. Ovvero, l'interfaccia è presente (come in WPF), ma per utilizzarla ad esempio in un M-V-VM sottoforma di binding dichiarativo abbiamo bisogno di implementare a mano i nostri ICommand come "attached properties" e quindi associarli agli eventi dei controlli.... O_o  &lt;br /&gt;
Speriamo vivamente che il supporto ai command source sia presto introdotto anche in Silverlight.  &lt;br /&gt;
&lt;br /&gt;
Ad ogni modo, segnalo questo &lt;a target="_blank" href="http://blogs.infragistics.com/blogs/joshs/archive/2008/11/17/putting-silverlight-commands-to-use.aspx"&gt;post&lt;/a&gt; di &lt;a target="_blank" href="http://blogs.infragistics.com"&gt;Josh Smith&lt;/a&gt; in cui viene riportato un semplice esempio di realizzazione di due attached properties (nello specifico &lt;em&gt;Command&lt;/em&gt; e &lt;em&gt;CommandParameter&lt;/em&gt;) per i controlli che derivano da &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.aspx"&gt;ButtonBase&lt;/a&gt;. &lt;br /&gt;
&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e1bde5bf-238a-4397-86a9-ba794037e537" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tag: &lt;a rel="tag" href="http://technorati.com/tags/Silverlight%202"&gt;Silverlight 2&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/94921.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2008/12/13/94921.aspx</guid>
            <pubDate>Sat, 13 Dec 2008 10:47:42 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2008/12/13/94921.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/94921.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/94921.aspx</trackback:ping>
        </item>
        <item>
            <title>[Silverlight 2] Navigazione tra pagine</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2008/12/09/silverlight-2-navigazione-tra-pagine.aspx</link>
            <description>&lt;p&gt;Da un punto di vista dell'usabilità, è estremamente importante strutturare un' applicazione che gestisce molti contenuti in modo tale che l'utente possa navigare facilmente ed intuitivamente tra le varie pagine. Da un punto di vista dello sviluppo, invece, implementare un'infrastruttura di navigazione flessibile e testabile non è la cosa più semplice del mondo, ma può caratterizzare un aspetto critico.    &lt;br /&gt;Purtroppo, a differenza del suo fratellone WPF, &lt;strong&gt;Silverlight 2 non include alcun supporto alla navigazione tra pagine&lt;/strong&gt;!    &lt;br /&gt;Questo significa che a meno di applicazioni piccole, ci troveremmo veramente nei pasticci se implementassimo la navigazione basandoci solo sul mostrare/nascondere "manualmente" i controlli della UI contenuti nella nostra Root Page... insomma, attualmente  la navigazione avanti/indietro in Silverlight ce la dobbiamo implementare in casa!!! E' evidente che in un progetto di una certa complessità questa mancanza può essere pesante.&lt;/p&gt;  &lt;p&gt;Per chi vuole approfondire la questione, nel blog di &lt;a href="http://blogs.msdn.com/dphill" target="_blank"&gt;David Hill&lt;/a&gt; sono presenti dei &lt;a href="http://blogs.msdn.com/dphill/archive/2008/10/07/silverlight-navigation-part-1.aspx" target="_blank"&gt;post&lt;/a&gt; dedicati allo sviluppo di un prototipo di framework dedicato alla navigazione (codename "Helix") in Silverlight 2. Essa si basa su tre semplici entità: &lt;em&gt;Frame&lt;/em&gt;, &lt;em&gt;Page&lt;/em&gt; e &lt;em&gt;NavigationLink&lt;/em&gt;.    &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/dphill/archive/2008/10/07/silverlight-navigation-part-1.aspx" target="_blank"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/dphill/WindowsLiveWriter/SilverlightNavigationPart1_3B04/HelixNavigation_thumb_2.png" /&gt;&lt;/a&gt;  &lt;br /&gt;    &lt;br /&gt;Buona Navigazione :D    &lt;br /&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0841e34b-1086-485f-b94b-24f50e31e2b5" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/Silverlight%202" rel="tag"&gt;Silverlight 2&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/94889.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2008/12/09/silverlight-2-navigazione-tra-pagine.aspx</guid>
            <pubDate>Tue, 09 Dec 2008 20:54:03 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2008/12/09/silverlight-2-navigazione-tra-pagine.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/94889.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/94889.aspx</trackback:ping>
        </item>
    </channel>
</rss>