<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Graphic Stream : Silverlight</title><link>http://msmvps.com/blogs/valentin/archive/tags/Silverlight/default.aspx</link><description>Tags: Silverlight</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Le WriteableBitmap avec Silverlight 3</title><link>http://msmvps.com/blogs/valentin/archive/2009/08/28/le-writeablebitmap-avec-silverlight-3.aspx</link><pubDate>Fri, 28 Aug 2009 13:15:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1718931</guid><dc:creator>valentin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/valentin/rsscomments.aspx?PostID=1718931</wfw:commentRss><comments>http://msmvps.com/blogs/valentin/archive/2009/08/28/le-writeablebitmap-avec-silverlight-3.aspx#comments</comments><description>&lt;p&gt;Le WriteableBitmap est l&amp;#39;une des &amp;eacute;volutions majeure de Silverlight 3.&lt;/p&gt;
&lt;p&gt;Il permet de repousser les limites d&amp;#39;affichage de Silverlight, cantonn&amp;eacute; jusque l&amp;agrave; au vectoriel, en donnant au d&amp;eacute;veloppeur la possibilit&amp;eacute; de travail au niveau du Pixel. Avant Silverlight 3.0 la g&amp;eacute;n&amp;eacute;ration &amp;agrave; la vol&amp;eacute;e d&amp;#39;images n&amp;#39;&amp;eacute;tait pas possible nativement. Il fallait soit t&amp;eacute;l&amp;eacute;charger l&amp;#39;image g&amp;eacute;n&amp;eacute;r&amp;eacute;e depuis un serveur soit cr&amp;eacute;er son propre g&amp;eacute;n&amp;eacute;rateur/encodeur. Avec WriteableBitmap (qui h&amp;eacute;rite de BitmapSource) la g&amp;eacute;n&amp;eacute;ration d&amp;#39;images &amp;agrave; partir d&amp;#39;algorithmes, de contr&amp;ocirc;les ou d&amp;#39;instruction est r&amp;eacute;ellement un jeu d&amp;#39;enfant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;G&amp;eacute;n&amp;eacute;ration &amp;agrave; partir d&amp;#39;un contr&amp;ocirc;le&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Quelques r&amp;egrave;gles &amp;agrave; prendre en compte :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le contr&amp;ocirc;le doit avoir une taille sup&amp;eacute;rieure &amp;agrave; new Size(0,0) evidemment.&lt;/li&gt;
&lt;li&gt;Le contr&amp;ocirc;le doit appartenir &amp;agrave; l&amp;#39;arborescence visuelle.&lt;/li&gt;
&lt;li&gt;Le contr&amp;ocirc;le doit &amp;ecirc;tre visible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le constructeur de la classe WriteableBitmap permet de charger un contr&amp;ocirc;le sous la forme d&amp;#39;une image en une instruction :&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;Image image = new Image();//le controle chager&lt;br /&gt;BitmapImage source = new BitmapImage();&lt;br /&gt;source.UriSource = new Uri(&amp;quot;./Images/tunnelstonetex.png&amp;quot;, UriKind.Relative);&lt;br /&gt;image.Source = source;&lt;br /&gt;this.LayoutRoot.Children.Add(image);&lt;br /&gt;this.texture = new WriteableBitmap(image, null);//on charge le rendu de la texture dans la WriteableBitmap&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Le second param&amp;egrave;tre du contructeur WriteableBitmap permet de sp&amp;eacute;cifier une transformation &amp;agrave; appliquer au rendu de l&amp;#39;objet avant sa &amp;quot;rasterisation&amp;quot; en image.&amp;nbsp; WriteableBitmap poss&amp;egrave;de une m&amp;eacute;thode nomm&amp;eacute;e Render qui r&amp;eacute;alise le m&amp;ecirc;me travail.&amp;nbsp;Il est en effet&amp;nbsp;possible de cr&amp;eacute;er aussi une image vide en sp&amp;eacute;cifiant simplement la largeur et la hauteur de l&amp;#39;image&amp;nbsp; &amp;agrave; cr&amp;eacute;er afin de r&amp;eacute;aliser un rendu ult&amp;eacute;rieurement :&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new,courier;"&gt;this.generatedTexture = new WriteableBitmap(400, 300);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;Modification dynamique&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Pour montrer la puissance de cette classe nous allons r&amp;eacute;aliser un rendu visuel dynamique bas&amp;eacute; sur l&amp;#39;effet du tunnel si cher &amp;agrave; Vandevenne. Le but sera, au travers d&amp;#39;un dispatcher de modifier le contenu d&amp;#39;une texture &amp;agrave; la vol&amp;eacute;e &amp;agrave; partir de valeur extraites d&amp;#39;un algorithme. Cette texture sera alors appliqu&amp;eacute;e au background de notre contr&amp;ocirc;le root &amp;agrave; l&amp;#39;aide d&amp;#39;un brush.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Lorsque la WritableBitmap est cr&amp;eacute;&amp;eacute;e, l&amp;#39;acc&amp;egrave;s aux pixels de l&amp;#39;image se fait simplement au travers du membre Pixels (array de type int). Attention &amp;agrave; bien noter que l&amp;#39;encodage des pixels de l&amp;#39;image se fait en BGRA. L&amp;#39;acc&amp;egrave;s aux diff&amp;eacute;rentes composantes d&amp;#39;une couleur ainsi cod&amp;eacute;e se fait simplement au travers de ce type d&amp;#39;instructions :&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;&lt;span style="color:#008000;font-size:x-small;"&gt;
&lt;p&gt;byte B = (byte)(pixel &amp;amp; 0xFF); pixel &amp;gt;&amp;gt;= 8;&lt;br /&gt;byte G = (byte)(pixel &amp;amp; 0xFF); pixel &amp;gt;&amp;gt;= 8;&lt;br /&gt;byte R = (byte)(pixel &amp;amp; 0xFF); pixel &amp;gt;&amp;gt;= 8;&lt;br /&gt;byte A = (byte)(pixel);&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Les membres PixelWidth et PixelHeight donnent respectivement la largeur et la hauteur de la WriteableBitmap. En gros l&amp;#39;array Pixel est de taille PixelWidth*PixelHeight. Mais attention &amp;agrave; ne surtout pas utiliser ces membres dans une phase de g&amp;eacute;n&amp;eacute;ration de texture, c&amp;#39;est &amp;agrave; dire une phase o&amp;ugrave; les performances doivent &amp;ecirc;tre optimales. L&amp;#39;acc&amp;egrave;s &amp;agrave; l&amp;#39;accesseur de ces deux propri&amp;eacute;t&amp;eacute;s est extremement lent (DepepdencyProperty et instructions it&amp;eacute;ratives ne font pas bon m&amp;eacute;nage). On ciblera un pixel particulier sur l&amp;#39;image &amp;agrave; g&amp;eacute;n&amp;eacute;rer de cette mani&amp;egrave;re :&lt;/p&gt;
&lt;p&gt;this.generatedTexture.Pixels[x + y * generatedTextureWidth] = color;&lt;/p&gt;
&lt;p&gt;Dans cette instruction x et y repr&amp;eacute;sentent les &amp;quot;coordonn&amp;eacute;es&amp;quot;&amp;nbsp;du pixel &amp;agrave; cibler dans la texture. Pixels &amp;eacute;tait un array &amp;agrave; une dimension nous multiplions y par la largeur de la texture (le Stride). La valeur color est un entier qui repr&amp;eacute;sente la couleur &amp;agrave; appliquer en (x,y).&lt;/p&gt;
&lt;p&gt;Voil&amp;agrave; c&amp;#39;est &amp;agrave; peu pr&amp;egrave;s tout ce qu&amp;#39;il y&amp;#39;a &amp;agrave; savoir su WriteableBitmap. Peut on imaginer plus simple ? Cet article s&amp;#39;accompagne d&amp;#39;un sample t&amp;eacute;l&amp;eacute;chargeable &lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.articles.CoursSilverlight.ArticleWriteableBitmap/7838.SilverlightWriteableBitmap.zip"&gt;ici&lt;/a&gt;. Si vous le lancez vous obtenez la sortie suivante : &lt;/p&gt;
&lt;p&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.articles.CoursSilverlight.ArticleWriteableBitmap/7532.Image1.png" border="0" style="border:2px solid black;vertical-align:middle;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.articles.CoursSilverlight.ArticleWriteableBitmap/7532.Image1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Utilisation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les contextes d&amp;#39;utilisation de la WriteableBitmap sont multiples. Pour les jeux vid&amp;eacute;os elle offre l&amp;#39;opportunit&amp;eacute; de pouvoir travailler comme nous l&amp;#39;avons dit au niveau du pixel a la mani&amp;egrave;re de shaders :&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img height="618" width="698" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.articles.CoursSilverlight.ArticleWriteableBitmap/8422.Image2.png" border="0" style="border:2px solid black;vertical-align:middle;" alt="" /&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;Oui, je suis un grand fan de Might and Magic :)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pour des outils professionnels elle offre de nombreuses possibilit&amp;eacute;s comme par exemple une zoombox :&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img height="820" width="756" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.articles.CoursSilverlight.ArticleWriteableBitmap/5282.Image3.png" border="0" style="vertical-align:middle;border:0;" alt="" /&gt;&lt;br /&gt;&lt;span style="font-size:xx-small;"&gt;Un controle que je vendais en ind&amp;eacute;pendant et que j&amp;#39;ai pu refaire &amp;agrave; la sauce Silvelight gr&amp;acirc;ce &amp;agrave; WriteableBitmap&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Ou encore de pouvoir simplement et efficacement r&amp;eacute;aliser des effets graphiques comme le montre le sample de cet article.&lt;/p&gt;
&lt;p&gt;A bientôt sur ce Blog !&lt;/p&gt;
&lt;p&gt;Valentin Billotte&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1718931" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.articles.CoursSilverlight.ArticleWriteableBitmap/7838.SilverlightWriteableBitmap.zip" length="950085" type="application/x-compressed" /><category domain="http://msmvps.com/blogs/valentin/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Article/default.aspx">Article</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/WriteableBitmap/default.aspx">WriteableBitmap</category></item><item><title>Installation Silverlight 3.0 : The hash value is not correct.</title><link>http://msmvps.com/blogs/valentin/archive/2009/03/31/installation-silverlight-3-0-the-hash-value-is-not-correct.aspx</link><pubDate>Tue, 31 Mar 2009 07:42:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1683254</guid><dc:creator>valentin</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/valentin/rsscomments.aspx?PostID=1683254</wfw:commentRss><comments>http://msmvps.com/blogs/valentin/archive/2009/03/31/installation-silverlight-3-0-the-hash-value-is-not-correct.aspx#comments</comments><description>&lt;p&gt;Juste la honte pour Microsoft puisque c&amp;#39;est un bug connu d&amp;eacute;j&amp;agrave; sous la 2.0 et qui n&amp;#39;est pas corrig&amp;eacute;...&lt;/p&gt;
&lt;p&gt;Si votre connection au r&amp;eacute;seau Internet n&amp;#39;est pas &amp;quot;directe&amp;quot; (genre derri&amp;egrave;re un proxy) vous pouvez vous recevoir en pleine figure un&amp;nbsp;&amp;quot;The hash value is not correct.&amp;quot; lors de l&amp;#39;installation de Silverlight 3.0.&lt;/p&gt;
&lt;p&gt;L&amp;#39;astuce pour contourner cette erreur est relativement simple.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Faites tout d&amp;#39;abord une extraction de l&amp;#39;executable &amp;quot;Silverlight3_Tools.exe&amp;quot; &amp;agrave; l&amp;#39;aide de la commande &amp;quot;Silverlight3_Tools.exe /x&amp;quot;. Genre dans un r&amp;eacute;pertoire situ&amp;eacute; dans &amp;quot;c:\prout&amp;quot;.&lt;/li&gt;
&lt;li&gt;T&amp;eacute;l&amp;eacute;chargez le developper runtime pour la 3.0 ici &lt;a target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=141212"&gt;&lt;span style="color:#ff9900;"&gt;Silverlight.3.0_Developer.exe&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Placez cet executable dans le r&amp;eacute;pertoire c:\prout qui contient d&amp;eacute;j&amp;agrave; le contenu du &amp;quot;Silverlight3_Tools.exe&amp;quot; pr&amp;eacute;c&amp;eacute;demment extrait.&lt;/li&gt;
&lt;li&gt;Lancez SPInstaller.exe situ&amp;eacute; dans le r&amp;eacute;pertoire c:\prout&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L&amp;#39;installation devrait cette fois ci se terminer normalement.&lt;/p&gt;
&lt;p&gt;EDIT : je viens de voir un site qui donne une r&amp;eacute;ponse &amp;agrave; tout un tas d&amp;#39;erreurs d&amp;#39;installation&amp;nbsp;(il faut dire qu&amp;#39;avec l&amp;#39;&amp;eacute;quipe MS qui s&amp;#39;occupe des setup Silverlight, y&amp;#39;a du business &amp;agrave; se faire ...) :&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/amyd/archive/2009/03/19/silverlight-tools-installation-error-codes.aspx"&gt;http://blogs.msdn.com/amyd/archive/2009/03/19/silverlight-tools-installation-error-codes.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1683254" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/valentin/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Error/default.aspx">Error</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Setup/default.aspx">Setup</category></item><item><title>Ombre en Silverlight</title><link>http://msmvps.com/blogs/valentin/archive/2009/03/18/ombre-en-silverlight.aspx</link><pubDate>Wed, 18 Mar 2009 03:13:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1679005</guid><dc:creator>valentin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/valentin/rsscomments.aspx?PostID=1679005</wfw:commentRss><comments>http://msmvps.com/blogs/valentin/archive/2009/03/18/ombre-en-silverlight.aspx#comments</comments><description>&lt;p&gt;Aujourd&amp;#39;hui pour faire une ombre sous un contr&amp;ocirc;le en Silverlight il n&amp;#39;y a pas beaucoup de possibilit&amp;eacute;s.&lt;/p&gt;
&lt;p&gt;Le faire en vectoriel s&amp;#39;av&amp;egrave;re difficile et on a l&amp;#39;habitude de passer par une image PNG, ce qui n&amp;#39;est pas forcement le plus optimis&amp;eacute;.&lt;/p&gt;
&lt;p&gt;Voici un simple code qui permet de corriger cela, et en vectoriel.&amp;nbsp; Vivement l&amp;#39;ajout d&amp;#39;effet en Silverlight pour eviter de passer par ce genre de tips...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;UserControl x:Class=&amp;quot;SmartInterface.TravelingPanel&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;xmlns=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;xmlns:d=&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;xmlns:mc=&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;mc:Ignorable=&amp;quot;d&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;d:DesignWidth=&amp;quot;640&amp;quot; d:DesignHeight=&amp;quot;480&amp;quot; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;Width=&amp;quot;340&amp;quot; Height=&amp;quot;340&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;RenderTransformOrigin=&amp;quot;0.5,0.5&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;Grid x:Name=&amp;quot;LayoutRoot&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;ColumnDefinition Width=&amp;quot;*&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;!-- Six lignes qui cr&amp;sbquo;&amp;sbquo;ent un effet d&amp;#39;ombrage--&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#0000ff;font-family:courier new,courier;"&gt;&amp;lt;Border CornerRadius=&amp;quot;16&amp;quot; Margin=&amp;quot;-6&amp;quot; BorderThickness=&amp;quot;1&amp;quot; BorderBrush=&amp;quot;Black&amp;quot; Opacity=&amp;quot;0.10&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#0000ff;font-family:courier new,courier;"&gt;&amp;lt;Border CornerRadius=&amp;quot;15&amp;quot; Margin=&amp;quot;-5&amp;quot; BorderThickness=&amp;quot;1&amp;quot; BorderBrush=&amp;quot;Black&amp;quot; Opacity=&amp;quot;0.20&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#0000ff;font-family:courier new,courier;"&gt;&amp;lt;Border CornerRadius=&amp;quot;14&amp;quot; Margin=&amp;quot;-4&amp;quot; BorderThickness=&amp;quot;1&amp;quot; BorderBrush=&amp;quot;Black&amp;quot; Opacity=&amp;quot;0.30&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#0000ff;font-family:courier new,courier;"&gt;&amp;lt;Border CornerRadius=&amp;quot;13&amp;quot; Margin=&amp;quot;-3&amp;quot; BorderThickness=&amp;quot;1&amp;quot; BorderBrush=&amp;quot;Black&amp;quot; Opacity=&amp;quot;0.40&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#0000ff;font-family:courier new,courier;"&gt;&amp;lt;Border CornerRadius=&amp;quot;12&amp;quot; Margin=&amp;quot;-2&amp;quot; BorderThickness=&amp;quot;1&amp;quot; BorderBrush=&amp;quot;Black&amp;quot; Opacity=&amp;quot;0.50&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#0000ff;font-family:courier new,courier;"&gt;&amp;lt;Border CornerRadius=&amp;quot;11&amp;quot; Margin=&amp;quot;-1&amp;quot; BorderThickness=&amp;quot;1&amp;quot; BorderBrush=&amp;quot;Black&amp;quot; Opacity=&amp;quot;0.60&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;Border Name=&amp;quot;ExternalBorder&amp;quot; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;CornerRadius=&amp;quot;10,10,10,10&amp;quot; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;Background=&amp;quot;#FF92B825&amp;quot; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;BorderBrush=&amp;quot;#FF6D8A17&amp;quot; BorderThickness=&amp;quot;1&amp;quot; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;RenderTransformOrigin=&amp;quot;0.5,0.5&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;Border Name=&amp;quot;InternalBorder&amp;quot; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;CornerRadius=&amp;quot;10,10,10,10&amp;quot; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;Background=&amp;quot;#FF92B825&amp;quot; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;BorderBrush=&amp;quot;#FFB7D265&amp;quot; BorderThickness=&amp;quot;1&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;Canvas Clip=&amp;quot;M0,8 C0,3.581722 3.581722,0 8,0 L328,0 C332.41827,0 336,3.581722 336,8 L336,328 C336,332.41827 332.41827,336 328,336 L8,336 C3.581722,336 0,332.41827 0,328 z&amp;quot; &amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;Rectangle Width=&amp;quot;336&amp;quot; Height=&amp;quot;336&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;Rectangle.Fill&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;RadialGradientBrush GradientOrigin=&amp;quot;0.197,0.58&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;RadialGradientBrush.RelativeTransform&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;TransformGroup&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;ScaleTransform CenterX=&amp;quot;0.5&amp;quot; CenterY=&amp;quot;0.5&amp;quot; ScaleY=&amp;quot;1.27&amp;quot; ScaleX=&amp;quot;1.874&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;SkewTransform CenterX=&amp;quot;0.5&amp;quot; CenterY=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;RotateTransform CenterX=&amp;quot;0.5&amp;quot; CenterY=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;TranslateTransform Y=&amp;quot;0.234&amp;quot; X=&amp;quot;0.191&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/TransformGroup&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/RadialGradientBrush.RelativeTransform&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;GradientStop Color=&amp;quot;#FF6D8A17&amp;quot; Offset=&amp;quot;0.759&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;GradientStop Color=&amp;quot;#FF92B825&amp;quot; Offset=&amp;quot;1&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/RadialGradientBrush&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/Rectangle.Fill&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/Rectangle&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;Rectangle Width=&amp;quot;336&amp;quot; Height=&amp;quot;336&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;Rectangle.Fill&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;LinearGradientBrush EndPoint=&amp;quot;0.5,1&amp;quot; StartPoint=&amp;quot;0.5,0&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;GradientStop Color=&amp;quot;#B2000000&amp;quot; Offset=&amp;quot;0.978&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;GradientStop Color=&amp;quot;#00FFFFFF&amp;quot; Offset=&amp;quot;0.527&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/LinearGradientBrush&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/Rectangle.Fill&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/Rectangle&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/Canvas&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/Border&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/Border&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;font-family:courier new,courier;"&gt;&amp;lt;/UserControl&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Les deux Border d&amp;#39;affil&amp;eacute;s provoquent cet effet d&amp;#39;ombrage r&amp;eacute;alis&amp;eacute; relativement facilement et sutout tr&amp;egrave;s rapide &amp;agrave; afficher pour le moteur graphique de votre plugin pr&amp;eacute;f&amp;eacute;r&amp;eacute;. Le resultat est le suivant :&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;img width="383" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Tips.Silverlight/shadowsl.png" height="375" style="vertical-align:middle;border:2px solid black;" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;
&lt;p&gt;
&lt;p&gt;&lt;span style="font-size:small;color:#000000;"&gt;J&amp;#39;utilise un Border dans la mesure o&amp;ugrave; le contr&amp;ocirc;le sur lequel j&amp;#39;applique un ombrage poss&amp;egrave;de des cot&amp;eacute;s arrondis. Sur les contr&amp;ocirc;les carr&amp;eacute;s ou rectangulaires, l&amp;#39;utilisation du shape Line sera un meilleur choix. Enfin, il suffit de jouer sur la taille de la bordure (Thickness) pour affiner l&amp;#39;ombrage ainsi que le nombre de couche pour am&amp;eacute;liorer le rendu (ici de 0,60d &amp;agrave; 0,10d).&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;A bientôt sur ce Blog !&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1679005" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/valentin/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/WPF/default.aspx">WPF</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Incompatibilité entre Silverlight 2b2 et Ado.Net Data Services  avec le framework 3.5 SP1</title><link>http://msmvps.com/blogs/valentin/archive/2008/08/24/incompatibilit-233-entre-silverlight-2b2-et-ado-net-data-services-avec-le-framework-3-5-sp1.aspx</link><pubDate>Sun, 24 Aug 2008 15:12:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1645668</guid><dc:creator>valentin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/valentin/rsscomments.aspx?PostID=1645668</wfw:commentRss><comments>http://msmvps.com/blogs/valentin/archive/2008/08/24/incompatibilit-233-entre-silverlight-2b2-et-ado-net-data-services-avec-le-framework-3-5-sp1.aspx#comments</comments><description>&lt;p&gt;L&amp;#39;installation du SP1 (VS 2008 SP1 et/ou framework 3.5 sp1) emp&amp;ecirc;che les d&amp;eacute;veloppements Software + Services entre Silverlight et ADO.Net Data services (Astoria). Deux bugs apparaissent :&lt;/p&gt;
&lt;p align="left" style="padding-left:60px;"&gt;&lt;span style="text-decoration:underline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dans le cas o&amp;ugrave; le Xap Silverlight se trouve sur le m&amp;ecirc;me domaine que les services Astoria vous optenez l&amp;#39;erreur suivante :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-size:xx-small;"&gt;&amp;quot;Aucun constructeur sans param&amp;egrave;tre d&amp;eacute;fini pour cet objet.&amp;quot;&amp;nbsp;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-size:xx-small;"&gt;&amp;nbsp;{System.MissingMethodException: Aucun constructeur sans param&amp;egrave;tre d&amp;eacute;fini pour cet objet.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;agrave; System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean&amp;amp; canBeCached, RuntimeMethodHandle&amp;amp; ctor, Boolean&amp;amp; bNeedSecurityCheck)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;agrave; System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;agrave; System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)&lt;br /&gt;...&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-size:xx-small;"&gt;&lt;/span&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:xx-small;"&gt;&lt;/span&gt;&lt;strong&gt;&amp;nbsp;Dans le cas o&amp;ugrave; Silverlight se trouve sur un autre domaine une autre erreur apparait sur l&amp;#39;appel &amp;agrave; &lt;span style="font-size:x-small;"&gt;EndExecute&lt;/span&gt;&lt;span style="font-size:xx-small;"&gt; apr&amp;egrave;s une requ&amp;ecirc;te Linq to Data services. :&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;System.InvalidOperationException occurred&lt;br /&gt;&amp;nbsp; Message=&amp;quot;Failed to Invoke: callOpen.&amp;quot;&lt;br /&gt;&amp;nbsp; StackTrace:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Windows.Browser.ScriptObject.Invoke(String name, Object[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Data.Services.Http.ScriptObjectUtility.CallOpen(ScriptObject request, String method, String uri)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Data.Services.Http.HttpWebRequest.ScriptXmlHttpRequest.Open(Boolean async, String url, String method, Action OnReadyStateChange)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Data.Services.Http.HttpWebRequest.InvokeRequest(Boolean async)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;La r&amp;eacute;ponse de Pablo Castro &amp;agrave; ce soucis est sans &amp;eacute;quivoque :&lt;/p&gt;
&lt;p align="left"&gt;&amp;quot;Unfortunately, due to work arounds required for other aspects of Data Services functionality, cross-domain access is not supported in the Data Services client included in Silverlight Beta 2. We&amp;#39;re working to sort out the issue for the RTM release.&amp;quot;&lt;/p&gt;
&lt;p align="left" style="padding-left:60px;"&gt;&lt;span style="text-decoration:underline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;En gros il faudra attendre la sortie de la rtm de Silverlight pour voir ces deux probl&amp;egrave;mes corrig&amp;eacute;s (pr&amp;eacute;vu pour la fin de l&amp;#39;&amp;eacute;t&amp;eacute;, soit ... bient&amp;ocirc;t). D&amp;#39;ici l&amp;agrave; les &amp;eacute;quipes travaillant sur ces produits se contenteront d&amp;#39;un d&amp;eacute;veloppement MVC en ne travaillant que sur la vue cot&amp;eacute; software et que sur les fonctionnalit&amp;eacute;s m&amp;eacute;tier cot&amp;eacute; services... en attendant de pouvoir relier le tout.&lt;/p&gt;
&lt;p&gt;Plus d&amp;#39;infos sur :&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/astoriateam/archive/2008/08/12/compat-note-silverlight-beta-2-client-net-framework-3-5-sp1-server-components.aspx"&gt;http://blogs.msdn.com/astoriateam/archive/2008/08/12/compat-note-silverlight-beta-2-client-net-framework-3-5-sp1-server-components.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(c&amp;#39;est quand m&amp;ecirc;me fou de voir de tels oublis/lacunes sur deux produits aussi li&amp;eacute;s ...)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1645668" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/valentin/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/ADO.NET+Entity+Framework/default.aspx">ADO.NET Entity Framework</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Error/default.aspx">Error</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Ado.Net+Data+Services/default.aspx">Ado.Net Data Services</category></item><item><title>Pourquoi je m'oriente vers Silverlight</title><link>http://msmvps.com/blogs/valentin/archive/2008/08/21/pourquoi-je-m-oriente-vers-silverlight.aspx</link><pubDate>Thu, 21 Aug 2008 03:14:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1645340</guid><dc:creator>valentin</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/valentin/rsscomments.aspx?PostID=1645340</wfw:commentRss><comments>http://msmvps.com/blogs/valentin/archive/2008/08/21/pourquoi-je-m-oriente-vers-silverlight.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;Depuis mes d&amp;eacute;buts en d&amp;eacute;veloppement j&amp;#39;ai toujours fait du lourd. Entendez par l&amp;agrave; du client Lourd. A savoir du Winform principalement, de l&amp;#39;API Win 32 et&amp;nbsp; du Xna. J&amp;#39;ai commenc&amp;eacute; &amp;agrave; aborder WPF il y&amp;#39;a deux ans. J&amp;#39;ai rapidement abandonn&amp;eacute; cette technologie estimant qu&amp;#39;elle n&amp;#39;avait pas un bel avenir devant elle. Je trouve qu&amp;#39;elle est extraordinaire et parfaitement bien con&amp;ccedil;ue, mais elle ne r&amp;eacute;pond pas au futur des besoins que demanderons les applicatifs dans les mois &amp;agrave; venir.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;Avant SIlverlight 2.0 bx, le plugin de Microsoft etait plus un jouet qu&amp;#39;un outil professionnel. Il montrait avec force ce qu&amp;#39;allait &amp;ecirc;tre Silverilght et ce que nous allions pouvoir en faire. Il manquait encore un grand nombre de fonctionnalit&amp;eacute;s, les fonctionnalit&amp;eacute;s existantes n&amp;#39;&amp;eacute;taient pas p&amp;eacute;rennes et les outils de d&amp;eacute;veloppements associ&amp;eacute;s n&amp;#39;&amp;eacute;tait pas forcement stables...&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;L&amp;#39;arrive des 2.0 bx change la donne. Il s&amp;#39;agit d&amp;#39;un version reconnue par Microsoft comme &amp;eacute;tant Go Live. Microsoft s&amp;#39;engage donc a fournir un support et donc &amp;agrave; ce qu&amp;#39;une soci&amp;eacute;t&amp;eacute; puisse r&amp;eacute;pondre &amp;agrave; ses exigences m&amp;eacute;tier et graphique via cette technologie. C&amp;#39;est le point important &amp;agrave; avoir en t&amp;ecirc;te. Bien entendu Silverlight est un sous ensemble de WPF. Je suis tout &amp;agrave; fait conscient qu&amp;#39;un d&amp;eacute;veloppement graphique avec WPF ne sera pas forcement plus rapide mais utilisera des technologies Built in que nous n&amp;#39;auront pas cot&amp;eacute; Silverlight. Le d&amp;eacute;veloppeur aura ainsi &amp;agrave; travailler cot&amp;eacute; code .net l&amp;agrave; o&amp;ugrave; avec WPF il aurait op&amp;eacute;r&amp;eacute; cot&amp;eacute; Xaml. Je ne pense pas que ce soit r&amp;eacute;ellement handicapant.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;Ce qui me pousse vers Silverlight c&amp;#39;est d&amp;#39;imaginer l&amp;#39;avenir proche. Les applications lourdes vont progressivement p&amp;eacute;ricliter sans toutefois disparaitre. La plupart des utilisateurs seront connect&amp;eacute;s &amp;agrave; Internet &amp;agrave; souhait depuis leur t&amp;eacute;l&amp;eacute;phone portable (chez orange Internet illimit&amp;eacute; c&amp;#39;est 6 euros par mois, les principaux op&amp;eacute;rateurs lancent m&amp;ecirc;me des mini pc uniquement d&amp;eacute;di&amp;eacute;s &amp;agrave; Internet). Ce qui sera important sur un ordinateur ce n&amp;#39;est plus son syst&amp;egrave;me d&amp;#39;exploitation mais son browser. Sa capacit&amp;eacute; &amp;agrave; profiter d&amp;#39;internet et surtout les plugins qu&amp;#39;il peut recevoir. Il fut un temps o&amp;ugrave; Microsoft n&amp;#39;avait pas peur d&amp;#39;offrir des API non multi plateforme obligeant les applicatifs &amp;agrave; ne tourner que sous un Windows xXx. Face &amp;agrave; ce changement majeur de mentalit&amp;eacute;, des technologies comme l&amp;#39;API Win 32, WinForm, et m&amp;ecirc;me WPF prennent un gout amer. On entend toujours parler d&amp;#39;une bataille entre le monde Windows et le monde Unix. Mais pour la plupart des Internautes ce combat est compl&amp;egrave;tement inint&amp;eacute;ressant et d&amp;eacute;pass&amp;eacute;s&amp;nbsp;; Ce qu&amp;rsquo;ils recherchent avant tout c&amp;#39;est comment lancer le navigateur pour acc&amp;eacute;der aux sites de communaut&amp;eacute;s, pour acc&amp;eacute;der aux mails, aux sites de recherche, etc. Si bien que ces derniers temps, on parlait plus de la bataille entre Internet Explorer 8 et le dernier Mozilla. Les deux soci&amp;eacute;t&amp;eacute;s derri&amp;egrave;re ces navigateurs rivalisent d&amp;#39;ing&amp;eacute;niosit&amp;eacute; pour offrir plus de services aux utilisateurs. C&amp;#39;est seulement le browser qui donnera une chance pour l&amp;#39;internaute lambda de rester sur un syst&amp;egrave;me d&amp;#39;exploitation. Windows a encore de beaux jours devant lui gr&amp;acirc;ce &amp;agrave; la politique Marketing de Microsoft et parce que, en entreprise, le parc d&amp;#39;applications lourdes tournant sous son syst&amp;egrave;me est important. Ajoutons &amp;agrave; cela que les outils de d&amp;eacute;veloppement qu&amp;#39;elle offre sont les plus efficaces. Mais cet aspect des choses n&amp;rsquo;aura aucun int&amp;eacute;r&amp;ecirc;t pour les milliards d&amp;#39;internautes &amp;agrave; venir qui utiliseront le r&amp;eacute;seau des r&amp;eacute;seaux. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;Utiliser Internet se fait depuis n&amp;#39;importe quel syst&amp;egrave;me d&amp;#39;exploitation, depuis n&amp;#39;importe quel mobile, depuis n&amp;#39;importe quelle borne d&amp;#39;acc&amp;egrave;s de n&amp;#39;importe quelle galerie commerciale. Plus une soci&amp;eacute;t&amp;eacute; offrira un moyen d&amp;#39;exploiter Internet de mani&amp;egrave;re intelligente plus son avenir est assur&amp;eacute;. Les IPhones de Mac, le futur portable de Google. Microsoft toujours num&amp;eacute;ro en terme de syst&amp;egrave;me d&amp;#39;exploitation mobile avec Windows Mobile va rapidement placer Silverlight sur ce cr&amp;eacute;neau l&amp;agrave; pour suivre le mouvement. Ce que Microsoft anticipe aussi c&amp;#39;est le besoin d&amp;rsquo;applications riches&amp;nbsp;compos&amp;eacute;es d&amp;#39;une couche vue et d&amp;#39;une couche controleur sans aucune sp&amp;eacute;cification d&amp;#39;acc&amp;egrave;s aux donn&amp;eacute;es. Il estime aussi un autre besoin important : internet en tant que plateforme de service et non plate forme r&amp;eacute;seau. Une infinit&amp;eacute; de services sur Internet auxquels les applicatifs riches vont le connecter pour remplir leur interface. Un tel syst&amp;egrave;me applicatif suivra toujours la m&amp;ecirc;me proc&amp;eacute;dure&amp;nbsp;: l&amp;#39;utilisateur t&amp;eacute;l&amp;eacute;charge l&amp;#39;application depuis le browser (pour Silverilght un Xap) de mani&amp;egrave;re transparente. Le browser lance l&amp;#39;application, l&amp;#39;application s&amp;#39;initialise, charge son interface et se connecte &amp;agrave; diff&amp;eacute;rents agr&amp;eacute;gats de services (ou mashups) pour remplir son contenu. L&amp;#39;interaction avec les services se fait via cette interface r&amp;eacute;glement&amp;eacute;e et offerte par le fournisseur. Google place son mod&amp;egrave;le &amp;eacute;conomique l&amp;agrave; dessus. Nombre de ses services sont gratuits... mais limit&amp;eacute;s. Chacun d&amp;#39;eux am&amp;egrave;ne sur un autre service ...&amp;nbsp; limit&amp;eacute;. Le tout entrecoup&amp;eacute; de publicit&amp;eacute;s. L&amp;#39;acc&amp;egrave;s &amp;agrave; des services plus complet sera bien &amp;eacute;videmment payant. Microsoft ne peut plus se baser uniquement sur son mod&amp;egrave;le &amp;eacute;conomique &amp;agrave; base de Windows et D&amp;#39;Office mais doit suivre ce mod&amp;egrave;le. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;On ne doit pas limiter un applicatif et l&amp;#39;acc&amp;egrave;s &amp;agrave; des services &amp;agrave; une configuration de machine on doit la rendre accessible sans limites (je n&amp;#39;inclus pas ici les aspects commerciaux dans le &amp;quot;sans limites&amp;quot;). WPF peut &amp;ecirc;tre tr&amp;egrave;s utile dans le cadre de besoins bien pr&amp;eacute;cis. L&amp;agrave; ou le besoin de technologies que le browser et ses plugins ne peuvent pas offrir. Je pense &amp;agrave; la 3D, je pense au mode offline (bien que le terme offline risque de devenir rapidement d&amp;eacute;suet avec Live Mesh) ou bien encore des outils de d&amp;eacute;veloppement.&amp;nbsp;Je verrais plus ce type d&amp;#39;applicatifs &amp;quot;ponctuels&amp;quot;&amp;nbsp;en WPF qu&amp;#39;en Silverlight. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;La conclusion de tout cela c&amp;#39;est que pour faire connaitre une application et pour toucher un maximum de personne ce n&amp;#39;est plus au d&amp;eacute;veloppement Windows qu&amp;#39;il faut penser mais au d&amp;eacute;veloppement RIAs. Dans ce domaine, Silverlight avec la technologie .Net les environnements de d&amp;eacute;veloppement Microsoft et Windows Mobile a une r&amp;eacute;elle carte &amp;agrave; jouer.&amp;nbsp;Ajoutons qu&amp;rsquo;avec Live Mesh (plateforme de stockage en lien avec un support de synchronisation), SQL Server Data Service (base de donn&amp;eacute;es en ligne) et ADO.NET Data services, Microsoft avance &amp;agrave; grand pas sur sa strat&amp;eacute;gie Software + Services (autre mani&amp;egrave;re de parler du SaaS - Software As A Service).&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Il s&amp;rsquo;agit de faire du r&amp;eacute;seau un fournisseur de services et plus seulement un moyen physique de faire transiter des donn&amp;eacute;es. Tout cela contribue &amp;agrave; orienter le syst&amp;egrave;me d&amp;#39;information vers une architecture de services o&amp;ugrave; les clients riches tissent des liens sur le r&amp;eacute;seau vers des services de donn&amp;eacute;es h&amp;eacute;t&amp;eacute;roclites, formatent les donn&amp;eacute;es puis&amp;eacute;es de mani&amp;egrave;re &amp;agrave; r&amp;eacute;pondre au besoin sp&amp;eacute;cifique du client : c&amp;rsquo;est &amp;ccedil;a l&amp;rsquo;informatique &amp;agrave; la demande.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;"&gt;Aujourd&amp;#39;hui mes technologies de prediclections passent par Silverlight, le Framework Entity, ADO.NET Data Services et Xna (for ever :) )&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1645340" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/valentin/archive/tags/Services/default.aspx">Services</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/WPF/default.aspx">WPF</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Software+_2B00_+Services/default.aspx">Software + Services</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Internet/default.aspx">Internet</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Software+As+A+Service/default.aspx">Software As A Service</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Silverlight/default.aspx">Silverlight</category></item></channel></rss>