<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de Nico-pyright(c) &#187; Silverlight</title>
	<atom:link href="https://blog.developpez.com/nico-pyright/pcategory/silverlight/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/nico-pyright</link>
	<description></description>
	<lastBuildDate>Mon, 08 Apr 2013 09:26:35 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Retour d’expérience sur MVVM</title>
		<link>https://blog.developpez.com/nico-pyright/p10065/silverlight/retour_d_experience_sur_mvvm</link>
		<comments>https://blog.developpez.com/nico-pyright/p10065/silverlight/retour_d_experience_sur_mvvm#comments</comments>
		<pubDate>Thu, 16 Jun 2011 23:00:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J’ai lu il y a quelques temps un billet d’Olivier Dahan où, par un titre accrocheur, il proposait son retour d’expérience sur MVVM en proposant de bruler le pattern (voir http://www.e-naxos.com/Blog/post/2011/05/20/Faut-il-bruler-la-pattern-MVVM-.aspx) Comme ca fait quelques temps que je n’ai pas écrit de billet et que j’ai envie de partager mon expérience sur le sujet, j’en profite Je suis globalement d’accord avec lui, respecter tout MVVM n’est pas forcément toujours judicieux. Il faut l’adapter aux besoins [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J’ai lu il y a quelques temps un billet d’Olivier Dahan où, par un titre accrocheur, il proposait son retour d’expérience sur MVVM en proposant de bruler le pattern (voir <a href="http://www.e-naxos.com/Blog/post/2011/05/20/Faut-il-bruler-la-pattern-MVVM-.aspx">http://www.e-naxos.com/Blog/post/2011/05/20/Faut-il-bruler-la-pattern-MVVM-.aspx</a>)</p>
<p>Comme ca fait quelques temps que je n’ai pas écrit de billet et que j’ai envie de partager mon expérience sur le sujet, j’en profite <img src="https://blog.developpez.com/nico-pyright/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Je suis globalement d’accord avec lui, respecter tout MVVM n’est pas forcément toujours judicieux. Il faut l’adapter aux besoins de l’application.</p>
<p>En général, j’adapte mon utilisation de MVVM en fonction de l’application que je crée. Par contre, aujourd’hui, je ne concevrai pas de créer une application sans MVVM.</p>
<p>Je trouve que le découplage est beaucoup plus clair et j’ai remarqué pour ma part que j’écris plus rapidement mon application en utilisant un viewmodel qu’en utilisant le code behind. De même, un ressenti totalement subjectif et pifométrique me fait trouver que je fais moins de bugs.</p>
<p>Donc, une application sans mvvm ? non. Maintenant que j’y ai gouté, je ne peux plus m’en passer. Par contre, suivant l’application, je respecte plus ou moins le pattern.</p>
<p>Je trouve qu’un des valeurs ajoutées du pattern est qu’il force à utiliser le mécanisme de binding. Il est trop tentant (pour aller vite) de faire du monTextBlock.Text = “…”. </p>
<p>Pour moi ca n’apporte rien, à part des bugs <img src="https://blog.developpez.com/nico-pyright/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>J’ai vu trop de gens ne rien comprendre au binding et c’est bien dommage. Donc oui au binding, forcé par mvvm.</p>
<p>Je suis d’accord qu’on peut se demander vraiment l’utilité d’un locator et en général, pour une petite application rapide, je ne m’en sers pas. Par contre, je rajoute dès que possible l’utilisation des commandes, notamment grâce à la classe RelayCommand qu’on trouve dans MVVM-Light.</p>
<p>Il est vrai que pour une application rapide, pour un test ou autre, j’ai tendance à ne pas embarquer de dépendances (donc pas de RelayCommand ou autres systèmes de messagerie) et donc j’utilise le code-behind pour récupérer mon viewmodel et lancer les commandes. Ca créé un couplage, mais est-ce bien grave ?</p>
<p>Par contre, dès que l’application est un tant soit peu sérieuse, on ne peut pas s’en passer.</p>
<p>Je partage également le point de vue d’Olivier qui dit qu’on peut vite se perdre avec un système de messagerie (je n’utilise pas celui de MVVM-Light). J’ai l’impression de m’en sortir mieux maintenant en me fixant quelques règles de nommages, d’utilisation. Il est vrai qu’il n’y a pas de guidelines pour et qu’au démarrage on peut vite s’embrouiller… mais avec un peu de pratique, je trouve qu’on peut l’utiliser avec profit.</p>
<p>Les boites de dialogues ? Oui, c’est vrai, c’est casse-pied <img src="https://blog.developpez.com/nico-pyright/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> Mais comme j’ai tendance à ne pas trop en faire et plutôt à afficher des confirmations sous une autre forme, ca ne m’embête pas trop trop. Quand j’en ai besoin, le système de messagerie me rend bien des services.</p>
<p>Les tests unitaires ? J’ai beau être un adepte convaincu du testing, j’avoue ne pas m’en servir pour tester les viewmodels. Je préfère blinder la couche d’accès aux données ou la couche de service.</p>
<p>Dans un des commentaires, on peut lire une remarque sur la création de contrôles personnalisés remplies de DependencyProperty juste pour faire du MVVM qui, pour le commentateur, est un problème. Il est vrai que créer des contrôles utilisateurs juste pour ca, c’est un peu dommage. Par contre, dans certains cas, je trouve que ca apporte un découplage complémentaire et offre une réutilisabiilté. Certains behavior sont tout à fait pertinent.</p>
<p>Bref, voici mon retour d’expérience.</p>
<p>En conclusion : Oui pour MVVM, il faut dans un premier temps faire dans l’extrémisme pour pouvoir comprendre et apprécier les avantages du patron de conception et ensuite y revenir et l’adapter vraiment au besoin.</p>
<p>Et vous ? Votre expérience ?</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutoriel : introduction au développement d&#8217;applications Windows Phone 7</title>
		<link>https://blog.developpez.com/nico-pyright/p9484/c/tutoriel_introduction_au_developpement_d_7</link>
		<comments>https://blog.developpez.com/nico-pyright/p9484/c/tutoriel_introduction_au_developpement_d_7#comments</comments>
		<pubDate>Sun, 14 Nov 2010 23:00:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WP7]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Windows Phone 7 (WP7) est la nouvelle plateforme de développement de Microsoft destinée aux smartphones. Dans ce premier tutoriel, vous découvrirez comment démarrer le développement d&#8217;applications avec Windows Phone 7. Nous commencerons par installer les outils nécessaires au développement sur WP7 puis nous créerons un premier programme simpliste en utilisant Silverlight pour WP7. Enfin, nous l&#8217;exécuterons sur l&#8217;émulateur et découvrirons son fonctionnement. Bonne lecture : http://nico-pyright.developpez.com/tutoriel/vs2010/csharp/windows-phone-seven/introduction-developpement-windows-phone-seven-wp7-silverlight/]]></description>
				<content:encoded><![CDATA[<p>Windows Phone 7 (WP7) est la nouvelle plateforme de développement de Microsoft destinée aux smartphones.</p>
<p>Dans ce premier tutoriel, vous découvrirez comment démarrer le développement d&rsquo;applications avec Windows Phone 7.<br />
Nous commencerons par installer les outils nécessaires au développement sur WP7 puis nous créerons un premier programme simpliste en utilisant Silverlight pour WP7.<br />
Enfin, nous l&rsquo;exécuterons sur l&rsquo;émulateur et découvrirons son fonctionnement.</p>
<p>Bonne lecture : http://nico-pyright.developpez.com/tutoriel/vs2010/csharp/windows-phone-seven/introduction-developpement-windows-phone-seven-wp7-silverlight/</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutoriel : Utilisez le pattern Model-View-ViewModel dans vos applications Silverlight grâce à MVVM Light toolkit</title>
		<link>https://blog.developpez.com/nico-pyright/p8982/c/tutoriel_utilisez_le_pattern_model_view_</link>
		<comments>https://blog.developpez.com/nico-pyright/p8982/c/tutoriel_utilisez_le_pattern_model_view_#comments</comments>
		<pubDate>Tue, 08 Jun 2010 12:26:11 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je vous présente mon dernier article : Utilisez le pattern Model-View-ViewModel dans vos applications Silverlight grâce à MVVM Light toolkit Cet article constitue une introduction au développement d&#8217;applications Silverlight en utilisant le design pattern M-V-VM grâce au MVVM Light Toolkit de Laurent Bugnion. Bonne lecture]]></description>
				<content:encoded><![CDATA[<p>Je vous présente mon dernier article : <a href="http://nico-pyright.developpez.com/tutoriel/vs2010/csharp/silverlight/introduction-mvvm-toolkit-silverlight/">Utilisez le pattern Model-View-ViewModel dans vos applications Silverlight grâce à MVVM Light toolkit</a></p>
<p>Cet article constitue une introduction au développement d&rsquo;applications Silverlight en utilisant le design pattern M-V-VM grâce au MVVM Light Toolkit de Laurent Bugnion.</p>
<p>Bonne lecture</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Silverlight] Comment faire un TextBlock multiligne ?</title>
		<link>https://blog.developpez.com/nico-pyright/p7329/c/silverlight_comment_faire_un_textblock_m</link>
		<comments>https://blog.developpez.com/nico-pyright/p7329/c/silverlight_comment_faire_un_textblock_m#comments</comments>
		<pubDate>Tue, 10 Mar 2009 19:37:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Pour faire un TextBlock multiligne, on va devoir utiliser la collection Inlines du contrôle. On y ajoutera des sections discrètes de texte (Classe System.Windows.Documents.Run), ainsi que des sauts de lignes (Classe System.Windows.Documents.LineBreak). Ainsi, on peut imaginer 2 méthodes d&#8217;extensions qui font ca : public static class TextBlockExtensionMethods {     public static void Append(this TextBlock textBlock, string text)     {         if (string.IsNullOrEmpty(text))             return;         Run r = new Run { Text = text };         textBlock.Inlines.Add(r);     }     public static void AppendLine(this TextBlock [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Pour faire un TextBlock multiligne, on va devoir utiliser la collection Inlines du contrôle. On y ajoutera des sections discrètes de texte (<a href="http://msdn.microsoft.com/fr-fr/library/system.windows.documents.run(VS.95).aspx">Classe System.Windows.Documents.Run</a>), ainsi que des sauts de lignes (<a href="http://msdn.microsoft.com/fr-fr/library/system.windows.documents.linebreak(VS.95).aspx">Classe System.Windows.Documents.LineBreak</a>).</p>
<p>Ainsi, on peut imaginer 2 méthodes d&rsquo;extensions qui font ca :</p>
<p><span id="more-107"></span>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Courier New"><font size="2"></font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">static</font><font color="#000000"> </font><font color="#0000ff">class</font><font color="#000000"> </font><font color="#2b91af">TextBlockExtensionMethods          <br /></font><font color="#000000">{          <br />    </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">static</font><font color="#000000"> </font><font color="#0000ff">void</font><font color="#000000"> Append(</font><font color="#0000ff">this</font><font color="#000000"> </font><font color="#2b91af">TextBlock</font><font color="#000000"> textBlock, </font><font color="#0000ff">string</font><font color="#000000"> text)          <br />    {           <br />        </font><font color="#0000ff">if</font><font color="#000000"> (</font><font color="#0000ff">string</font><font color="#000000">.IsNullOrEmpty(text))          <br />            </font><font color="#0000ff">return</font><font color="#000000">;          <br />        </font><font color="#2b91af">Run</font><font color="#000000"> r = </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">Run</font><font color="#000000"> { Text = text };          <br />        textBlock.Inlines.Add(r);           <br />    }           </p>
<p>    </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">static</font><font color="#000000"> </font><font color="#0000ff">void</font><font color="#000000"> AppendLine(</font><font color="#0000ff">this</font><font color="#000000"> </font><font color="#2b91af">TextBlock</font><font color="#000000"> textBlock, </font><font color="#0000ff">string</font><font color="#000000"> text)          <br />    {           <br />        </font><font color="#0000ff">if</font><font color="#000000"> (!</font><font color="#0000ff">string</font><font color="#000000">.IsNullOrEmpty(text))          <br />        {           <br />            </font><font color="#2b91af">Run</font><font color="#000000"> r = </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">Run</font><font color="#000000"> {Text = text};          <br />            textBlock.Inlines.Add(r);           <br />        }           <br />        textBlock.Inlines.Add(</font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">LineBreak</font><font color="#000000">());          <br />    }           <br />}</font></font> </div>
</p></div>
<p>A utiliser ainsi :</p>
<p> </p>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Courier New"><font size="2">abx.Append(</font><font color="#a31515">&laquo;&nbsp;1ère ligne &#8230;&nbsp;&raquo;</font><font color="#000000">);          <br />abx.AppendLine(</font><font color="#a31515">&nbsp;&raquo; Toujours sur la même ligne !&nbsp;&raquo;</font><font color="#000000">);          <br />abx.AppendLine(</font><font color="#a31515">&laquo;&nbsp;2ieme ligne&nbsp;&raquo;</font><font color="#000000">);</font></font> </div>
</p></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[C#] Tutoriel : Upload de fichier en Silverlight 2 sur un serveur PHP</title>
		<link>https://blog.developpez.com/nico-pyright/p7301/c/c_tutoriel_upload_de_fichier_en_silverli</link>
		<comments>https://blog.developpez.com/nico-pyright/p7301/c/c_tutoriel_upload_de_fichier_en_silverli#comments</comments>
		<pubDate>Mon, 02 Mar 2009 23:00:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je vous présente ici une solution pour envoyer des fichiers grâce à Silverlight sur un serveur PHP. Vous y trouverez notamment comment créer un web service avec NuSOAP afin de réaliser cet upload. Aller consulter l&#8217;article]]></description>
				<content:encoded><![CDATA[<p>Je vous présente ici une solution pour envoyer des fichiers grâce à Silverlight sur un serveur PHP. Vous y trouverez notamment comment créer un web service avec NuSOAP afin de réaliser cet upload.</p>
<p><a href="http://nico-pyright.developpez.com/tutoriel/vs2008/csharp/uploadsilverlightandphp/">Aller consulter l&rsquo;article</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Silverlight] Tutoriel : Utiliser Silverlight 2 avec MySQL en C#</title>
		<link>https://blog.developpez.com/nico-pyright/p5924/tutoriels/silverlight_tutoriel_utiliser_silverligh</link>
		<comments>https://blog.developpez.com/nico-pyright/p5924/tutoriels/silverlight_tutoriel_utiliser_silverligh#comments</comments>
		<pubDate>Tue, 17 Jun 2008 23:00:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je vous présente ici un article qui propose une solution pour utiliser Silverlight avec une base de données MySql. On y verra également quelques utilisations des composants de Silverlight. Bonne lecture]]></description>
				<content:encoded><![CDATA[<p>Je vous présente ici un article qui propose une solution pour utiliser Silverlight avec une base de données MySql. On y verra également quelques utilisations des composants de Silverlight.</p>
<p><a href="http://nico-pyright.developpez.com/tutoriel/vs2008/csharp/silverlightandmysql/">Bonne lecture</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ASP.NET][Silverlight] Comment passer des paramètres complexes à une fonction javascript depuis Silverlight ?</title>
		<link>https://blog.developpez.com/nico-pyright/p5898/asp-net/asp_net_silverlight_comment_passer_des_p</link>
		<comments>https://blog.developpez.com/nico-pyright/p5898/asp-net/asp_net_silverlight_comment_passer_des_p#comments</comments>
		<pubDate>Thu, 12 Jun 2008 20:00:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Prenons un exemple, j&#8217;ai un objet composé de 2 strings dans mon application. Ces deux strings représentent des entiers. Je veux les passer à une fonction javascript qui me renverra un objet composé de 2 entiers contenant la mise au carré des valeurs contenues dans le premier objet. Pour ce faire, on va créer nos deux objets en C# coté Silverlight en utilisant l&#8217;attribut ScriptableMember. public class Parametres { &#160; [ScriptableMember] &#160; public string val1 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Prenons un exemple, j&rsquo;ai un objet composé de <strong>2 strings</strong> dans mon application. Ces deux strings représentent des entiers. Je veux les passer à une fonction javascript qui me renverra un objet composé de <strong>2 entiers</strong> contenant la mise au carré des valeurs contenues dans le premier objet.</p>
<p>Pour ce faire, on va créer nos deux objets en C# coté Silverlight en utilisant l&rsquo;attribut <a href="http://msdn.microsoft.com/fr-fr/library/system.windows.browser.scriptablememberattribute(en-us,VS.95).aspx">ScriptableMember</a>.</p>
<p><span id="more-86"></span></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public class Parametres <br />
{ <br />
&nbsp; [ScriptableMember] <br />
&nbsp; public string val1 { get; set; } <br />
&nbsp; [ScriptableMember] <br />
&nbsp; public string val2 { get; set; } <br />
} <br />
&nbsp;<br />
public class Retour <br />
{ <br />
&nbsp; [ScriptableMember] <br />
&nbsp; public int val1 { get; set; } <br />
&nbsp; [ScriptableMember] <br />
&nbsp; public int val2 { get; set; } <br />
&nbsp; public override string ToString() <br />
&nbsp; { <br />
&nbsp; &nbsp; return string.Format(&quot;{0},{1}&quot;, val1, val2); <br />
&nbsp; } <br />
}</div></div>
<p>Il faudra ensuite enregistrer le type de retour coté javascript, grace à <strong>HtmlPage.RegisterCreateableType</strong> :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public Page() <br />
{ <br />
&nbsp; InitializeComponent(); <br />
&nbsp; Loaded += Page_Loaded; <br />
} <br />
&nbsp;<br />
void Page_Loaded(object sender, RoutedEventArgs e) <br />
{ <br />
&nbsp; HtmlPage.RegisterCreateableType(&quot;TypeRetour&quot;, typeof(Retour)); <br />
}</div></div>
<p>Ainsi, coté javascript, on pourra exploiter ce type dans la fonction :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;script type=&quot;text/javascript&quot;&gt; <br />
function modify(val) <br />
{ <br />
&nbsp; &nbsp; var xaml = $get(&quot;Xaml1&quot;); <br />
&nbsp; &nbsp; var retour = xaml.content.services.createObject(&quot;TypeRetour&quot;); <br />
&nbsp; &nbsp; retour.val1 = parseInt(val.val1) * parseInt(val.val1); <br />
&nbsp; &nbsp; retour.val2 = parseInt(val.val2) * parseInt(val.val2); <br />
&nbsp; &nbsp; return retour; <br />
} <br />
&lt;/script&gt;</div></div>
<p>Dans le javascript, on va créer l&rsquo;objet qui va nous servir pour retourner les valeurs à Silverlight et le renseigner en conséquence.</p>
<p>Enfin, coté Silverlight, on appelle la fonction javascript grace à <strong>HtmlPage.Window.Invoke</strong> en lui passant l&rsquo;objet de paramètres.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">private void Button_Click(object sender, RoutedEventArgs e) <br />
{ <br />
&nbsp; var scriptObject = HtmlPage.Window.Invoke(&quot;modify&quot;, new Parametres { val1 = &quot;5&quot;, val2 = &quot;7&quot; }) as ScriptObject; <br />
&nbsp; var retour = scriptObject.ManagedObject as Retour; <br />
&nbsp; HtmlPage.Window.Alert(retour.ToString()); <br />
}</div></div>
<p>On récupère un objet de type <a href="http://msdn.microsoft.com/fr-fr/library/system.windows.browser.scriptobject(en-us,VS.95).aspx">scriptObject</a> dont on pourra caster le contenu de ManagedObject en notre type de retour.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Silverlight] Comment copier une chaine dans le presse papier ?</title>
		<link>https://blog.developpez.com/nico-pyright/p5897/silverlight/silverlight_comment_copier_une_chaine_da</link>
		<comments>https://blog.developpez.com/nico-pyright/p5897/silverlight/silverlight_comment_copier_une_chaine_da#comments</comments>
		<pubDate>Thu, 12 Jun 2008 22:00:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Il peut être utile de copier des valeurs dans le presse papier, par exemple un lien ou une adresse email afin de l&#8217;utiliser dans son navigateur favori. Pour ce faire, on va utiliser l&#8217;objet javascript clipboardData et invoquer la méthode setData : &#160;var pressePapier = (ScriptObject)HtmlPage.Window.GetProperty(&#34;clipboardData&#34;); &#160;if (pressePapier != null) &#160;{ &#160; &#160; &#160;if ((bool)pressePapier.Invoke(&#34;setData&#34;, &#34;text&#34;, &#34;http://wwww.developpez.com&#34;)) &#160; &#160; &#160; &#160; &#160;HtmlPage.Window.Alert(&#34;Envoi au presse papier OK&#34;); &#160; &#160; &#160;else &#160; &#160; &#160; &#160; &#160;HtmlPage.Window.Alert(&#34;Erreur d'envoi [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Il peut être utile de copier des valeurs dans le presse papier, par exemple un lien ou une adresse email afin de l&rsquo;utiliser dans son navigateur favori.</p>
<p>Pour ce faire, on va utiliser l&rsquo;objet javascript <strong>clipboardData</strong> et invoquer la méthode <strong>setData</strong> :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;var pressePapier = (ScriptObject)HtmlPage.Window.GetProperty(&quot;clipboardData&quot;); <br />
&nbsp;if (pressePapier != null) <br />
&nbsp;{ <br />
&nbsp; &nbsp; &nbsp;if ((bool)pressePapier.Invoke(&quot;setData&quot;, &quot;text&quot;, &quot;http://wwww.developpez.com&quot;)) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;HtmlPage.Window.Alert(&quot;Envoi au presse papier OK&quot;); <br />
&nbsp; &nbsp; &nbsp;else <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;HtmlPage.Window.Alert(&quot;Erreur d'envoi au presse papier&quot;); <br />
&nbsp;}</div></div>
<p>NB : le retour de la méthode Invoke étant un type simple, on peut le caster directement en ce type (ici, bool)</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ASP.NET][Silverlight] Comment appeler une fonction javascript depuis mon application Silverlight ?</title>
		<link>https://blog.developpez.com/nico-pyright/p5881/asp-net/asp_net_silverlight_comment_appeler_une</link>
		<comments>https://blog.developpez.com/nico-pyright/p5881/asp-net/asp_net_silverlight_comment_appeler_une#comments</comments>
		<pubDate>Wed, 11 Jun 2008 22:00:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Prenons cette fonction javascript qui change la visibilité d&#8217;un élément, elle est déclarée dans votre page ASPX comme suit : &#60;script type=&#34;text/javascript&#34;&#62; function setDisplayDiv(id, visible) { &#160; &#160; var o; &#160; &#160; if (document.getElementById) &#160; &#160; &#160; &#160; o = document.getElementById(id).style; &#160; &#160; else if (document.layers) &#160; &#160; &#160; &#160; o = document.layers[id]; &#160; &#160; else if (document.all) &#160; &#160; &#160; &#160; o = document.all[id].style; &#160; &#160; if (o) &#160; &#160; &#160; &#160; o.display = [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Prenons cette fonction javascript qui change la visibilité d&rsquo;un élément, elle est déclarée dans votre page ASPX comme suit :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;script type=&quot;text/javascript&quot;&gt; <br />
function setDisplayDiv(id, visible) <br />
{ <br />
&nbsp; &nbsp; var o; <br />
&nbsp; &nbsp; if (document.getElementById) <br />
&nbsp; &nbsp; &nbsp; &nbsp; o = document.getElementById(id).style; <br />
&nbsp; &nbsp; else if (document.layers) <br />
&nbsp; &nbsp; &nbsp; &nbsp; o = document.layers[id]; <br />
&nbsp; &nbsp; else if (document.all) <br />
&nbsp; &nbsp; &nbsp; &nbsp; o = document.all[id].style; <br />
&nbsp; &nbsp; if (o) <br />
&nbsp; &nbsp; &nbsp; &nbsp; o.display = (visible ? 'block' : 'none'); <br />
} <br />
&lt;/script&gt;</div></div>
<p><span id="more-85"></span><br />
Plus bas dans notre page, nous avons notre composant Silverlight et un div contenant du texte :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;asp:ScriptManager ID=&quot;ScriptManager1&quot; runat=&quot;server&quot;&gt;&lt;/asp:ScriptManager&gt; <br />
&lt;div style=&quot;height:100px&quot;&gt; <br />
&nbsp; &nbsp; &lt;asp:Silverlight ID=&quot;Xaml1&quot; runat=&quot;server&quot; Source=&quot;~/ClientBin/monApplication.xap&quot; MinimumVersion=&quot;2.0.30523&quot; Width=&quot;100%&quot; Height=&quot;100%&quot; /&gt; <br />
&lt;/div&gt; <br />
&lt;div id=&quot;demo&quot;&gt; <br />
&nbsp; &nbsp; Texte de démo <br />
&lt;/div&gt;</div></div>
<p>Grace à la méthode <strong>Invoke </strong>de l&rsquo;objet HtmlPage.Window nous pourrons appeler la fonction javascript depuis Silverlight et changer ainsi la visibilité de notre div :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">private bool visible_; <br />
public Page() <br />
{ <br />
&nbsp; &nbsp; InitializeComponent(); <br />
&nbsp; &nbsp; visible_ = true; <br />
} <br />
&nbsp;<br />
private void Button_Click(object sender, RoutedEventArgs e) <br />
{ <br />
&nbsp; &nbsp; visible_ = !visible_; <br />
&nbsp; &nbsp; HtmlPage.Window.Invoke(&quot;setDisplayDiv&quot;, &quot;demo&quot;, visible_); <br />
}</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ASP.NET][Silverlight] Comment faire communiquer mon application Silverlight avec ma page ASP.NET ?</title>
		<link>https://blog.developpez.com/nico-pyright/p5880/asp-net/asp_net_silverlight_comment_faire_commun</link>
		<comments>https://blog.developpez.com/nico-pyright/p5880/asp-net/asp_net_silverlight_comment_faire_commun#comments</comments>
		<pubDate>Wed, 11 Jun 2008 20:00:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[En utilisant le DOM. Soit par exemple l&#8217;extrait de page ASPX suivant : &#60;asp:ScriptManager ID=&#34;ScriptManager1&#34; runat=&#34;server&#34;&#62;&#60;/asp:ScriptManager&#62; &#60;div style=&#34;height:100px&#34;&#62; &#160; &#160; &#60;asp:Silverlight ID=&#34;Xaml1&#34; runat=&#34;server&#34; Source=&#34;~/ClientBin/monApplication.xap&#34; MinimumVersion=&#34;2.0.30523&#34; Width=&#34;100%&#34; Height=&#34;100%&#34; /&#62; &#60;/div&#62; &#60;div id=&#34;result&#34;&#62;&#60;/div&#62; qui contient un controle &#60;asp:Silverlight&#62;et un &#60;div&#62; identifié par son id : &#171;&#160;result&#160;&#187; On utilisera la classe System.Windows.Browser.HtmlPage, par exemple, lors du click sur un bouton Silverlight, on pourra faire : private void Button_Click(object sender, RoutedEventArgs e) { &#160; &#160; var element = HtmlPage.Document.GetElementById(&#34;result&#34;); [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>En utilisant le DOM.<br />
Soit par exemple l&rsquo;extrait de page ASPX suivant :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;asp:ScriptManager ID=&quot;ScriptManager1&quot; runat=&quot;server&quot;&gt;&lt;/asp:ScriptManager&gt; <br />
&lt;div style=&quot;height:100px&quot;&gt; <br />
&nbsp; &nbsp; &lt;asp:Silverlight ID=&quot;Xaml1&quot; runat=&quot;server&quot; Source=&quot;~/ClientBin/monApplication.xap&quot; MinimumVersion=&quot;2.0.30523&quot; Width=&quot;100%&quot; Height=&quot;100%&quot; /&gt; <br />
&lt;/div&gt; <br />
&lt;div id=&quot;result&quot;&gt;&lt;/div&gt;</div></div>
<p>qui contient un controle <code class="codecolorer text default"><span class="text">&lt;asp:Silverlight&gt;</span></code>et un <code class="codecolorer text default"><span class="text">&lt;div&gt;</span></code> identifié par son id : &laquo;&nbsp;result&nbsp;&raquo;</p>
<p><span id="more-84"></span></p>
<p>On utilisera la classe System.Windows.Browser.HtmlPage, par exemple, lors du click sur un bouton Silverlight, on pourra faire :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">private void Button_Click(object sender, RoutedEventArgs e) <br />
{ <br />
&nbsp; &nbsp; var element = HtmlPage.Document.GetElementById(&quot;result&quot;); <br />
&nbsp; &nbsp; element.SetAttribute(&quot;innerText&quot;, &quot;valeur venant de Silverlight&quot;); <br />
}</div></div>
<p>Ainsi, on pourra modifier le contenu du div depuis notre application Silverlight</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
