<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">
    <channel>
        <title>DarioSantarelli.Blog("UgiDotNet");</title>
        <link>http://blogs.ugidotnet.org/dsantarelli/Default.aspx</link>
        <description>&amp;lt;sharing mode=”On” users=”*” /&amp;gt;</description>
        <language>it-IT</language>
        <copyright>Dario Santarelli</copyright>
        <generator>Subtext Version 2.1.0.3</generator>
        <image>
            <title>DarioSantarelli.Blog("UgiDotNet");</title>
            <url>http://blogs.ugidotnet.org/images/RSS2Image.gif</url>
            <link>http://blogs.ugidotnet.org/dsantarelli/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/DarioSantarelliUgiDotNet" type="application/rss+xml" /><item>
            <title>LINQ to CSV</title>
            <category>.NET</category>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/04/27/linq-to-csv.aspx</link>
            <description>&lt;p&gt;Veramente utile!!! :D&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="http://www.codeproject.com/KB/linq/LINQtoCSV.aspx"&gt;http://www.codeproject.com/KB/linq/LINQtoCSV.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:29498a2b-252a-48c5-9659-365f84b2e2ea" 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/LINQ"&gt;LINQ&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/CSV"&gt;CSV&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/96054.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/04/27/linq-to-csv.aspx</guid>
            <pubDate>Mon, 27 Apr 2009 14:35:37 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/96054.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/04/27/linq-to-csv.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/96054.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/96054.aspx</trackback:ping>
        </item>
        <item>
            <title>[WPF] ICommand e CanExecute</title>
            <category>WPF</category>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/04/02/wpf-icommand-e-canexecute.aspx</link>
            <description>&lt;p&gt;Per chi sviluppa utilizzando il pattern M-V-VM l’interfaccia &lt;a href="http://msdn.microsoft.com/it-it/library/system.windows.input.icommand.aspx" target="_blank"&gt;ICommand&lt;/a&gt; costituisce la base per costruire un’infrastruttura che permetta alla View di invocare comandi applicativi direttamente nel ViewModel. L’interfaccia mette a disposizione tre semplici membri: due metodi &lt;em&gt;Execute(...)&lt;/em&gt;, &lt;em&gt;CanExecute(...)&lt;/em&gt; ed un evento &lt;em&gt;CanExecuteChanged&lt;/em&gt;. E’ facile immaginare come in progetti di una certa consistenza sia necessario costruirsi delle implementazioni spesso particolari dell’interfaccia ICommand, cosa che da una parte implica tanta buona volontà, dall’altra ripaga quando si dormono sonni tranquilli pensando ad una View completamente svincolata dalla logica applicativa.    &lt;br /&gt;In genere un’ utile implementazione di ICommand poggia sull’ intercettazione dell’evento &lt;em&gt;CanExecuteChanged&lt;/em&gt; in modo da poter esporre alla View informazioni sul fatto che il nostro command sia o meno eseguibile ( si pensi ad esempio ad un Button enabled o meno ). A mio modo di vedere, una limitazione dell’interfaccia ICommand risiede nel metodo &lt;em&gt;CanExecute(…)&lt;/em&gt; , il quale appunto è un metodo ( con annesso parametro opzionale ) e non una proprietà, cosa che non mette a disposizione il classico pattern &lt;em&gt;Property&lt;/em&gt;/&lt;em&gt;PropertyChanged&lt;/em&gt; sfruttabile nei data binding tra ViewModel e View.  &lt;br /&gt;E’ semplice ovviare a questa situazione: ad esempio si può fare in modo che il nostro ICommand implementi una sorta di proprietà “wrapper” per esporre un sistema binding-friendly &lt;em&gt;CanExecute&lt;/em&gt;/&lt;em&gt;CanExecuteChanged&lt;/em&gt;.    &lt;br /&gt;Vediamo un esempio pratico. In una mia applicazione WPF avevo bisogno di realizzare un VM per una Window di Login e volevo “bindare” la proprietà &lt;em&gt;CanLogin&lt;/em&gt; del VM ( che semplicemente ritorna &lt;em&gt;true&lt;/em&gt; se UserName e Password sono entrambi valorizzati ) direttamente con il metodo &lt;em&gt;CanExecute(…)&lt;/em&gt; del mio ICommand.     &lt;br /&gt;    &lt;br /&gt;Ho quindi realizzato un’implementazione di ICommand (chiamata senza fantasia &lt;em&gt;CanExecuteCommand&lt;/em&gt;) che accetta:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Un Delegate da eseguire all’interno dell’ &lt;em&gt;Execute(…)&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;Un oggetto di tipo &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.aspx" target="_blank"&gt;Binding&lt;/a&gt; che rappresenta il binding tra una proprietà “wrapper” per il metodo &lt;em&gt;CanExecute(…)&lt;/em&gt; dell’ ICommand (nello specifico &lt;em&gt;CanExecuteAction)&lt;/em&gt; e una proprietà del ViewModel (nello specifico &lt;em&gt;CanLogin&lt;/em&gt;) in modo da poter scatenare l’evento &lt;em&gt;CanExecuteChanged&lt;/em&gt; proprio al variare della proprietà &lt;em&gt;CanLogin&lt;/em&gt; del ViewModel. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Difficile da spiegare, facile da implementare :D&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;   &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;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;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CanExecuteCommand&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;DependencyObject&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;ICommand       &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;/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;Action&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;gt; _executeDelegate;      &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;event&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt; CanExecuteChanged;      &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;public&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; CanExecuteAction      &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;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; (&lt;span style="color: blue"&gt;bool&lt;/span&gt;)GetValue(CanExecuteActionProperty); }      &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;set&lt;/span&gt; { SetValue(CanExecuteActionProperty, &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-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;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DependencyProperty&lt;/span&gt; CanExecuteActionProperty =       &lt;br /&gt;          &lt;span style="color: #2b91af"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;span style="color: #a31515"&gt;"CanExecuteAction"&lt;/span&gt;, &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue"&gt;bool&lt;/span&gt;), &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;CanExecuteCommand&lt;/span&gt;),       &lt;br /&gt;                                      &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PropertyMetadata&lt;/span&gt;(OnCanExecuteActionChanged));      &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;public&lt;/span&gt; CanExecuteCommand(&lt;span style="color: #2b91af"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;gt; executeDelegate) : &lt;span style="color: blue"&gt;this&lt;/span&gt;(executeDelegate, &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;public&lt;/span&gt; CanExecuteCommand(&lt;span style="color: #2b91af"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;gt; executeDelegate, &lt;span style="color: #2b91af"&gt;Binding&lt;/span&gt; canExecuteActionBinding)      &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;_executeDelegate = executeDelegate;     &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;if&lt;/span&gt; (canExecuteActionBinding != &lt;span style="color: blue"&gt;null&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: #2b91af"&gt;BindingOperations&lt;/span&gt;.SetBinding(&lt;span style="color: blue"&gt;this&lt;/span&gt;, CanExecuteActionProperty, canExecuteActionBinding);&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; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;#region&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; ICommand Members     &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;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Execute(&lt;span style="color: blue"&gt;object&lt;/span&gt; parameter) { _executeDelegate(parameter); }      &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;public&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; CanExecute(&lt;span style="color: blue"&gt;object&lt;/span&gt; parameter) { &lt;span style="color: blue"&gt;return&lt;/span&gt; CanExecuteAction; }      &lt;br /&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;#endregion     &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;void&lt;/span&gt; RaiseCanExecuteActionChanged()      &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;if&lt;/span&gt; (CanExecuteChanged != &lt;span style="color: blue"&gt;null&lt;/span&gt;) CanExecuteChanged(&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;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;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;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; OnCanExecuteActionChanged(&lt;span style="color: #2b91af"&gt;DependencyObject&lt;/span&gt; dependencyObject, &lt;span style="color: #2b91af"&gt;DependencyPropertyChangedEventArgs&lt;/span&gt; args)      &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;(dependencyObject &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CanExecuteCommand&lt;/span&gt;).RaiseCanExecuteActionChanged();      &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;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&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;ViewModel:&lt;/strong&gt;&lt;/p&gt;  &lt;p&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;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;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;LoginViewModel&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;ILoginViewModel&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;INotifyPropertyChanged       &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;/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;string&lt;/span&gt; _username;      &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;string&lt;/span&gt; _password;      &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;public&lt;/span&gt; &lt;span style="color: blue"&gt;event&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PropertyChangedEventHandler&lt;/span&gt; PropertyChanged;      &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;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ICommand&lt;/span&gt; ReadyCommand { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;set&lt;/span&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;// In Binding con la View     &lt;br /&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;#region&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; ILoginViewModel Members     &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;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; UserName &lt;span style="font-size: 8pt; color: green; line-height: 115%; font-family: 'Courier New'; mso-no-proof: yes"&gt;// In Binding con la View&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;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _username; }      &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;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-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;if&lt;/span&gt; (_username != &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-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;_username = &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-ansi-language: en-us; mso-no-proof: yes"&gt;RaisePropertyChanged(&lt;span style="color: #a31515"&gt;"UserName"&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;RaisePropertyChanged(&lt;span style="color: #a31515"&gt;"CanLogin"&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;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;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;string&lt;/span&gt; Password &lt;span style="font-size: 8pt; color: green; line-height: 115%; font-family: 'Courier New'; mso-no-proof: yes"&gt;// In Binding con la View&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;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _password; }      &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;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-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;if&lt;/span&gt; (_password != &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-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;_password = &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-ansi-language: en-us; mso-no-proof: yes"&gt;RaisePropertyChanged(&lt;span style="color: #a31515"&gt;"Password"&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;RaisePropertyChanged(&lt;span style="color: #a31515"&gt;"CanLogin"&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;/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;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;public&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; CanLogin      &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;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; !&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(UserName) &amp;amp;&amp;amp; !&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(Password); }      &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;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; Login()      &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: green"&gt;//... Do Login...&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; 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; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;#endregion     &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;public&lt;/span&gt; LoginViewModel()      &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;Binding&lt;/span&gt; binding = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Binding&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"CanLogin"&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;binding.Source = &lt;span style="color: blue"&gt;this&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;ReadyCommand = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CanExecuteCommand&lt;/span&gt;((arg) =&amp;gt; Login(), binding);&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;void&lt;/span&gt; RaisePropertyChanged(&lt;span style="color: blue"&gt;string&lt;/span&gt; propertyName)      &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;if&lt;/span&gt; (PropertyChanged != &lt;span style="color: blue"&gt;null&lt;/span&gt;) PropertyChanged(&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;PropertyChangedEventArgs&lt;/span&gt;(propertyName));      &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;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&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:29498a2b-252a-48c5-9659-365f84b2e2ea" 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/WPF" rel="tag"&gt;WPF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ICommand" rel="tag"&gt;ICommand&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95863.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/04/02/wpf-icommand-e-canexecute.aspx</guid>
            <pubDate>Thu, 02 Apr 2009 18:18:39 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95863.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/04/02/wpf-icommand-e-canexecute.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95863.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95863.aspx</trackback:ping>
        </item>
        <item>
            <title>[Silverlight/WPF] Resource file e Access Modifier</title>
            <category>WPF</category>
            <category>Silverlight</category>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/19/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/19/silverlightwpf-resource-file-e-access-modifier.aspx</guid>
            <pubDate>Thu, 19 Mar 2009 22:02:41 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95753.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/19/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>
            <category>Silverlight</category>
            <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 21:04:58 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95722.aspx</wfw:comment>
            <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>jQuery e ASP.NET Ajax: $(document).ready() VS asynchronous postback</title>
            <category>ASP.NET AJAX</category>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/09/jquery-e-asp.net-ajax-document.ready-vs-asynchronous-postback.aspx</link>
            <description>&lt;p&gt;Molto spesso capita di dover integrare, anche solo per semplici miglioramenti grafici, dei plugin jQuery all’interno delle nostre pagine ASP.NET. Gran parte delle volte l’impatto è indolore mentre in alcuni casi specifici occorre far riferimento ad accorgimenti non banali, soprattutto quando c’è di mezzo ASP.NET Ajax.   &lt;br /&gt;Il classico esempio si verifica quando ci si aspetta che la funzione &lt;a href="http://docs.jquery.com/Tutorials:Introducing_$(document).ready()" target="_blank"&gt;$(document).ready()&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;venga chiamata correttamente anche dopo un asynchronous postback tramite UpdatePanel. Infatti, la funzione $(document).ready() permette di determinare il momento in cui il DOM della pagina è caricato dal browser. Tuttavia, in caso di asynchronous postback il DOM può essere eventualmente modificato e non ricaricato nuovamente. Quindi il nostro codice javascript nella forma:    &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 style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;$(document).ready(&lt;span style="color: blue"&gt;function&lt;/span&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;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: green"&gt;// codice...       &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&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;... non verrà eseguito!    &lt;br /&gt;Un workaround molto semplice per questo tipo di situazione è quello di sfruttare l’evento client-side &lt;a href="http://msdn.microsoft.com/it-it/library/bb383810.aspx" target="_blank"&gt;endRequest&lt;/a&gt; generato dopo un postback asincrono, quando il controllo viene  restituito al browser. Agganciando il nostro codice jQuery che usa $(document).ready() all’interno di un opportuno event Handler per tale evento possiamo risolvere il problema. Ecco un semplice esempio:    &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; background: yellow; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-highlight: yellow; mso-ansi-language: en-us"&gt;&amp;lt;%&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; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&gt; &lt;span style="color: #a31515"&gt;Page&lt;/span&gt; &lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;="C#"&lt;/span&gt; &lt;span style="color: red"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="color: blue"&gt;="true"&lt;/span&gt; &lt;span style="color: red"&gt;CodeFile&lt;/span&gt;&lt;span style="color: blue"&gt;="Default.aspx.cs"&lt;/span&gt; &lt;span style="color: red"&gt;Inherits&lt;/span&gt;&lt;span style="color: blue"&gt;="_Default"&lt;/span&gt; &lt;span style="background: yellow; mso-highlight: yellow"&gt;%&amp;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-no-proof: yes; mso-ansi-language: en-us"&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-no-proof: yes; mso-ansi-language: en-us"&gt;DOCTYPE&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: red"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;PUBLIC&lt;/span&gt; &lt;span style="color: blue"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span style="color: blue"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;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-no-proof: yes; mso-ansi-language: en-us"&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-no-proof: yes; mso-ansi-language: en-us"&gt;html&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: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;="http://www.w3.org/1999/xhtml"&amp;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-no-proof: yes; mso-ansi-language: en-us"&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-no-proof: yes; mso-ansi-language: en-us"&gt;head&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: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;jQuery .ready() function and asynchronous postback&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&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; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-us"&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-no-proof: yes; mso-ansi-language: en-us"&gt;head&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;&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-no-proof: yes; mso-ansi-language: en-us"&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-no-proof: yes; mso-ansi-language: en-us"&gt;body&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;&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;="mainForm"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ScriptManager&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="scriptManager"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Scripts&lt;/span&gt;&lt;span style="color: blue"&gt;&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ScriptReference&lt;/span&gt; &lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="http://code.jquery.com/jquery-latest.js"&lt;/span&gt; &lt;span style="color: blue"&gt;/&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Scripts&lt;/span&gt;&lt;span style="color: blue"&gt;&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ScriptManager&lt;/span&gt;&lt;span style="color: blue"&gt;&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;UpdatePanel&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="updatePanel"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&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;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="btnTest"&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;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="Do Async PostBack"&lt;/span&gt; &lt;span style="color: blue"&gt;/&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color: blue"&gt;&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;       &lt;p /&gt;     &lt;/span&gt;&lt;/span&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; 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;/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;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&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;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;Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);     &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;function&lt;/span&gt; EndRequestHandler(sender, args)       &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; (args.get_error() == undefined) Test();&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;function&lt;/span&gt; Test()       &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;$(document).ready(&lt;span style="color: blue"&gt;function&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;alert(&lt;span style="color: #a31515"&gt;'$(document).ready() called!!!'&lt;/span&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;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;br /&gt;    &lt;/span&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Test();&lt;span style="mso-spacerun: yes"&gt;      &lt;/span&gt;&lt;span style="mso-spacerun: yes"&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;span style="mso-spacerun: yes"&gt;             &lt;br /&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;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;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;body&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;html&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;p /&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0d2ddb6a-8ca7-4ffc-89d5-18c75e15fbdf" 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/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ajax" rel="tag"&gt;Ajax&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DOM" rel="tag"&gt;DOM&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95644.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/09/jquery-e-asp.net-ajax-document.ready-vs-asynchronous-postback.aspx</guid>
            <pubDate>Mon, 09 Mar 2009 20:58:18 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95644.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/09/jquery-e-asp.net-ajax-document.ready-vs-asynchronous-postback.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95644.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95644.aspx</trackback:ping>
        </item>
        <item>
            <title>[Entity Framework] Disabilitare il change tracking dell&amp;rsquo;ObjectStateManager</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/03/entity-framework-disabilitare-il-change-tracking-dellrsquoobjectstatemanager.aspx</link>
            <description>&lt;blockquote&gt;(da MSDN)&lt;em&gt; ObjectStateManager tracks query results, and provides logic to merge multiple overlapping query results. It also performs in-memory change tracking when a user inserts, deletes, or modifies objects, and provides the change set for updates. This change set is used by the change processor to persist modifications. &lt;/em&gt;&lt;/blockquote&gt;  &lt;p /&gt;  &lt;p&gt;   &lt;br /&gt;La classe &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectstatemanager.aspx"&gt;ObjectStateManager&lt;/a&gt; in generale gestisce lo stato dei nostri &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.dataclasses.entityobject.aspx" target="_blank"&gt;EntityObject&lt;/a&gt;. In quei casi in cui i nostri dati devono essere semplicemente presentati in modalità &lt;strong&gt;read only&lt;/strong&gt; può essere utile disabilitare il change tracking dell’ &lt;a href="http://msdn.microsoft.com/it-it/library/system.data.objects.objectcontext.aspx" target="_blank"&gt;ObjectContext&lt;/a&gt;, ottenendo un incremento di performance talvolta significativo.  &lt;br /&gt;In particolare, per disabilitare il change tracking occorre utilizzare l’opzione &lt;strong&gt;MergeOption.NoTracking &lt;/strong&gt;dell’enumeration &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.mergeoption.aspx" target="_blank"&gt;MergeOption&lt;/a&gt;, che permette di lavorare con Entità aventi &lt;a href="http://msdn.microsoft.com/it-it/library/system.data.entitystate.aspx" target="_blank"&gt;EntityState&lt;/a&gt; ‘&lt;em&gt;Detached’&lt;/em&gt;. Fondamentalmente esistono due modi per disabilitare il change tracking:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Utilizzando l’oggetto &lt;a href="http://msdn.microsoft.com/en-us/library/bb345303.aspx" target="_blank"&gt;ObjectQuery&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; Esiste infatti un &lt;a href="http://msdn.microsoft.com/en-us/library/bb738896.aspx" target="_blank"&gt;overload del costruttore&lt;/a&gt; che permette di specificare l’opzione &lt;em&gt;MergeOption&lt;/em&gt; desiderata. &lt;/li&gt;    &lt;li&gt;A livello di EntitySet &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Vediamo entrambi gli esempi:&lt;/p&gt;  &lt;p /&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Caso 1&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-ansi-language: en-us; mso-no-proof: yes"&gt;using&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;NorthwindObjectContext&lt;/span&gt; context = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;NorthwindObjectContext&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: #2b91af"&gt;ObjectQuery&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt;&amp;gt; queryCustomers = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ObjectQuery&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515"&gt;"SELECT VALUE c FROM NorthwindObjectContext.Customers AS c"&lt;/span&gt;, context, &lt;span style="color: #2b91af"&gt;MergeOption&lt;/span&gt;.NoTracking);       &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;Customer&lt;/span&gt; customer &lt;span style="color: blue"&gt;in&lt;/span&gt; queryCustomers)&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;/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;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"{0} - {1}"&lt;/span&gt;, customer.ContactName, customer.EntityState.ToString());&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;/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;p&gt;   &lt;br /&gt;&lt;strong&gt;&lt;em&gt;Caso 2&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-ansi-language: en-us; mso-no-proof: yes"&gt;using&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;NorthwindObjectContext&lt;/span&gt; context = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;NorthwindObjectContext&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="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;context.Customers.MergeOption = &lt;span style="color: #2b91af"&gt;MergeOption&lt;/span&gt;.NoTracking;&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;foreach&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt; customer &lt;span style="color: blue"&gt;in&lt;/span&gt; context.Customers)&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;/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;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"{0} - {1}"&lt;/span&gt;, customer.ContactName, customer.EntityState.ToString());&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;/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;p /&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p&gt;   &lt;br /&gt;    &lt;/p&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:361ba0c7-bb8b-40ab-be38-205b3ba1dc04" 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/Entity+Framework" rel="tag"&gt;Entity Framework&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95595.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/03/entity-framework-disabilitare-il-change-tracking-dellrsquoobjectstatemanager.aspx</guid>
            <pubDate>Tue, 03 Mar 2009 20:31:15 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95595.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/03/03/entity-framework-disabilitare-il-change-tracking-dellrsquoobjectstatemanager.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95595.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95595.aspx</trackback:ping>
        </item>
        <item>
            <title>Da WindowsForms a WPF via MVP</title>
            <category>WPF</category>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/27/da-windowsforms-a-wpf-via-mvp.aspx</link>
            <description>&lt;p&gt;Qualche giorno fa mi sono imbattutto in una simpatica applicazione Windows Forms che permette di disegnare su una lavangna virtuale il posizionamento in campo di due squadre di calcio. Un'applicazione per allenatori insomma :D. In breve, il funzionamento è semplicemente basato sull'aggiunta e sullo spostamento di pedine (rosse o blu) su un campo di calcio virtuale con eventuale possibilità di ingrandirne/rimpicciolirne le dimensioni.    &lt;br /&gt;Guardando il sorgente ho osservato come l’intera applicazione fosse stata concepita e sviluppata "alla Windows Forms" con l'intera logica piazzata all'interno di ciascun event handler dei vari elementi dell'UI.     &lt;br /&gt;Ho quindi pensato di esercitarmi nel fare un po' di refactoring, ma soprattutto di analizzare alcuni aspetti prettamente grafici nel porting di una applicazione WindowsForms ad una versione WPF.     &lt;br /&gt;Dal punto di vista architetturale, prima di passare alla versione &lt;strong&gt;MVVM&lt;/strong&gt; ho anzitutto ritenuto opportuno inserire un “passaggio intermedio” nel refactoring, soffermandomi su una versione &lt;strong&gt;MVP&lt;/strong&gt;. Il tutto per mettere sostanzialmente in risalto al mio cervello i principali punti di differenza tra i due pattern. Inoltre, come già accennato, la fase di analisi ha toccato alcune potenzialità grafiche di WPF, come il Drag &amp;amp; Drop/Move e lo Zoom.     &lt;br /&gt;    &lt;br /&gt;In questo post vorrei condividere con voi come mi sono mosso, sperando di ricevere magari qualche utile consiglio ;D    &lt;br /&gt;    &lt;br /&gt;Anzitutto sono partito definendo un mini-core, ovvero un'interfaccia "marker" &lt;em&gt;IView&lt;/em&gt; per le View&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;public&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; &lt;span style="color: blue"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IView&lt;/span&gt; { }&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;ed una classe generica astratta per il presenter:&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;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PresenterBase&lt;/span&gt;&amp;lt;T&amp;gt; &lt;span style="color: blue"&gt;where&lt;/span&gt; T : &lt;span style="color: #2b91af"&gt;IView        &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;br /&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;public&lt;/span&gt; T View { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }       &lt;br /&gt;&lt;/span&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;A questo punto ho iniziato il porting della Form principale dell'applicazione di partenza (che si chiamava &lt;em&gt;SoccerBlackBoardForm&lt;/em&gt;) realizzando la corrispondente Window WPF (&lt;em&gt;SoccerBlackBoardWindow&lt;/em&gt;) che implementa un'interfaccia &lt;em&gt;IBlackboardView&lt;/em&gt; dedotta analizzando il codice dell'applicazione originale. Infine ho realizzato una classe presenter &lt;em&gt;BlackboardPresenter&lt;/em&gt; per le View che implementano &lt;em&gt;IBlackboardView&lt;/em&gt;. Il tutto è rappresentato sinteticamente nel seguente class Diagram:&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://img100.imageshack.us/img100/2479/immagine3a.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;Omettendo per brevità il codice dell'interfaccia &lt;em&gt;IBlackboardView&lt;/em&gt;, riporto direttamente lo &lt;strong&gt;scheletro&lt;/strong&gt; del mio refactoring dal momento che si tratta di codice abbastanza autoesplicativo:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; La costruzione della Window &lt;em&gt;SoccerBlackBoardWindow&lt;/em&gt; ha letteralmente svuotato di logica la corrispondente versione Windows Forms fino ad avere la seguente forma:     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;SoccerBlackBoardWindow.xaml&lt;/strong&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Window&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt; ...&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&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: #a31515; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Grid&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="100"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="*"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt; Orientation&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="Vertical"&amp;gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;ListBox&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="lstImages"&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;DataTemplate&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Image&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt; Source&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="{&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Binding&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;}"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Image&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;DataTemplate&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;ListBox&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Button&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt; Content&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="Add Image &amp;gt;&amp;gt;"&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt; Click&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="AddImageClick" ...&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Button&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Button&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt; Content&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="Clear"&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt; Click&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="ClearClick"&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Button&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Canvas&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="drawingArea"&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="1"&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;Canvas.Background&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;ImageBrush&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt; Stretch&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="Fill"&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: red; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;  &lt;br /&gt;                            ImageSource&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;="Resources/SoccerField.png"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;ImageBrush&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &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;Canvas.Background&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;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; 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;Canvas&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;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; 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: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &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;Window&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;br /&gt;SoccerBlackBoardWindow.xaml.cs&lt;/strong&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;SoccerBlackBoardWindow&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;Window&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;IBlackboardView        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;{      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BlackboardPresenter&lt;/span&gt; _presenter;       &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;#region&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt; IBlackboardView Members      &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Panel&lt;/span&gt; DrawingArea       &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;{      &lt;br /&gt;    &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; drawingArea; }       &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;}      &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Point&lt;/span&gt; MousePosition       &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;{      &lt;br /&gt;    &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&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;Mouse&lt;/span&gt;.GetPosition(drawingArea); }&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; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;}      &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;BitmapSource&lt;/span&gt;&amp;gt; AvailableImages       &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;{      &lt;br /&gt;    &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&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;IList&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;BitmapSource&lt;/span&gt;&amp;gt;)lstImages.ItemsSource; }       &lt;br /&gt;    &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;set&lt;/span&gt; { lstImages.ItemsSource = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }       &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;}      &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BitmapSource&lt;/span&gt; SelectedImage       &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;{      &lt;br /&gt;    &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&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;BitmapSource&lt;/span&gt;)lstImages.SelectedItem; }       &lt;br /&gt;    &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;set&lt;/span&gt; { lstImages.SelectedItem = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }       &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;}      &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; AttachPresenter(&lt;span style="color: #2b91af"&gt;BlackboardPresenter&lt;/span&gt; presenter) { _presenter = presenter; }&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: &amp;quot;Courier New&amp;quot;; 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: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;#endregion&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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; SoccerBlackBoardWindow()&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;_presenter = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BlackboardPresenter&lt;/span&gt;(&lt;span style="color: blue"&gt;this&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;_presenter.LoadImages();       &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;protected&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; AddImageClick(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs&lt;/span&gt; e) &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;{ &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;_presenter.DrawImage(SelectedImage, &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Size&lt;/span&gt;(100, 100), 0, 0, 0); &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;}      &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ClearClick(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs&lt;/span&gt; e) &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&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;_presenter.ClearDrawingArea(); &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;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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;2.&lt;/strong&gt; Il presenter &lt;em&gt;BlackboardPresenter&lt;/em&gt; è stato quindi realizzato per aggiornare la View sia in base agli eventi utente e l'interazione con il model, che in questo caso è dato da una banale collezione readonly di immagini che l'utente ha a disposizione per l'inserimento nella area di disegno (DrawingArea)     &lt;br /&gt;Notare come sia semplice realizzare un meccanismo di Drag &amp;amp; Move :D.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BlackboardPresenter.cs&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-GB" style="font-size: 8pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;BlackboardPresenter&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;PresenterBase&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;IBlackboardView&lt;/span&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;{      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Point&lt;/span&gt; _tmpPosition;       &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;const&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; ZOOMDELTA = 10;       &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; BlackboardPresenter(&lt;span style="color: #2b91af"&gt;IBlackboardView&lt;/span&gt; view) { View = view; }       &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; LoadImages()       &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; 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; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: #2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;BitmapSource&lt;/span&gt;&amp;gt; availableImages = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;BitmapSource&lt;/span&gt;&amp;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; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: green"&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span lang="EN-GB"&gt;&lt;font color="#000000"&gt;availableImages.Add(&lt;/font&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: #2b91af"&gt;BitmapImage&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: #a31515"&gt;"Resources/SoccerBall.png"&lt;/span&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;span style="color: #2b91af"&gt;UriKind&lt;/span&gt;&lt;font color="#000000"&gt;.Relative)));&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;      &lt;br /&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;font color="#000000"&gt;    availableImages.Add(&lt;/font&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: #2b91af"&gt;BitmapImage&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: #a31515"&gt;"Resources/blueBall.png"&lt;/span&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;span style="color: #2b91af"&gt;UriKind&lt;/span&gt;&lt;font color="#000000"&gt;.Relative)));  &lt;br /&gt;    &lt;/font&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;font color="#000000"&gt;availableImages.Add(&lt;/font&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: #2b91af"&gt;BitmapImage&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: #a31515"&gt;"Resources/redBall.png"&lt;/span&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;span style="color: #2b91af"&gt;UriKind&lt;/span&gt;&lt;font color="#000000"&gt;.Relative)));       &lt;br /&gt;    &lt;/font&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;View.AvailableImages = availableImages;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;}      &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ClearDrawingArea()&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;{ &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;View.DrawingArea.Children.Clear(); &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;}      &lt;br /&gt;      &lt;br /&gt;  &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Image&lt;/span&gt; DrawImage(&lt;span style="color: #2b91af"&gt;ImageSource&lt;/span&gt; source, &lt;span style="color: #2b91af"&gt;Size&lt;/span&gt; size, &lt;span style="color: blue"&gt;int&lt;/span&gt; canvasLeft, &lt;span style="color: blue"&gt;int&lt;/span&gt; canvasTop,&lt;span style="color: blue"&gt;int&lt;/span&gt; zIndex)&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;/font&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;Image&lt;/span&gt; image = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Image&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;image.Source = source;&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;image.Height = size.Height;&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;image.Width = size.Width;&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;image.Cursor = &lt;span style="color: #2b91af"&gt;Cursors&lt;/span&gt;.Hand;&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;Canvas&lt;/span&gt;.SetLeft(image, canvasLeft);&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: &amp;quot;Courier New&amp;quot;; 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;Canvas&lt;/span&gt;.SetTop(image, canvasTop);&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: &amp;quot;Courier New&amp;quot;; 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;Panel&lt;/span&gt;.SetZIndex(image, zIndex);&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;image.MouseMove += &lt;span style="color: blue"&gt;delegate&lt;/span&gt;(&lt;span style="color: blue"&gt;object&lt;/span&gt; o, &lt;span style="color: #2b91af"&gt;MouseEventArgs&lt;/span&gt; args) { MoveImage(image); };&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;image.MouseWheel += &lt;span style="color: blue"&gt;delegate&lt;/span&gt;(&lt;span style="color: blue"&gt;object&lt;/span&gt; o, &lt;span style="color: #2b91af"&gt;MouseWheelEventArgs&lt;/span&gt; args) { ZoomImage(image, args.Delta); };&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;image.MouseDown += &lt;span style="color: blue"&gt;delegate&lt;/span&gt;(&lt;span style="color: blue"&gt;object&lt;/span&gt; o, &lt;span style="color: #2b91af"&gt;MouseButtonEventArgs&lt;/span&gt; args) { CaptureImage(image); };&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;image.MouseUp += &lt;span style="color: blue"&gt;delegate&lt;/span&gt;(&lt;span style="color: blue"&gt;object&lt;/span&gt; o, &lt;span style="color: #2b91af"&gt;MouseButtonEventArgs&lt;/span&gt; args) { ReleaseImage(image); };&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;View.DrawingArea.Children.Add(image);&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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; image;&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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; ReleaseImage(&lt;span style="color: #2b91af"&gt;Image&lt;/span&gt; image) &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;{ &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;image.ReleaseMouseCapture(); &lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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; CaptureImage(&lt;span style="color: #2b91af"&gt;Image&lt;/span&gt; image)&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;image.CaptureMouse();&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;_tmpPosition= View.MousePosition;&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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; MoveImage(&lt;span style="color: #2b91af"&gt;Image&lt;/span&gt; image)&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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; (&lt;span style="color: #2b91af"&gt;Mouse&lt;/span&gt;.LeftButton == &lt;span style="color: #2b91af"&gt;MouseButtonState&lt;/span&gt;.Pressed)&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;Canvas&lt;/span&gt;.SetLeft(image, &lt;span style="color: #2b91af"&gt;Canvas&lt;/span&gt;.GetLeft(image) + (View.MousePosition.X - _tmpPosition.X));&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: &amp;quot;Courier New&amp;quot;; 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;Canvas&lt;/span&gt;.SetTop(image, &lt;span style="color: #2b91af"&gt;Canvas&lt;/span&gt;.GetTop(image) + (View.MousePosition.Y - _tmpPosition.Y));&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;_tmpPosition= View.MousePosition;&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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; ZoomImage(&lt;span style="color: #2b91af"&gt;Image&lt;/span&gt; image, &lt;span style="color: blue"&gt;int&lt;/span&gt; amount)&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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; (amount &amp;gt; 0)&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;       &lt;/span&gt;image.Height += ZOOMDELTA;&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;       &lt;/span&gt;image.Width += ZOOMDELTA;&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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; ((image.Height - ZOOMDELTA &amp;gt; ZOOMDELTA) &amp;amp;&amp;amp; (image.Width - ZOOMDELTA &amp;gt; ZOOMDELTA))&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;         &lt;/span&gt;image.Height -= ZOOMDELTA;&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: en-gb"&gt;&lt;span style="mso-spacerun: yes"&gt;         &lt;/span&gt;image.Width -= ZOOMDELTA;&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&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 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;/span&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Il risultato ottenuto è raffigurato qua sotto: non vi dico quanto è stato divertente usare questa app per spiegare alla mia compagna la tattica del fuorigioco :D.     &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://img9.imageshack.us/img9/971/immagine1nst.jpg" target="_blank"&gt;&lt;img style="width: 218px; height: 113px" height="190" alt="" src="http://img9.imageshack.us/img9/971/immagine1nst.jpg" width="397" /&gt;&lt;/a&gt;   &lt;a href="http://img99.imageshack.us/img99/526/immagine2j.jpg" target="_blank"&gt;&lt;img style="width: 209px; height: 112px" height="172" alt="" src="http://img99.imageshack.us/img99/526/immagine2j.jpg" width="380" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p /&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:9003f381-bdb0-462c-b0cd-b70524b1dcbd" 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/MVP" rel="tag"&gt;MVP&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/95558.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/27/da-windowsforms-a-wpf-via-mvp.aspx</guid>
            <pubDate>Fri, 27 Feb 2009 18:43:19 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95558.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/27/da-windowsforms-a-wpf-via-mvp.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95558.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95558.aspx</trackback:ping>
        </item>
        <item>
            <title>[WCF] IOperationBehavior e IParameterInspector</title>
            <category>WCF</category>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/24/wcf-ioperationbehavior-e-iparameterinspector.aspx</link>
            <description>&lt;p&gt;Dal punto di vista della flessibilità, ritengo che WCF sia una delle tecnologie più potenti attualmente disponibili per lo sviluppo di applicazioni orientate ai servizi. In particolare, una delle caratteristiche che apprezzo maggiormente è la facilità di personalizzazione del comportamento runtime degli OperationContract sia client-side che service-side ( &lt;a target="_blank" href="http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/10/wcf-web-caching-con-wcf-rest-starter-kit.aspx"&gt;pratica&lt;/a&gt; per altro molto usata nel &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/netframework/cc950529.aspx"&gt;WCF REST Starter Kit&lt;/a&gt; :D ). &lt;br /&gt;
In questo post volevo soffermarmi proprio su questo aspetto, mostrando un semplice esempio di implementazione dell’interfaccia &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.servicemodel.description.ioperationbehavior.aspx"&gt;IOperationBehavior&lt;/a&gt;, che per l'appunto definisce quattro metodi finalizzati all'estensione del runtime behavior di un'operation: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.servicemodel.description.ioperationbehavior.addbindingparameters.aspx"&gt;AddBindingParameters &lt;/a&gt;: serve per aggiungere nuovi elementi di binding utilizzabili dall'operation in fase di esecuzione.  &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.servicemodel.description.ioperationbehavior.applyclientbehavior.aspx"&gt;ApplyClientBehavior &lt;/a&gt;: viene chiamato client-side 
    &lt;ul&gt;
        &lt;li&gt;prima che il contenuto della richiesta sia serializzato e inviato al service &lt;/li&gt;
        &lt;li&gt;dopo che la risposta è stata deserializzata ma prima che i valori restituiti vengano forniti al metodo proxy &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.servicemodel.description.ioperationbehavior.applydispatchbehavior.aspx"&gt;&lt;font color="#0033cc"&gt;ApplyDispatchBehavior&lt;/font&gt; &lt;/a&gt;: viene chiamato service-side dopo la deserializzazione dei parametri, ma prima che essi siano forniti all'operation del service. &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.servicemodel.description.ioperationbehavior.validate.aspx"&gt;&lt;font color="#0033cc"&gt;Validate&lt;/font&gt; &lt;/a&gt;: permette di verificare che l'operation soddisfi dei criteri custom ( es. autorizzazioni ). &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vediamo ora una semplice implementazione che mette in evidenza come sia veramente semplice agganciare un OperationBehavior ad un OperationContract  tramite un attributo. Gli ambiti di applicazione sono veramente tanti: ad esempio potremmo usare questa tecnica service-side per eseguire della logica custom prima e dopo l’invocazione di un’operation da parte di un client. Nello specifico, supponiamo di voler scrivere in un file di log sul server sia i parametri di input passati all'operation che il risultato dell'invocazione. Per ottenere questo scenario necessitiamo anzitutto della definizione di un oggetto che sia in grado di ispezionare i parametri dell'operation sia prima che dopo la chiamata: in altre parole abbiamo bisogno di un &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.servicemodel.dispatcher.iparameterinspector.aspx"&gt;IParameterInspector&lt;/a&gt;. Questa interfaccia definisce due metodi, &lt;em&gt;BeforeCall(…) &lt;/em&gt;e &lt;em&gt;AfterCall(…)&lt;/em&gt;&lt;em&gt;,&lt;/em&gt; che ci permettono di inserire della logica custom ( sempre sia client-side che service-side ) per accedere alle informazioni inerenti una operation ed i relativi parametri di input/output nelle fasi immediatamente precedenti e successive all’invocazione. &lt;br /&gt;
Partiamo dunque dal nostro IParameterInspector: &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: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ParameterLogInspector&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;IParameterInspector &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FileInfo&lt;/span&gt; _logFileInfo; &lt;br /&gt;
&lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ParameterLogInspector(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; fileName) &lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;_logFileInfo = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FileInfo&lt;/span&gt;(fileName); &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (!_logFileInfo.Exists) _logFileInfo.Create();&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: 'Courier New'; 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; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;#region&lt;/span&gt; &lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;IParameterInspector Members &lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; 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;object&lt;/span&gt; BeforeCall(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; operationName, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt;[] inputs) &lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: #2b91af"&gt;StringBuilder&lt;/span&gt; sb = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;StringBuilder&lt;/span&gt;(); &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; input &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; inputs) sb.AppendFormat(&lt;span style="COLOR: #a31515"&gt;"{0};"&lt;/span&gt;, input.ToString()); &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Log(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"Operation \"{0}\" is calling... inputs: {1}"&lt;/span&gt;, operationName, sb.ToString())); &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;}&lt;span style="mso-spacerun: yes"&gt;        &lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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; AfterCall(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; operationName, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt;[] outputs, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; returnValue, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; correlationState) &lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Log(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"Operation \"{0}\" called. returnValue: {1}"&lt;/span&gt;,operationName,returnValue.ToString()));&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: 'Courier New'; 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: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;#endregion &lt;br /&gt;
&lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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;void&lt;/span&gt; Log(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; message) &lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;using&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;StreamWriter&lt;/span&gt; sw = _logFileInfo.AppendText()) &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;sw.WriteLine(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"{0}&amp;gt; {1}"&lt;/span&gt;, &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt;.Now.ToString(), message)); &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;/span&gt;
&lt;p&gt;&lt;br /&gt;
Quindi, ci posizioniamo all'interno del metodo &lt;em&gt;ApplyDispatchBehavior(...)&lt;/em&gt; semplicemente per aggiungere il nostro &lt;em&gt;IParameterInspector&lt;/em&gt; alla collection &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.servicemodel.dispatcher.dispatchoperation.parameterinspectors.aspx"&gt;ParameterInspectors&lt;/a&gt; dell'oggetto &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/library/system.servicemodel.dispatcher.dispatchoperation.aspx"&gt;DispatchOperation&lt;/a&gt; (che rappresenta l'operation service-side) : &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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;font face="Trebuchet MS" color="#000000"&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;public class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ParametersLog&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;Attribute&lt;/span&gt;, &lt;span style="COLOR: #2b91af"&gt;IOperationBehavior &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; 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;string&lt;/span&gt; FileName { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; } &lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;#region&lt;/span&gt; &lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;IOperationBehavior Members &lt;br /&gt;
&lt;br /&gt;
  &lt;font color="#0000ff"&gt;... &lt;br /&gt;
&lt;/font&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; 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; ApplyDispatchBehavior(&lt;span style="COLOR: #2b91af"&gt;OperationDescription&lt;/span&gt; operationDescription, &lt;span style="COLOR: #2b91af"&gt;DispatchOperation&lt;/span&gt; dispatchOperation) &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;dispatchOperation.ParameterInspectors.Add(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ParameterLogInspector&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.FileName)); &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;br /&gt;
&lt;br /&gt;
  ... &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;br /&gt;
  &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#endregion &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Il gioco è fatto: non rimane che decorare l'OperationContract di interesse con il nostro attributo &lt;em&gt;ParametersLog &lt;/em&gt;per ottenere l' estensione del runtime che ad ogni chiamata scriverà in un file di log i valori dei parametri di input/output .&lt;br /&gt;
&lt;br /&gt;
&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;[&lt;span style="COLOR: #2b91af"&gt;ServiceContract&lt;/span&gt;] &lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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;interface&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IAuthentication &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;[&lt;span style="COLOR: #2b91af"&gt;OperationContract&lt;/span&gt;] &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;[&lt;span style="COLOR: #2b91af"&gt;ParametersLog&lt;/span&gt;(FileName=&lt;span style="COLOR: #a31515"&gt;"C:/log.txt"&lt;/span&gt;)] &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: #2b91af"&gt;UserInfo&lt;/span&gt; Login(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; userName, &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; password); &lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;[&lt;span style="COLOR: #2b91af"&gt;OperationContract&lt;/span&gt;] &lt;br /&gt;
  &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Logout(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; userName); &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:9003f381-bdb0-462c-b0cd-b70524b1dcbd" 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/WCF"&gt;WCF&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95538.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/24/wcf-ioperationbehavior-e-iparameterinspector.aspx</guid>
            <pubDate>Tue, 24 Feb 2009 14:02:08 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95538.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/24/wcf-ioperationbehavior-e-iparameterinspector.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95538.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95538.aspx</trackback:ping>
        </item>
        <item>
            <title>Pong con il designer WindowsForms</title>
            <category>About Me... 100% delirio!!!</category>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/21/pong-con-il-designer-windowsforms.aspx</link>
            <description>&lt;p&gt;Clamoroso :D   &lt;br /&gt;    &lt;br /&gt;&lt;a title="http://blogs.msdn.com/mitsu/archive/2009/02/13/coding4fun-understanding-winforms-designmode.aspx" href="http://blogs.msdn.com/mitsu/archive/2009/02/13/coding4fun-understanding-winforms-designmode.aspx"&gt;http://blogs.msdn.com/mitsu/archive/2009/02/13/coding4fun-understanding-winforms-designmode.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95526.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/21/pong-con-il-designer-windowsforms.aspx</guid>
            <pubDate>Sat, 21 Feb 2009 19:27:43 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95526.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/21/pong-con-il-designer-windowsforms.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95526.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95526.aspx</trackback:ping>
        </item>
        <item>
            <title>EntityObject e DTO: copiare propriet&amp;agrave; comuni via extension method</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/21/entityobject-e-dto-copiare-proprietagrave-comuni-via-extension-method.aspx</link>
            <description>&lt;p&gt;Quando si sviluppano architetture N-tier che prevedono uno o più service layer è sempre consigliabile l’utilizzo di &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Data_Transfer_Object"&gt;DTO&lt;/a&gt; per scambiare dati tra livelli, indipendentemente dal (fuorviante) fatto che ogni DataContract esposto da un servizio (es. WCF) possa essere in mapping 1:1 con i business objects (es. &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.data.objects.dataclasses.entityobject.aspx"&gt;EntityObject&lt;/a&gt;). Un DTO infatti è solitamente un &lt;a target="_blank" href="http://en.wikipedia.org/wiki/POCO"&gt;POCO&lt;/a&gt; le cui proprietà in molti casi si possono mappare sia nel nome che nel tipo in un sottoinsieme di quelle di uno o più oggetti di business. &lt;br /&gt;
Ad ogni modo, al fine di aumentare la produttività nel valorizzare un DTO che possiede proprietà in comune nel nome e nel tipo con uno o più EntityObject, può avere senso implementare un extension method che via reflection copi il valore delle proprietà di un oggetto sorgente nelle proprietà di un oggetto destinazione appunto qualora tali proprietà abbiano stesso nome e tipo. &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; FONT-FAMILY: 'Courier New'; 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;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; CopyProperties&amp;lt;T1, T2&amp;gt;(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt; T1 source, T2 destination) &lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;{&lt;span style="mso-spacerun: yes"&gt;            &lt;br /&gt;
   &lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (source == &lt;span style="COLOR: blue"&gt;null&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;ArgumentNullException&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;"Source object can’t be null."&lt;/span&gt;); &lt;/span&gt;&lt;br /&gt;
   &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (destination == &lt;span style="COLOR: blue"&gt;null&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;ArgumentNullException&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;"Destination object can’t be null."&lt;/span&gt;); &lt;br /&gt;
&lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: #2b91af"&gt;PropertyInfo&lt;/span&gt;[] destinationPropertyInfos = destination.GetType().GetProperties(); &lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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;PropertyInfo&lt;/span&gt; propertyInfo &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; destinationPropertyInfos) &lt;br /&gt;
   &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (propertyInfo.CanWrite) &lt;br /&gt;
     &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;source.GetType().GetProperties() &lt;br /&gt;
           &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;.Where(p =&amp;gt; p.CanRead &amp;amp;&amp;amp; (p.Name == propertyInfo.Name &amp;amp;&amp;amp; p.PropertyType == propertyInfo.PropertyType)) &lt;br /&gt;
           &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;.ToList() &lt;br /&gt;
           &lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;.ForEach(p =&amp;gt; propertyInfo.SetValue(destination, p.GetValue(source, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;), &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)); &lt;br /&gt;
     &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;} &lt;br /&gt;
   &lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;} &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Quindi, supponendo di avere il seguente object model di partenza... &lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" src="http://img3.imageshack.us/img3/2646/immagineys5.jpg" /&gt;  &lt;br /&gt;
&lt;br /&gt;
...è possibile scrivere qualcosa del genere, al fine di evitare la noiosa scrittura delle solite righe di inizializzazione della classe DTO partendo dall’ Entity Objecy: &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: #2b91af; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;Customer&lt;/span&gt; &lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;customerEntity = &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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="COLOR: blue"&gt;using&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;NorthwindEntities&lt;/span&gt; entities = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;NorthwindEntities&lt;/span&gt;()) &lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;customerEntity = entities.Customers.First(c =&amp;gt; c.CustomerID == &lt;span style="COLOR: #a31515"&gt;"ALFKI"&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: 'Courier New'; mso-no-proof: yes"&gt;} &lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="COLOR: #2b91af"&gt;CustomerDTO&lt;/span&gt; customerDTO = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;CustomerDTO&lt;/span&gt;(); &lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;customerEntity.CopyProperties(customerDTO);&lt;span style="mso-spacerun: yes"&gt;     &lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:86f25882-da86-49e9-b85c-d6e67c1960d9" 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/Reflection"&gt;Reflection&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Extension+Method"&gt;Extension Method&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95521.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/21/entityobject-e-dto-copiare-proprietagrave-comuni-via-extension-method.aspx</guid>
            <pubDate>Sat, 21 Feb 2009 00:33:29 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95521.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/21/entityobject-e-dto-copiare-proprietagrave-comuni-via-extension-method.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95521.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95521.aspx</trackback:ping>
        </item>
        <item>
            <title>[Entity Framework] EntityClient</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/16/entity-framework-entityclient.aspx</link>
            <description>&lt;p&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/bb738561.aspx"&gt;EntityClient&lt;/a&gt; (namespace &lt;em&gt;System.Data.EntityClient&lt;/em&gt;) è un provider che l’EntityFramework mette a disposizione per accedere ai dati descritti da unEntity Data Model (EDM), ovvero una sorta di gateway per query&lt;em&gt; &lt;/em&gt;sul modello concettuale e non sulla relativa rappresentazione fisica.  &lt;br /&gt;
Le query invocabili dall’ EntityClient vanno dunque scritte in un dialetto di SQL chiamato “EntitySQL”: a runtime, la pipeline compila il testo EntitySQL in un command tree che viene passato al data provider sottostante per la generazione del comando SQL nativo. Dietro le quinte, infatti, EntityClient utilizza i provider ADO.NET per accedere alle sorgenti dati ( es. SqlClient per SQL Server ).  L’aspetto interessante è che i risultati di una query EntitySQL possono non limitarsi a semplici tabelle, bensì possono contenere anche gerarchie complesse. &lt;br /&gt;
In generale, l’uso di EntityClient è consigliabile in applicazioni model-based che richiedono particolari performance nella misura in cui non si necessita della materializzazione delle Entities a partire da resultset, bensì di un IDataReader consumabile direttamente magari per materializzazioni di oggetti specifici. &lt;br /&gt;
In qualità di provider ADO.NET a tutti gli effetti, EntityClient segue i soliti pattern Connection-Command-Parameter-DataReader, etc. dove le suddette classi sono precedute dal prefisso “Entity”. Ecco un esempio di paginazione dati usando EntityClient: &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 style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;public&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: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&amp;gt; GetProductNames(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; pageNumber, &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; pageSize) &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: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&amp;gt; productNames = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&amp;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;using&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;EntityConnection&lt;/span&gt; conn = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;EntityConnection&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;"name=NorthwindEntities"&lt;/span&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;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;string&lt;/span&gt; cmdText = &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"SELECT VALUE v FROM NorthwindEntities.Products AS v ORDER BY v.ProductName SKIP {0} LIMIT {1}"&lt;/span&gt;, (pageNumber * pageSize).ToString(), pageSize);&lt;span style="mso-spacerun: yes"&gt;                   &lt;br /&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;span style="COLOR: blue"&gt;using&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;EntityCommand&lt;/span&gt; cmd = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;EntityCommand&lt;/span&gt;(cmdText, conn)) &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;conn.Open();&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;span style="COLOR: blue"&gt;using&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;EntityDataReader&lt;/span&gt; reader = cmd.ExecuteReader(&lt;span style="COLOR: #2b91af"&gt;CommandBehavior&lt;/span&gt;.SequentialAccess))&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="COLOR: blue"&gt;while&lt;/span&gt; (reader.Read()) productNames.Add(reader[&lt;span style="COLOR: #a31515"&gt;"ProductName"&lt;/span&gt;].ToString()); &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;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;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; productNames; &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;p&gt; &lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e1600ca7-4fa8-4d3a-9aa2-d1c6cbca33cb" 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/Entity+Framework"&gt;Entity Framework&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95481.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/16/entity-framework-entityclient.aspx</guid>
            <pubDate>Sun, 15 Feb 2009 23:03:52 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95481.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/16/entity-framework-entityclient.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95481.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95481.aspx</trackback:ping>
        </item>
        <item>
            <title>Caricamento dinamico di JavaScript con jQuery AJAX</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/13/caricamento-dinamico-di-javascript-con-jquery-ajax.aspx</link>
            <description>&lt;p&gt;Una delle tecniche che permettono di aumentare le performance di un' applicazione web si basa sul caricamento "on-demand" di javascript via Ajax. In questo modo si possono ridurre le latenze di precaricamento di troppe librerie javascript alla prima GET di una pagina. Infatti, in alcuni scenari specifici risulta più consigliabile scaricare "pezzi" di script solo quando se ne ha bisogno. Fino a non molto tempo fa ho avuto modo di testare alcune librerie free come &lt;a target="_blank" href="http://javascriptmvc.com/learningcenter/include/index.html"&gt;Include&lt;/a&gt; e &lt;a target="_blank" href="http://ajile.iskitz.com/"&gt;AJILE&lt;/a&gt; che permettono di raggiungere questo obiettivo senza troppi problemi. Ma da quando sono passato a &lt;a target="_blank" href="http://jquery.com/"&gt;jQuery&lt;/a&gt; le cose sono cambiate :D.&lt;br /&gt;
Vorrei semplicemente mostrare un paragone tra l'utilizzo classico di XMLHTTP e l'utilizzo di &lt;a target="_blank" href="http://docs.jquery.com/Ajax/jQuery.getScript"&gt;Ajax/jQuery.getScript&lt;/a&gt;. &lt;br /&gt;
Supponiamo di voler caricare dinamicamente ed eseguire una function javascript "HelloWorld()"che si trova in un file HelloWorld.js &lt;/p&gt;
&lt;font color="#0000ff" size="1"&gt;&lt;font color="#0000ff" size="1"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;function&lt;/span&gt; &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;HelloWorld() { alert(&lt;/font&gt; &lt;span style="COLOR: #a31515"&gt;'Hello World!'&lt;/span&gt; &lt;font color="#000000"&gt;); }&lt;/font&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;br /&gt;
al click di un button nella nostra pagina.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;1. Esempio con XMLHTTP&lt;/em&gt; &lt;/strong&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;DOCTYPE&lt;/span&gt; &lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="COLOR: red"&gt;html&lt;/span&gt; &lt;span style="COLOR: red"&gt;PUBLIC&lt;/span&gt; &lt;span style="COLOR: blue"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span style="COLOR: blue"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;html&lt;/span&gt; &lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt; &lt;span style="COLOR: blue"&gt;="http://www.w3.org/1999/xhtml"&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;head&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&lt;/span&gt; &lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;script&lt;/span&gt; &lt;span style="COLOR: red"&gt;type&lt;/span&gt; &lt;span style="COLOR: blue"&gt;="text/javascript"&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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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;function&lt;/span&gt; CallExternalScriptMethod(scriptUrl, targetCall) &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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;var&lt;/span&gt; &lt;st1:city w:st="on"&gt;&lt;st1:place w:st="on"&gt;AJAX&lt;/st1:place&gt; &lt;/st1:city&gt;= &lt;span style="COLOR: blue"&gt;null&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: &amp;quot;Courier New&amp;quot;; 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; (window.XMLHttpRequest) &lt;st1:city w:st="on"&gt;&lt;st1:place w:st="on"&gt;AJAX&lt;/st1:place&gt; &lt;/st1:city&gt;= &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; XMLHttpRequest();&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: &amp;quot;Courier New&amp;quot;; 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; &lt;st1:city w:st="on"&gt;&lt;st1:place w:st="on"&gt;AJAX&lt;/st1:place&gt; &lt;/st1:city&gt;= &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; ActiveXObject(&lt;span style="COLOR: #a31515"&gt;"Microsoft.XMLHTTP"&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;AJAX.onreadystatechange = &lt;span style="COLOR: blue"&gt;function&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: &amp;quot;Courier New&amp;quot;; 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; (AJAX.readyState == 4 &amp;amp;&amp;amp; AJAX.status == 200) {&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;                &lt;/span&gt;eval(AJAX.responseText);&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;                &lt;/span&gt;eval(targetCall);&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;AJAX.open(&lt;span style="COLOR: #a31515"&gt;"GET"&lt;/span&gt;, scriptUrl, &lt;span style="COLOR: blue"&gt;true&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;AJAX.send(&lt;span style="COLOR: blue"&gt;null&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: &amp;quot;Courier New&amp;quot;; 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; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;script&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;title&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;title&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;head&lt;/span&gt; &lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;body&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;div&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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;input&lt;/span&gt; &lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="button"&lt;/span&gt; &lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="btnGO"&lt;/span&gt; &lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="GO!!!"&lt;/span&gt; &lt;br /&gt;
              &lt;span style="COLOR: red"&gt;onclick&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="CallExternalScriptMethod('HelloWorld.js','HelloWorld()')"&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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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: &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;div&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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&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 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;body&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;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; 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;html&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;o:p /&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;br /&gt;
2. Esempio con Ajax/jQuery.getScript&lt;/strong&gt; &lt;/em&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;DOCTYPE&lt;/span&gt; &lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="COLOR: red"&gt;html&lt;/span&gt; &lt;span style="COLOR: red"&gt;PUBLIC&lt;/span&gt; &lt;span style="COLOR: blue"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span style="COLOR: blue"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;html&lt;/span&gt; &lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt; &lt;span style="COLOR: blue"&gt;="http://www.w3.org/1999/xhtml"&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;head&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;script&lt;/span&gt; &lt;span style="COLOR: red"&gt;type&lt;/span&gt; &lt;span style="COLOR: blue"&gt;="text/javascript"&lt;/span&gt; &lt;span style="COLOR: red"&gt;src&lt;/span&gt; &lt;span style="COLOR: blue"&gt;="http://code.jquery.com/jquery-latest.js"&amp;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;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: &amp;quot;Courier New&amp;quot;; 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;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;script&lt;/span&gt; &lt;span style="COLOR: red"&gt;type&lt;/span&gt; &lt;span style="COLOR: blue"&gt;="text/javascript"&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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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;function&lt;/span&gt; CallExternalScriptMethod(scriptUrl, targetCall) &lt;br /&gt;
        {&lt;o:p /&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;$.getScript(scriptUrl, &lt;span style="COLOR: blue"&gt;function&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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;&lt;span style="mso-spacerun: yes"&gt;                    &lt;/span&gt;eval(targetCall);&lt;o:p /&gt; &lt;br /&gt;
            &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;});&lt;o:p /&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;script&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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;title&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;title&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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;head&lt;/span&gt; &lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; 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: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-ansi-language: EN-GB"&gt;body&lt;/span&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;div&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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;input&lt;/span&gt; &lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="button"&lt;/span&gt; &lt;span style="COLOR: red"&gt;id&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="btnGO"&lt;/span&gt; &lt;span style="COLOR: red"&gt;value&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="GO!!!"&lt;/span&gt; &lt;br /&gt;
               &lt;span style="COLOR: red"&gt;onclick&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="CallExternalScriptMethod('HelloWorld.js','HelloWorld()')"&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; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; 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: &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;div&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;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; 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;body&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;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; 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;html&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;o:p /&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Come si può notare la facilità e l'eleganza di realizzazione con jQuery è disarmante. Inoltre, a partire dalla v1.2 abbiamo gratuitamente un nuovo enanchement riguardante le possibili problematiche relative a richieste cross-domain che limiterebbero l'utilizzo dell'esempio con XMLHTTP sopra riportato:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Before jQuery 1.2, getScript was only able to load scripts from the same domain as the original page. As of 1.2, you can now load JavaScript files from any domain. &lt;/p&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3e259f3a-8328-438b-9c46-85ad992f22e6" 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/Ajax"&gt;Ajax&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/jQuery"&gt;jQuery&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95467.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/13/caricamento-dinamico-di-javascript-con-jquery-ajax.aspx</guid>
            <pubDate>Fri, 13 Feb 2009 15:30:28 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95467.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/13/caricamento-dinamico-di-javascript-con-jquery-ajax.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95467.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95467.aspx</trackback:ping>
        </item>
        <item>
            <title>XPUG Marche.... Chi è interessato?</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/10/xpug-marche.-chi-e-interessato.aspx</link>
            <description>&lt;p&gt;Segnalo questa importante iniziativa che sta partendo su &lt;font face="Arial"&gt;&lt;a target="_blank" href="http://www.agilemovement.it"&gt;agilemovement.it&lt;/a&gt; : &lt;strong&gt;XPUG Marche&lt;/strong&gt;.&lt;br /&gt;
Lo scopo è la creazione di una community attenta nel promuovere le metodologie "agili" sul territorio marchigiano.  &lt;br /&gt;
C&lt;/font&gt;hi è interessato a dare il proprio contributo può rispondere a questo appello:&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;a target="_blank" href="http://www.agilemovement.it/forum/topics/xpug-marche-chi-e-interessato"&gt;http://www.agilemovement.it/forum/topics/xpug-marche-chi-e-interessato&lt;/a&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
Per ora ci stiamo contando in modo da &lt;strong&gt;organizzare un incontro prima possibile&lt;/strong&gt; , per decidere sul da farsi. &lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95441.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/10/xpug-marche.-chi-e-interessato.aspx</guid>
            <pubDate>Tue, 10 Feb 2009 15:57:46 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95441.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/10/xpug-marche.-chi-e-interessato.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95441.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95441.aspx</trackback:ping>
        </item>
        <item>
            <title>[WCF] Operazioni asincrone client-side</title>
            <category>WCF</category>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/09/wcf-operazioni-asincrone-client-side.aspx</link>
            <description>&lt;p&gt;WCF è un framework concepito per sviluppare scenari di comunicazione completamente disaccoppiati sotto ogni punto di vista. In particolare, per quanto riguarda la sincronizzazione dei messaggi, è prevista internamente una rigida implementazione di pattern asincroni per ottenere chiamate non bloccanti tra i vari livelli strutturali. Esternamente, invece, WCF espone possibilità di programmazione asincrona sia client-side che server-side. L'aspetto interessante da approfondire in merito è come il programming model asincrono client-side non abbia nulla a che vedere con quello server-side: ovvero, un client può sostanzialmente invocare in modo asincrono un servizio indipendentemente dal fatto che esso sia implementato con un pattern sincrono piuttosto che asincrono.    &lt;br /&gt;Il disaccoppiamento avviene infatti a livello di trasporto quando i dati vengono serializzati/deserializzati.     &lt;br /&gt;Per capire l’importanza di tale feature pensiamo semplicemente ad un’ architettura N-tier che poggia su WCF: potremmo avere diverse “operation” che a loro volta utilizzano proxy client verso altre operation WCF, rendendo vitale l’utilizzo di pattern di comunicazione asincroni.  &lt;br /&gt;Vediamo un semplice esempio. Supponiamo di avere il seguente ServiceContract:     &lt;br /&gt;    &lt;br /&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;ServiceContract&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;interface&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IAuthentication       &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;/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;OperationContract&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: #2b91af"&gt;UserInfo&lt;/span&gt; Login(&lt;span style="color: blue"&gt;string&lt;/span&gt; username, &lt;span style="color: blue"&gt;string&lt;/span&gt; password);&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: #2b91af"&gt;OperationContract&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;void&lt;/span&gt; Logout(&lt;span style="color: blue"&gt;string&lt;/span&gt; username);      &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;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Se lato client utilizzassimo &lt;a href="http://msdn.microsoft.com/en-us/library/aa347733.aspx" target="_blank"&gt;Svcutil&lt;/a&gt; ( con gli opportuni parametri ) o il solito “Add Service Reference” di VisualStudio, otterremmo la generazione automatica del seguente object model:    &lt;br /&gt;    &lt;br /&gt;&lt;img src="http://img4.imageshack.us/img4/4205/asyncpn6.jpg" /&gt;  &lt;br /&gt;    &lt;br /&gt;Come si può osservare abbiamo una versione asincrona client-side del ServiceContract &lt;em&gt;(IAuthentication)&lt;/em&gt;, un' interfaccia &lt;em&gt;&amp;lt;ServiceContract&amp;gt;Channel&lt;/em&gt; (&lt;em&gt;IAuthenticationChannel&lt;/em&gt;) ed una classe Client (&lt;em&gt;AuthenticationClient&lt;/em&gt;) che espone metodi di invocazione sia asincroni che sincroni. Nello specifico, si prospettano due possibili modalità di invocazione asincrona client-side di un’ operation: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;1. Invocazione asincrona “event-based” (o “event-driven”)&lt;/em&gt;&lt;/strong&gt;  &lt;br /&gt;E' la modalità più semplice e raccomandata poiché richede solamente l’aggiunta di un EventHandler per ricevere una notifica all’occorrenza di una risposta. Questa modalità ( disponibile solo nel framework 3.5 e comunque solo per questo tipo di invocazione ) permette di sfruttare l’approccio asincrono event-based tramite un metodo nella forma &amp;lt;&lt;i&gt;operationName&lt;/i&gt;&amp;gt;&lt;em&gt;Async &lt;/em&gt;e l’intercettazione di un evento &amp;lt;&lt;i&gt;operationName&lt;/i&gt;&amp;gt;&lt;em&gt;Completed &lt;/em&gt;al cui interno si ha accesso al risultato dell’invocazione &amp;lt;&lt;i&gt;operationName&lt;/i&gt;&amp;gt;&lt;em&gt;CompletedEventArgs.&lt;/em&gt;    &lt;br /&gt;    &lt;br /&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;ServiceReference.&lt;span style="color: #2b91af"&gt;AuthenticationClient&lt;/span&gt; client = &lt;span style="color: blue"&gt;new&lt;/span&gt; ServiceReference.&lt;span style="color: #2b91af"&gt;AuthenticationClient&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;client.&lt;strong&gt;LoginCompleted&lt;/strong&gt; += &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;ServiceReference.&lt;span style="color: #2b91af"&gt;LoginCompletedEventArgs&lt;/span&gt;&amp;gt;(client_LoginCompleted);      &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;client.&lt;strong&gt;LoginAsync&lt;/strong&gt;(&lt;span style="color: #a31515"&gt;"dario.santarelli"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"password"&lt;/span&gt;);      &lt;br /&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: #2b91af"&gt;Console&lt;/span&gt;.ReadLine();      &lt;br /&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;client.Close();     &lt;br /&gt;      &lt;br /&gt;...&lt;/span&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;protected&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;void&lt;/span&gt; client_LoginCompleted(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, ServiceReference.&lt;span style="color: #2b91af"&gt;LoginCompletedEventArgs&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-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;UserInfo&lt;/span&gt; info = e.Result &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;UserInfo&lt;/span&gt;;      &lt;br /&gt;  &lt;/span&gt;&lt;span style="font-size: 8pt; color: #2b91af; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Console&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;.WriteLine(&lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"UserName: {0} - Password: {1}"&lt;/span&gt;,info.UserName,info.Email));      &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;span lang="EN-US" style="mso-ansi-language: en-us"&gt;     &lt;p /&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;2. Invocazione asincrona via ChannelFactory&lt;/em&gt;&lt;/strong&gt;    &lt;br /&gt;Il pattern asincrono previsto in questa modalità è quello classico previsto a partire dal framework 1.1: tramite lo split di un operation in due metodi ( &lt;em&gt;Begin&amp;lt;operationName&amp;gt;&lt;/em&gt; e &lt;em&gt;End&amp;lt;operationName&amp;gt; ), &lt;/em&gt;si sfruttano oggetti che implementano l’interfaccia &lt;a href="http://msdn.microsoft.com/en-us/library/system.iasyncresult.aspx" target="_blank"&gt;System.IAsyncResult&lt;/a&gt; per rappresentare lo stato di una operazione asincrona.&lt;/p&gt;  &lt;p&gt;...   &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: #2b91af; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;EndpointAddress&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; endpointAddress = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"http://.../AuthenticationService.svc"&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;ServiceReference.&lt;span style="color: #2b91af"&gt;IAuthenticationChannel&lt;/span&gt; channelClient = &lt;span style="color: #2b91af"&gt;ChannelFactory&lt;/span&gt;&amp;lt;ServiceReference.&lt;span style="color: #2b91af"&gt;IAuthenticationChannel&lt;/span&gt;&amp;gt;.CreateChannel(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BasicHttpBinding&lt;/span&gt;(), endpointAddress);      &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;IAsyncResult&lt;/span&gt; result = channelClient.&lt;strong&gt;BeginLogin&lt;/strong&gt;(&lt;span style="color: #a31515"&gt;"dario.santarelli"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"password"&lt;/span&gt;, LoginCallBack, channelClient);      &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;Console&lt;/span&gt;.ReadLine();      &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;channelClient.Close();     &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;channelClient.Dispose();     &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="mso-spacerun: yes"&gt;       &lt;br /&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;protected&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; LoginCallBack(&lt;span style="color: #2b91af"&gt;IAsyncResult&lt;/span&gt; ar)      &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;UserInfo&lt;/span&gt; result = ((ServiceReference.&lt;span style="color: #2b91af"&gt;IAuthenticationChannel&lt;/span&gt;)ar.AsyncState).&lt;strong&gt;EndLogin&lt;/strong&gt;(ar);      &lt;br /&gt;  &lt;/span&gt;&lt;span style="font-size: 8pt; color: #2b91af; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;Console&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"Result: {0}"&lt;/span&gt;, result.UserName);      &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;span lang="EN-US" style="mso-ansi-language: en-us"&gt;     &lt;p /&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;&lt;em&gt;Conclusioni&lt;/em&gt;&lt;/strong&gt;    &lt;br /&gt;In entrambe le soluzioni presentate, una nostra application può invocare un’operazione in maniera asincrona anche se il servizio è implementato in maniera sincrona, allo stesso modo con cui una applicazione può usare lo stesso pattern per invocare in maniera asincrona un metodo sincrono locale. “Come” è poi implementato l’ OperationContract è assolutamente insignificante per il client.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Risorse MSDN:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms734701.aspx" target="_blank"&gt;Synchronous and Asynchronous Operations&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms730059.aspx" target="_blank"&gt;How to: Call WCF Service Operations Asynchronously&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb885132.aspx" target="_blank"&gt;How to: Call Operations Asynchronously Using a Channel Factory&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3e259f3a-8328-438b-9c46-85ad992f22e6" 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/WCF" rel="tag"&gt;WCF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Async" rel="tag"&gt;Async&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95433.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/09/wcf-operazioni-asincrone-client-side.aspx</guid>
            <pubDate>Mon, 09 Feb 2009 22:24:15 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95433.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/09/wcf-operazioni-asincrone-client-side.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95433.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95433.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Studio Testing Extensions</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/03/visual-studio-testing-extensions.aspx</link>
            <description>&lt;p&gt;Segnalo il progetto “&lt;a href="http://www.codeplex.com/vstestingextensions" target="_blank"&gt;Visual Studio Testing Extensions&lt;/a&gt;” su CodePlex. Si tratta di una library concepita principalmente per migliorare la creazione di UnitTest nell’ambiente di Testing di Visual Studio. In breve, la library introduce due feature:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;La possibilità di &lt;strong&gt;migliorare sensibilmente la&lt;/strong&gt; &lt;strong&gt;leggibilità&lt;/strong&gt; di uno unit test grazie all’introduzione di opportuni extension methods ( es. &lt;em&gt;myInt.ShouldEqual(5);&lt;/em&gt;   invece di  &lt;em&gt;Assert.AreEqual(&lt;em&gt;myInt&lt;/em&gt;, 5);&lt;/em&gt; )&lt;/li&gt;    &lt;li&gt;La possibilità di &lt;strong&gt;asserire&lt;/strong&gt; &lt;strong&gt;exception multiple&lt;/strong&gt; nei risultati attesi di un singolo TestMethod. Il tutto sfruttando un delegate Action(). Ad esempio:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;em&gt;Testing.ShouldThrowException&amp;lt;ArgumentNullException&amp;gt;(() =&amp;gt; { … something throws ArgumentNullException … });&lt;/em&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6c1bae6d-15b1-41a8-ab4e-cc5e7cb68c39" 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/UnitTest" rel="tag"&gt;UnitTest&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95378.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/03/visual-studio-testing-extensions.aspx</guid>
            <pubDate>Tue, 03 Feb 2009 19:22:57 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95378.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/02/03/visual-studio-testing-extensions.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95378.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95378.aspx</trackback:ping>
        </item>
        <item>
            <title>[WCF] Esempio di Integration Test</title>
            <category>WCF</category>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/31/wcf-esempio-di-integration-test.aspx</link>
            <description>&lt;p&gt;Esistono molti strumenti e tecniche per effettuare un &lt;a href="http://en.wikipedia.org/wiki/Integration_testing" target="_blank"&gt;integration test&lt;/a&gt; di servizi WCF. Un modo che ho trovato molto semplice ed utile si ottiene sruttando il framework di unit testing di Visual Studio: infatti, utilizzando due metodi decorati rispettivamente con &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.classinitializeattribute(VS.80).aspx" target="_blank"&gt;ClassInitialize&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.classcleanupattribute(VS.80).aspx" target="_blank"&gt;ClassCleanup&lt;/a&gt; possiamo gestire il ciclo di vita di un ServiceHost, evitando così il deploy preventivo (es. Cassini, IIS etc.) del servizio.     &lt;br /&gt;Nel seguente esempio viene mostrata questa tecnica supponendo di voler testare un servizio di autenticazione &lt;em&gt;AuthenticationService&lt;/em&gt; che implementa un service contract &lt;em&gt;IAuthentication,&lt;/em&gt; il quale definisce due metodi: Login(…) e Logout().     &lt;br /&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;&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;TestClass&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;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;AuthenticationUnitTest        &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: blue"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ServiceHost&lt;/span&gt; _serviceHost;       &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;static&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _address = &lt;span style="color: #a31515"&gt;"AuthenticationService"&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;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _baseAddress = &lt;span style="color: #a31515"&gt;"http://127.0.0.1:5656/"&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 style="color: #2b91af"&gt;ClassInitialize&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;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ServiceHostInitialize(&lt;span style="color: #2b91af"&gt;TestContext&lt;/span&gt; testContext)       &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;_serviceHost = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ServiceHost&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;AuthenticationService&lt;/span&gt;), &lt;span style="color: blue"&gt;new&lt;/span&gt;[] { &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(_baseAddress) });       &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;_serviceHost.AddServiceEndpoint(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;IAuthentication&lt;/span&gt;), &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WSHttpBinding&lt;/span&gt;(), _address);       &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;_serviceHost.Open();      &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: #2b91af"&gt;ClassCleanup&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;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ServiceHostCleanup() { _serviceHost.Close(); }       &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: #2b91af"&gt;TestMethod&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;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; AuthenticateUser()       &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;string&lt;/span&gt; userName = &lt;span style="color: #a31515"&gt;"dario.santarelli"&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;span style="color: blue"&gt;string&lt;/span&gt; password = &lt;span style="color: #a31515"&gt;"password"&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-no-proof: yes; mso-ansi-language: en-us"&gt;&lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt; endpointAddress = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"{0}{1}"&lt;/span&gt;, _baseAddress,_address));       &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;IAuthentication&lt;/span&gt; proxy = &lt;span style="color: #2b91af"&gt;ChannelFactory&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;IAuthentication&lt;/span&gt;&amp;gt;.CreateChannel(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WSHttpBinding&lt;/span&gt;(), endpointAddress);       &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: #2b91af"&gt;UserInfo&lt;/span&gt; userInfo = proxy.Login(userName, password);       &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: #2b91af"&gt;Assert&lt;/span&gt;.IsNotNull(userInfo);       &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;Assert&lt;/span&gt;.AreEqual(userInfo.Username, userName);       &lt;br /&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;proxy.Logout(userName);&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;/span&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt;: con questa tecnica non si intende sostituire il test in ambiente di produzione, bensì fornire un modo “base” per verificare il funzionamento di una WCF Service Library. Infatti, come si può notare, in questo caso sia lo UnitTest che il ServiceHost girano nello stesso AppDomain, il che NON garantisce by design il corretto comportamento del test come se fosse in produzione. Per avere test maggiormente efficaci, si consiglia l’utilizzo di soluzioni più “evolute” come &lt;a href="http://msdn.microsoft.com/en-us/library/bb552363.aspx" target="_blank"&gt;WcfSvcHost&lt;/a&gt; o, meglio, direttamente un ambiente di test dedicato su IIS :D.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;    &lt;/p&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8c99e46d-5b0e-4b82-a844-c7763f7d5abe" 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/WCF" rel="tag"&gt;WCF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Testing" rel="tag"&gt;Testing&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95355.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/31/wcf-esempio-di-integration-test.aspx</guid>
            <pubDate>Sat, 31 Jan 2009 15:22:29 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95355.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/31/wcf-esempio-di-integration-test.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95355.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95355.aspx</trackback:ping>
        </item>
        <item>
            <title>Interazione tra Javascript e Silverlight: un password checker</title>
            <category>Silverlight</category>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/27/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/27/interazione-tra-javascript-e-silverlight-un-password-checker.aspx</guid>
            <pubDate>Tue, 27 Jan 2009 22:20:08 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95318.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/27/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>[OT] TagGalaxy</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/26/ot-taggalaxy.aspx</link>
            <description>&lt;p&gt;Per gli amanti di &lt;a target="_blank" href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt; segnalo &lt;strong&gt;TagGalaxy:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font face="Arial"&gt;&lt;a target="_blank" href="http://www.taggalaxy.com/"&gt;http://www.taggalaxy.com/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Merita veramente :D&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95303.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/26/ot-taggalaxy.aspx</guid>
            <pubDate>Mon, 26 Jan 2009 16:15:58 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95303.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/26/ot-taggalaxy.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95303.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95303.aspx</trackback:ping>
        </item>
        <item>
            <title>[Silverlight 2] Simulare una MasterPage</title>
            <category>Silverlight</category>
            <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 13:58:32 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95273.aspx</wfw:comment>
            <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>jQuery 1.3 released!</title>
            <link>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/15/jquery-1.3-released.aspx</link>
            <description>&lt;p&gt;Per gli amanti di jQuery ( che proprio ieri ha compiuto il terzo anno di vita :D ) segnalo questo interessante &lt;a href="http://weblogs.asp.net/erwingriekspoor/archive/2009/01/15/new-jquery-release-version-1-3.aspx" target="_blank"&gt;&lt;strong&gt;post&lt;/strong&gt;&lt;/a&gt; che mette in evidenza non solo le principali feature della &lt;strong&gt;nuova release 1.3&lt;/strong&gt;, ma soprattutto il lavoro che è stato dedicato al miglioramento delle performance per i browser più utilizzati. &lt;/p&gt;  &lt;p&gt;Degna di nota è l’introduzione del nuovo &lt;a href="http://api.jquery.com/" target="_blank"&gt;API browser&lt;/a&gt; disponibile per Safari, Firefox 3 e IE7, scaricabile ed utilizzabile offline come una applicazione Adobe AIR. &lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5736a57c-a573-465e-8260-59b885cb959c" 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/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dsantarelli/aggbug/95210.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/15/jquery-1.3-released.aspx</guid>
            <pubDate>Thu, 15 Jan 2009 18:23:43 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsantarelli/comments/95210.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsantarelli/archive/2009/01/15/jquery-1.3-released.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsantarelli/comments/commentRss/95210.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsantarelli/services/trackbacks/95210.aspx</trackback:ping>
        </item>
    </channel>
</rss>
