<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/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>Just code - Tamir Khason : Silverlight, SVG</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/SVG/default.aspx</link><description>Tags: Silverlight, SVG</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>New year – new blog or how to migrate Community Server to any other engine, supports XML-RPC</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2009/01/01/new-year-new-blog-or-how-to-migrate-community-server-to-any-other-engine-supports-xml-rpc.aspx</link><pubDate>Fri, 02 Jan 2009 02:33:04 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:205248</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Please update your bookmarks, because the new url of this blog is &lt;a href="http://khason.net/"&gt;http://khason.net/&lt;/a&gt; (you have not update RSS feeds, it will be done automatically). Why I did it? Why I decided to go to “stand-alone”… Well. there are some reasons. Generally, I do not want to explain all those here, but trust me, there are some. The main reason is, that there is no responsible person in charge for this blog platform in Microsoft Israel. This why, if your blog is popular and you have a respect to your blog visitors, you cannot host it here… Take a look into new comments notifications in my inbox. Would you answer your readers with such “small amount” of SPAM and capcha, that cannot be fixed already for three years in this platform? This how my inbox looks like for last three years. So now, you should not ask me, why I not answered your email or comments. Aren’t you? :)&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Capture" border="0" alt="Capture" src="http://blogs.microsoft.co.il/blogs/tamir/Capture_1D7350A7.jpg" width="354" height="397" /&gt; &lt;/p&gt;  &lt;p&gt;Currently, all comments in this blog are disabled, so if you want to comment, please use new url of posts (this will appear shortly in the beginning of each post). Also, this post will not be syndicated in RSS.&lt;/p&gt;  &lt;p&gt;So, this post is the last. I loved this platform, and loved people started it. But, unfortunately, it seemed, that bloggers community is not important enough for new platform managers. &lt;/p&gt;  &lt;p&gt;Also, If you want to learn &lt;a target="_blank" href="http://khason.net/dev/how-to-migrate-from-cs2007-to-wordpress-movable-type-or-any-other-blog-engine-supports-xml-rpc-with-c/"&gt;how to use C# and XML-RCP to migrate from CS2007, used in this platform, visit my new home&lt;/a&gt; :)&lt;/p&gt;  &lt;p&gt;Have a great year and, as always, be good people. This post marked with all possible tags automatically. Sorry.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=205248" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/soft/default.aspx">soft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/blogging+tools/default.aspx">blogging tools</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF+crossbow/default.aspx">WPF crossbow</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/source/default.aspx">source</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Mobile/default.aspx">Mobile</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/help/default.aspx">help</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+Gadgets/default.aspx">Windows Gadgets</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/thoughts/default.aspx">thoughts</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tools/default.aspx">tools</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/events/default.aspx">events</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/demos/default.aspx">demos</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF_2F00_E/default.aspx">WPF/E</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/download/default.aspx">download</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/jobs/default.aspx">jobs</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Accessibility/default.aspx">Accessibility</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Blogging+rules/default.aspx">Blogging rules</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/blogging+general/default.aspx">blogging general</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/fun/default.aspx">fun</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista+Battery+Saver/default.aspx">Vista Battery Saver</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/SkyDrive/default.aspx">SkyDrive</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+Live+Writer/default.aspx">Windows Live Writer</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+Live/default.aspx">Windows Live</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Dell/default.aspx">Dell</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DevAcademy2/default.aspx">DevAcademy2</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF+quiz/default.aspx">WPF quiz</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/x64/default.aspx">x64</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WF/default.aspx">WF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/SVG/default.aspx">SVG</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/XPS/default.aspx">XPS</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/TechedIsrael2008/default.aspx">TechedIsrael2008</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/teched/default.aspx">teched</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/XNA/default.aspx">XNA</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/PLINQ/default.aspx">PLINQ</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Micro+Framework/default.aspx">Micro Framework</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/SAP/default.aspx">SAP</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/XLINQ/default.aspx">XLINQ</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DirectX/default.aspx">DirectX</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Work+process/default.aspx">Work process</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Linux/default.aspx">Linux</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Mono/default.aspx">Mono</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DevAcademy3/default.aspx">DevAcademy3</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Math/default.aspx">Math</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/GIS/default.aspx">GIS</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Algorithms/default.aspx">Algorithms</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Charity/default.aspx">Charity</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Hardware/default.aspx">Hardware</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Interop/default.aspx">Interop</category></item><item><title>How to make Silverlight be AiR?</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/04/27/how-to-make-silverlight-be-air.aspx</link><pubDate>Mon, 28 Apr 2008 00:29:02 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:83135</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>24</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/how-to-make-silverlight-be-air/"&gt;http://khason.net/blog/how-to-make-silverlight-be-air/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Today we’ll speak about three issues&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;How to make Silverlight application to run as stand alone application and how to insert this application inside your application?&lt;/li&gt;    &lt;li&gt;How to escape Silverlight from it’s sand box (how to make it run in full trust mode)&lt;/li&gt;    &lt;li&gt;When first two items done, how to make Silverlight to access anyfile in your file system?&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Looks scary? Let’s see first reasons for those “hackery” targets. The main reason is to make Silverlight Air (you, probably understand what I’m speaking about :)). Why? When I want to build Silverlight Image Upload control. The one similar to those Yahoo, Facebook and many others have. With live preview, editing (before uploading), drag and drop, etc. Yes, I do not want ugly File Open dialog from Silverlight. I want it sexy, yet functional! To do this, we have to make Silverlight be able to access filesystem. Of cause I want to ask user to authorize me first, then I can get an access.&lt;/p&gt;  &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/HowtomakeSilverlightbeAiR_11FF0/image_b54b4803-58bc-41a7-9dd2-a7012758734f.png" width="561" height="407" /&gt; &lt;/p&gt;  &lt;p&gt;The other reason is to incorporate Silverlight control inside WinForms application. Why? There are some reasons - “light weigh stuff”, maybe :). Maybe banner ads inside desktop application. It’s just cool :). Well, there are some other more serious reasons. So let’s start. &lt;/p&gt;  &lt;h3&gt;First task – to make it run as stand alone application.&lt;/h3&gt;  &lt;p&gt;Well, this one is easy. All you have to do is to have WebBrowser control with Silverlight content inside it in your application. So, &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;WebBrowser wb = new WebBrowser();     &lt;br /&gt;wb.Parent = panel1;      &lt;br /&gt;wb.Dock = DockStyle.Fill;      &lt;br /&gt;wb.Url = new Uri(&amp;quot;http://0x15.net/play/SLFindResource/SLFindResource.html&amp;quot;);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We done. But we’re in desktop, thus I want it full trust… This is most interesting part of today’s post.&lt;/p&gt;  &lt;h3&gt;Second task – to make it run in User Full Trust mode.&lt;/h3&gt;  &lt;p&gt;First try – to incorporate Silverlight’s OCX (ActiveX) control. Add npctrl.dll from [Program Files]\Microsoft Silverlight\[Version] – this is ActiveX and Visual Studio will create wrapper with AxHost. This one is cool, but it wont work. why? As you, probably, know Silverlight connected to it’s web page host DOM when we’re using it as stand alone player it cannot find it’s document, thus initialization failed. So what to do? What can provide me DOM from one side and run in full trust from the other side. Someone remember what HTA is (it is not mobile device, it’s &lt;a href="http://en.wikipedia.org/wiki/HTML_Application" target="_blank"&gt;very beginning of RIA era&lt;/a&gt;). HTML applications were run by very special host, named &lt;strong&gt;mshta.exe&lt;/strong&gt; it’s in [Windows]\System32 folder and it’s still there. Everything running inside MSHTA will run by default in full trust mode. From one hand it’s regular IE, (do we have DOM), from other hand it’s make us able to run full trust internet application. Let’s use it (from code)&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ProcessStartInfo mshta = new ProcessStartInfo(&amp;quot;mshta&amp;quot;, &amp;quot;&lt;a href="http://0x15.net/play/SLFindResource/SLFindResource.html"&gt;http://0x15.net/play/SLFindResource/SLFindResource.html&amp;quot;);&lt;/a&gt;      &lt;br /&gt;Process p = Process.Start(mshta);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now we have strange window, running our Silverlight application. What’s next? Incorporate it inside our application. What’s the problem p (my process).MainWindowHandle and then SetParent for to the control I want. Well, it does not work. MSHTA has no (publicly) main window. So, we’ll find it and then change it’s parent. His class named “HTML Application Host Window Class”.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;LockWindowUpdate(GetDesktopWindow());     &lt;br /&gt;ProcessStartInfo mshta = new ProcessStartInfo(&amp;quot;mshta&amp;quot;, &amp;quot;&lt;a href="http://0x15.net/play/SLFindResource/SLFindResource.html"&gt;http://0x15.net/play/SLFindResource/SLFindResource.html&amp;quot;);&lt;/a&gt;      &lt;br /&gt;Process p = Process.Start(mshta);      &lt;br /&gt;p.WaitForInputIdle();      &lt;br /&gt;ptr = FindWindow(&amp;quot;HTML Application Host Window Class&amp;quot;, null); &lt;/p&gt;    &lt;p&gt;SetParent(ptr, panel1.Handle);     &lt;br /&gt;SendMessage(ptr, WM_SYSCOMMAND, SC_MAXIMIZE, 0); &lt;/p&gt;    &lt;p&gt;LockWindowUpdate(IntPtr.Zero);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Yu-hoo. We hosted Silverlight page inside our application. It’s full trust so, we can access file system. But wait… Silverlight is not designed to have an access to the file system. The only space it can see is isolated storage, thus it has no classes for listing files anywhere. what to do?&lt;/p&gt;  &lt;h3&gt;Third task – to make it access user’s file system&lt;/h3&gt;  &lt;p&gt;We need another ActiveX to run from Javascript (or C# code) that knows to access to file system. Our hosting document can initialize it and then expose relevant methods to Silverlight. What’s such class? Let’s back to gold era of unsafe computing – we have &lt;a href="http://msdn2.microsoft.com/en-us/library/z9ty6h50.aspx" target="_blank"&gt;Scripting.FileSystemObject&lt;/a&gt; there. This class is very dangerous it can do anything in local file system. Many system administrators using this class to script their evil login scripts (those black quick command line promps, that doing something bad to your system each time you’re logging in in your domain). It know everything about your disks and can be run from full trust environment. So, it’s just exactly what we need. Get all drives in your machine&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;drivetypes = [ &amp;#39;Unknown&amp;#39;, &amp;#39;Removable&amp;#39;, &amp;#39;Fixed&amp;#39;, &amp;#39;Network&amp;#39;, &amp;#39;CD-ROM&amp;#39;, &amp;#39;RAM Disk&amp;#39; ],     &lt;br /&gt;driveprops = [ &amp;#39;DriveLetter&amp;#39;, &amp;#39;DriveType&amp;#39;, &amp;#39;ShareName&amp;#39;, &amp;#39;IsReady&amp;#39;, &amp;#39;Path&amp;#39;, &amp;#39;RootFolder&amp;#39;, &amp;#39;FileSystem&amp;#39;, &amp;#39;SerialNumber&amp;#39;, &amp;#39;VolumeName&amp;#39;, &amp;#39;TotalSize&amp;#39;, &amp;#39;AvailableSpace&amp;#39;, &amp;#39;FreeSpace&amp;#39; ]; &lt;/p&gt;    &lt;p&gt;function getdrives() {     &lt;br /&gt; var fso = new ActiveXObject( &amp;#39;Scripting.FileSystemObject&amp;#39; ),      &lt;br /&gt;&amp;#160; e = new Enumerator(fso.Drives),      &lt;br /&gt;&amp;#160; add = function(i) {      &lt;br /&gt;&amp;#160;&amp;#160; i = driveprops[i];      &lt;br /&gt;&amp;#160;&amp;#160; var prop = f[i];      &lt;br /&gt;&amp;#160;&amp;#160; if( ( prop || prop===0 || prop===false ) &amp;amp;&amp;amp; ( i!==&amp;#39;AvailableSpace&amp;#39; || prop!==free ) ) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if( /(Type)$/.test( i ) ) { prop = drivetypes[ prop ]; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if( /(Size|Space)$/.test( i ) ) { prop = bykb( prop, true ); }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; s.push( i.toCamelCase() + &amp;#39;:\t&amp;#39; + ( i.length &amp;lt; 8 ? &amp;#39;\t&amp;#39; : &amp;#39;&amp;#39; ) + prop );      &lt;br /&gt;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160; },&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Then folders&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;function getfolder( s ) { s = trim( s ) || &amp;#39;C:&amp;#39;;     &lt;br /&gt; var fso = new ActiveXObject( &amp;#39;Scripting.FileSystemObject&amp;#39; ),      &lt;br /&gt;&amp;#160; e, f, i, r = [];      &lt;br /&gt; if( fso.FolderExists( s ) ) {      &lt;br /&gt;&amp;#160; f = fso.GetFolder( s );      &lt;br /&gt;&amp;#160; e = new Enumerator(f.SubFolders);      &lt;br /&gt;&amp;#160; for( ; !e.atEnd(); e.moveNext() ) {      &lt;br /&gt;&amp;#160;&amp;#160; if( ( i = e.item() ) ) { r.push( &amp;#39; &amp;#39; + i ); }      &lt;br /&gt;&amp;#160; }      &lt;br /&gt;&amp;#160; e = new Enumerator(f.files);      &lt;br /&gt;&amp;#160; for( ; !e.atEnd(); e.moveNext() ) {      &lt;br /&gt;&amp;#160;&amp;#160; if( ( i = e.item() ) ) { r.push( &amp;#39;&amp;#39; + i ); }      &lt;br /&gt;&amp;#160; }      &lt;br /&gt; }      &lt;br /&gt; return r;      &lt;br /&gt;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And files at the end&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;function getfile( form ) {     &lt;br /&gt; var fso = new ActiveXObject( &amp;#39;Scripting.FileSystemObject&amp;#39; ),      &lt;br /&gt;&amp;#160; forReading = 1, forWriting = 2, forAppending = 8,      &lt;br /&gt;&amp;#160; dd = function( o, s ) {      &lt;br /&gt;&amp;#160;&amp;#160; try {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; s = f[s] + &amp;#39;&amp;#39;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; o.value = s.replace( /^(\w{3}) (\w+) (\d\d?) ([\d:]+) ([\w+]+) (\d+)$/, &amp;#39;$3 $2 $6 $4&amp;#39; );      &lt;br /&gt;&amp;#160;&amp;#160; } catch(e) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; o.value = e.message;      &lt;br /&gt;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160; },&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Very cool we have files by using &lt;em&gt;f = fso.GetFile( name );&lt;/em&gt; method, now we can do anything with it. For example get or set attributes &lt;em&gt;f.attributes&lt;/em&gt;, or rename &lt;em&gt;f.Name = s&lt;/em&gt;, or, even delete it &lt;em&gt;f.Delete();&lt;/em&gt; Isn’t it really evil?&lt;/p&gt;  &lt;p&gt;We done. Now you can run Silverlight as full trust desktop application and, even host it wherever you want. Even inside calculator…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ProcessStartInfo calc = new ProcessStartInfo(&amp;quot;calc&amp;quot;);     &lt;br /&gt;using (Process p = Process.Start(calc))      &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; p.WaitForInputIdle();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SetParent(ptr, p.MainWindowHandle);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SendMessage(ptr, WM_SYSCOMMAND, SC_MAXIMIZE, 0);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; p.WaitForExit();      &lt;br /&gt;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Happy programming and be good people.&lt;/p&gt;  &lt;div style="padding-right:0px;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;display:inline;" id="scid:4c033bbc-1f2f-4686-a55f-26926c847a06:2898d5d6-b1a4-4450-bf95-f070a257036f" class="wlWriterSmartContent"&gt;&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/HowtomakeSilverlightbeAiR_11FF0/SilverForms_1.zip" title="SilverForms.zip [53.7 Kb]"&gt;SilverForms.zip [53.7 Kb]&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=83135" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF+crossbow/default.aspx">WPF crossbow</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/SVG/default.aspx">SVG</category></item><item><title>SVG vs. Silverlight head-to-head fight</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/01/24/svg-vs-silverlight-head-to-head-fight.aspx</link><pubDate>Thu, 24 Jan 2008 23:47:07 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:54109</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>4</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/svg-vs-silverlight-head-to-head-fight/"&gt;http://khason.net/blog/svg-vs-silverlight-head-to-head-fight/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Adobe &lt;a href="http://www.adobe.com/svg/eol.html" target="_blank"&gt;stops supporting SVG&lt;/a&gt; next year, thus there are some SVG consumers are looking for the replacement of this technology, by other, that will be supported. The only technology, can actually replace SVG is Silverlight. Yes, Flex, too, but it&amp;#39;s too complicated to perform transitions. Today, we&amp;#39;ll look into those two technologies and try to understand how to perform migration easily. Let&amp;#39;s start from SVG (Adobe SVG 3.x) vs SL (Silverlight 1.0) syntax&lt;/p&gt;  &lt;p&gt;&lt;u&gt;SVG&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;!DOCTYPE svg PUBLIC &amp;quot;-//W3C//DTD SVG 1.0//EN&amp;quot; &amp;quot;&lt;a href="http://www.w3.org/TR/SVG/DTD/svg10.dtd"&gt;http://www.w3.org/TR/SVG/DTD/svg10.dtd&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;lt;svg width=&amp;quot;200&amp;quot; height=&amp;quot;100&amp;quot;&amp;gt;       &lt;br /&gt;&amp;lt;/svg&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;u&gt;SL&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;Canvas&amp;#160; xmlns=&amp;quot;&lt;a href="http://schemas.microsoft.com/client/2007"&gt;http://schemas.microsoft.com/client/2007&amp;quot;&lt;/a&gt;       &lt;br /&gt;&amp;#160; Width=&amp;quot;200&amp;quot; Height=&amp;quot;100&amp;quot;&amp;gt;       &lt;br /&gt;&amp;lt;/Canvas&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Looks pretty the same, no? At least, very similar. Let&amp;#39;s see what&amp;#39;s going with text.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;SVG&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;text x=&amp;quot;10&amp;quot; y=&amp;quot;15&amp;quot; font-size=&amp;quot;12&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160; Hello World!       &lt;br /&gt;&amp;#160; &amp;lt;tspan x=&amp;quot;10&amp;quot; dy=&amp;quot;1.6em&amp;quot; font-size=&amp;quot;8&amp;quot;&amp;gt;This is&amp;lt;/tspan&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;tspan x=&amp;quot;10&amp;quot; dy=&amp;quot;1.6em&amp;quot; font-size=&amp;quot;20&amp;quot;&amp;gt;SVG text&amp;lt;/tspan&amp;gt;       &lt;br /&gt;&amp;lt;/text&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;u&gt;SL&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;TextBlock Canvas.Left=&amp;quot;10&amp;quot; Canvas.Top=&amp;quot;15&amp;quot; &amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;Run Text=&amp;quot;Hello World!&amp;quot; FontSize=&amp;quot;12&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;LineBreak/&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;Run Text=&amp;quot;This is&amp;quot; FontSize=&amp;quot;8&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;LineBreak/&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;Run Text=&amp;quot;Silverlight text&amp;quot;&amp;#160; FontSize=&amp;quot;20&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;lt;/TextBlock&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Similar too, but what&amp;#39;s about rendering? From now and on, you&amp;#39;ll need &lt;a href="http://www.microsoft.com/silverlight/install.aspx" target="_blank"&gt;Silverlight 1.0&lt;/a&gt; and &lt;a href="http://www.adobe.com/svg/viewer/install/" target="_blank"&gt;SVG 3.x&lt;/a&gt; plugins in order to see working samples.&lt;/p&gt;  &lt;p&gt;&lt;iframe style="width:510px;height:150px;" src="http://0x15.net/play/text.htm"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Let&amp;#39;s look closer&lt;/p&gt;  &lt;p&gt;&lt;img height="128" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/SVGvs.Silverlightheadtoheadfight_10823/image_45bacd80-774c-4762-95c4-157ea9d01be6.png" width="378" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;And even more closer&lt;/p&gt;  &lt;p&gt;&lt;img height="112" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/SVGvs.Silverlightheadtoheadfight_10823/image_17875a19-ab59-4286-bfef-d7bee6a13638.png" width="457" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Silverlight renders small and large text much better, then SVG do.&lt;/p&gt;  &lt;p&gt;Our next station is splines and simple geometry. &lt;/p&gt;  &lt;p&gt;&lt;u&gt;SVG&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;rect width=&amp;quot;100&amp;quot; height=&amp;quot;50&amp;quot; fill=&amp;quot;blue&amp;quot; stroke=&amp;quot;black&amp;quot;&amp;#160; stroke-width=&amp;quot;3&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot;/&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;u&gt;SL&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;Rectangle Width=&amp;quot;100&amp;quot; Height=&amp;quot;50&amp;quot; Fill=&amp;quot;Blue&amp;quot; Stroke=&amp;quot;Black&amp;quot; StrokeThickness=&amp;quot;3&amp;quot; Canvas.Left=&amp;quot;0&amp;quot; Canvas.Top=&amp;quot;150&amp;quot; /&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;That&amp;#39;s look very similar. What&amp;#39;s about lines?&lt;/p&gt;  &lt;p&gt;&lt;u&gt;SVG&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;path fill=&amp;quot;white&amp;quot; stroke=&amp;quot;black&amp;quot; stroke-width=&amp;quot;2&amp;quot; d=&amp;quot;M20,140 Q100,20 100,140 Q100,220 180,140&amp;quot; /&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;u&gt;SL&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;Path Fill=&amp;quot;White&amp;quot; Stretch=&amp;quot;Fill&amp;quot; Stroke=&amp;quot;Black&amp;quot; StrokeThickness=&amp;quot;2&amp;quot; Data=&amp;quot;M20,140 Q100,20 100,140 Q100,220 180,140&amp;quot;/&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;That&amp;#39;s the same. Even coordinates and tangents are equal. So, how it renders?&lt;/p&gt;  &lt;p&gt;&lt;img height="221" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/SVGvs.Silverlightheadtoheadfight_10823/image_58012e69-3ba9-40c1-bfe5-95cf368be8f2.png" width="379" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;iframe style="width:485px;height:251px;" src="http://0x15.net/play/slines.htm"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Well. There are some differences here.&lt;/p&gt;  &lt;p&gt;Never mind, let&amp;#39;s go on into animations&lt;/p&gt;  &lt;p&gt;&lt;u&gt;SVG&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;circle cx=&amp;quot;200&amp;quot; cy=&amp;quot;150&amp;quot; r=&amp;quot;40&amp;quot; fill=&amp;quot;red&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;animate attributeName=&amp;quot;cy&amp;quot; dur=&amp;quot;5s&amp;quot; repeatCount=&amp;quot;indefinite&amp;quot; keySplines=&amp;quot;0.5 0.1 0.9 0.5;0.1 0.5 0.5 0.9&amp;quot; calcMode=&amp;quot;spline&amp;quot; keyTimes=&amp;quot;0;2.5;5&amp;quot; values=&amp;quot;150;350;150&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/circle&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;u&gt;SL&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;Ellipse Width=&amp;quot;80&amp;quot; Height=&amp;quot;80&amp;quot; Fill=&amp;quot;Red&amp;quot; Canvas.Left=&amp;quot;160&amp;quot; Canvas.Top=&amp;quot;-91&amp;quot; x:Name=&amp;quot;ellipse&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Ellipse.Triggers&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;EventTrigger RoutedEvent=&amp;quot;Canvas.Loaded&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;BeginStoryboard&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Storyboard&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;DoubleAnimationUsingKeyFrames BeginTime=&amp;quot;00:00:00&amp;quot; Storyboard.TargetName=&amp;quot;ellipse&amp;quot; Storyboard.TargetProperty=&amp;quot;(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)&amp;quot; RepeatBehavior=&amp;quot;Forever&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SplineDoubleKeyFrame KeyTime=&amp;quot;00:00:02.5&amp;quot; Value=&amp;quot;200&amp;quot; KeySpline=&amp;quot;0.5 0.1 0.9 0.5&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SplineDoubleKeyFrame KeyTime=&amp;quot;00:00:05&amp;quot; Value=&amp;quot;0&amp;quot; KeySpline=&amp;quot;0.1 0.5 0.5 0.9&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/DoubleAnimationUsingKeyFrames&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Storyboard&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/BeginStoryboard&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/EventTrigger&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Ellipse.Triggers&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Ellipse.RenderTransform&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TransformGroup&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TranslateTransform/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/TransformGroup&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Ellipse.RenderTransform&amp;gt;       &lt;br /&gt;&amp;lt;/Ellipse&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Here, it looks like a lot of differences, however, if you&amp;#39;ll look into code, you&amp;#39;ll see, that there are no difference between the methods. Even key splines are the same. Let&amp;#39;s look deeper into code.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&lt;strong&gt;SVG&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top"&gt;&lt;strong&gt;SL&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;circle&lt;/td&gt;        &lt;td valign="top"&gt;Ellipse &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;animate&lt;/td&gt;        &lt;td valign="top"&gt;DoubleAnimationUsingKeyFrames &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;cx,cy&lt;/td&gt;        &lt;td valign="top"&gt;Width, Height&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;attributeName&lt;/td&gt;        &lt;td valign="top"&gt;TargetName+TargetProperty&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;dur&lt;/td&gt;        &lt;td valign="top"&gt;KeyTime&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;repeatCount&lt;/td&gt;        &lt;td valign="top"&gt;RepeatBehavior&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;keySplines&lt;/td&gt;        &lt;td valign="top"&gt;KeySpline+KeySpline&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;calcMode&lt;/td&gt;        &lt;td valign="top"&gt;SplineDoubleKeyFrame &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;keyTimes&lt;/td&gt;        &lt;td valign="top"&gt;KeyTime+KeyTime&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;values (absolute)&lt;/td&gt;        &lt;td valign="top"&gt;Value (relative)&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;That&amp;#39;s all. After all, there are very similar methods and objects are in use. The only difference, that Silverlight is much more flexible, then SVG in animation. Let&amp;#39;s see the result (if the ball is breaking on the edge, just reload internal page - this is load time issue)&lt;/p&gt;  &lt;p&gt;&lt;iframe style="width:484px;height:480px;" src="http://0x15.net/play/SVG-SL.htm"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;So, after all if you know SVG, you can start developing Silverlight (don&amp;#39;t go back :) ).&lt;/p&gt;  &lt;p&gt;All this nice, but what&amp;#39;s the problems? Well, there are some. In Silverlight 1.0, there is no Tile or Visual brushes, thus you can not create following effect (this is checker board)&lt;/p&gt;  &lt;p&gt;&lt;u&gt;SVG&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;defs&amp;gt;     &lt;br /&gt;&amp;lt;pattern id=&amp;quot;P01&amp;quot; width=&amp;quot;10&amp;quot; height=&amp;quot;10&amp;quot; patternUnits=&amp;quot;userSpaceOnUse&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;rect width=&amp;quot;10&amp;quot; height=&amp;quot;10&amp;quot; fill=&amp;quot;#FFFFFF&amp;quot; stroke=&amp;quot;#000000&amp;quot; stroke-width=&amp;quot;0.1&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;lt;/pattern&amp;gt;      &lt;br /&gt;&amp;lt;/defs&amp;gt;      &lt;br /&gt;&amp;lt;rect x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; width=&amp;quot;400&amp;quot; height=&amp;quot;400&amp;quot; fill=&amp;quot;url(#P01)&amp;quot;/&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But no worry, you probably, will have all you need and much more in &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx" target="_blank"&gt;Silverlight 2.0&lt;/a&gt; :)&lt;/p&gt;  &lt;p&gt;Have a nice day.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=54109" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/source/default.aspx">source</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/SVG/default.aspx">SVG</category></item></channel></rss>