<?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 : Web</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Web/default.aspx</link><description>Tags: Web</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>Silverlight Bidi Controls Library RC0 and movement from Beta 2 to RC0</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/10/05/silverlight-bidi-controls-library-rc0-and-movement-from-beta-2-to-rc0.aspx</link><pubDate>Sun, 05 Oct 2008 16:31:23 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:150052</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>7</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/silverlight-bidi-controls-library-rc0-and-movement-from-beta-2-to-rc0/"&gt;http://khason.net/blog/silverlight-bidi-controls-library-rc0-and-movement-from-beta-2-to-rc0/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Finally, I got free minute to convert &lt;a href="http://www.codeplex.com/SilverlightRTL/"&gt;Silverlight BiDi controls&lt;/a&gt; from Silverlight beta 2 to RC0 (you can download SL rc0 tools for VS2008 &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=c22d6a7b-546f-4407-8ef6-d60c8ee221ed&amp;amp;displaylang=en"&gt;here&lt;/a&gt;) and as usual some breaking changes (the full list is &lt;a href="http://download.microsoft.com/download/6/f/e/6fe1f43d-9d0c-4346-ad08-602df9bcb3cf/BreakingChangesBetweenBeta2andRelease.doc"&gt;here&lt;/a&gt;)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Calendar and DatePicker moved from System.Windows.Controls.Extended into System.Windows.Controls – Extended namespace is now deprecated.&lt;/li&gt;    &lt;li&gt;CalendarButton is not inside System.Windows.Controls.Primitives&lt;/li&gt;    &lt;li&gt;TypeConverter.CanConvertFrom(Type sourceType) was changed and now it has new first parameter ITypeDescriptorContext context&lt;/li&gt;    &lt;li&gt;TypeConverter.CanConvertFrom(object value) was changed and now it has new first parameter ITypeDescriptorContext context and second parameter System.Globalization.CultureInfo culture&lt;/li&gt;    &lt;li&gt;TypeConverter.ConvertFromString is not virtual anymore&lt;/li&gt;    &lt;li&gt;TextDecorationCollectionConverter was removed&lt;/li&gt;    &lt;li&gt;generic.xaml should be placed into themes directory (as in WPF)&lt;/li&gt;    &lt;li&gt;VisualTransition.Duration is not VisualTransition.GeneratedDuration&lt;/li&gt;    &lt;li&gt;ContentPresenter has no HorizontalContentAlignment and VerticalContentAlignment. It has HorizontalAlignment and VerticalAlignment now. Also it has no Background, Padding,TextAlignment,TextDecorations and TextWrapping properties&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Those, basically, all changes done in Silverlight RTL support library. So, &lt;a href="http://www.codeplex.com/SilverlightRTL/Release/ProjectReleases.aspx"&gt;you can download and use the latest version&lt;/a&gt; within Silverlight RC0 version&lt;/p&gt;  &lt;p&gt;Have a nice day and be good people.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=150052" width="1" height="1"&gt;</description><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/source/default.aspx">source</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/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/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Free Microsoft Expression series video training catalogs</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/10/04/free-microsoft-expression-series-video-training-catalogs.aspx</link><pubDate>Sat, 04 Oct 2008 07:44:55 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:149527</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>2</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/free-microsoft-expression-series-video-training-catalogs/"&gt;http://khason.net/blog/free-microsoft-expression-series-video-training-catalogs/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;MSDN download center just published video catalogs, where you can find sample chapters of Total Training’s video series for Microsoft Expression studio. Worth to download and see. Here the breakdown by products&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Expression Blend 2 [&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5c22a9da-8577-4cc8-988f-580a76826407&amp;amp;displaylang=en&amp;amp;tm"&gt;Windows&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=bf1bd842-cb96-40f5-8329-3124c0ae258a&amp;amp;displaylang=en&amp;amp;tm"&gt;Mac&lt;/a&gt;]&lt;/li&gt;    &lt;li&gt;Expression Encoder 2 [&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=90bdea8d-3559-498b-b4d1-b6f9f3b10536&amp;amp;displaylang=en&amp;amp;tm"&gt;Windows&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=70acf5ca-45c4-441a-9b62-249df27dd6d0&amp;amp;displaylang=en&amp;amp;tm"&gt;Mac&lt;/a&gt;]&lt;/li&gt;    &lt;li&gt;Expression Design 2 [&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ba982ba8-c336-4ff1-b65d-936dace16e24&amp;amp;displaylang=en&amp;amp;tm"&gt;Windows&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=50d5081f-5bf8-4f72-b7b2-04aa1fdbff69&amp;amp;displaylang=en&amp;amp;tm"&gt;Mac&lt;/a&gt;]&lt;/li&gt;    &lt;li&gt;Expression Media 2 [&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=14762326-edbe-43e8-bc52-4dd9ec50d1d3&amp;amp;displaylang=en&amp;amp;tm"&gt;Windows&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=3a50d8d4-a9df-4368-a8f5-0bce1a27bc90&amp;amp;displaylang=en&amp;amp;tm"&gt;Mac&lt;/a&gt;]&lt;/li&gt;    &lt;li&gt;Expression Web 2 [&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=e2528d89-0a58-4f27-b69c-c89951d9810d&amp;amp;displaylang=en&amp;amp;tm"&gt;Windows&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=4dc45321-afc4-40c2-9a94-c229197f942d&amp;amp;displaylang=en&amp;amp;tm"&gt;Mac&lt;/a&gt;]&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Also, if you are “in” Office development, it makes sense to take a look in to &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7554f536-8c28-4598-9b72-ef94e038c891&amp;amp;displaylang=en&amp;amp;tm"&gt;Data Connectivity Components for Office 2007 System&lt;/a&gt;. It can be used by non-Microsoft Office applications to read data from Office system files. &lt;/p&gt;  &lt;p&gt;Happy downloading!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=149527" 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/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/promo/default.aspx">promo</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/Web/default.aspx">Web</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/TECH/default.aspx">TECH</category></item><item><title>.NET 3.5 SP1 is RTM and available for download</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/08/11/net-3-5-sp1-is-rtm-and-available-for-download.aspx</link><pubDate>Mon, 11 Aug 2008 15:12:48 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:129731</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>3</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/net-35-sp1-is-rtm-and-available-for-download/"&gt;http://khason.net/blog/net-35-sp1-is-rtm-and-available-for-download/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;  &lt;p&gt;For all those who asked, .NET 3.5 SP1 is final and available for download. What’s inside?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ASP.NET Dynamic data&lt;/li&gt;    &lt;li&gt;Core improvements for CLR&lt;/li&gt;    &lt;li&gt;A lot of performance improvements in WPF&lt;/li&gt;    &lt;li&gt;ClickOnce enhancements&lt;/li&gt;    &lt;li&gt;ADO.NET with Data Services and Entity Framework&lt;/li&gt;    &lt;li&gt;LINQ2SQL and Data Provider for SQL Server 2008, that was released last week&lt;/li&gt;    &lt;li&gt;WCF with easier DataContract serialization&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Download it with &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ab99342f-5d1a-413d-8319-81da479ab0d7&amp;amp;DisplayLang=en"&gt;Web Installation&lt;/a&gt; or as &lt;a href="http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe"&gt;Full Package&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For more information, please see &lt;a href="http://www.microsoft.com/downloads/info.aspx?na=40&amp;amp;p=1&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=ab99342f-5d1a-413d-8319-81da479ab0d7&amp;amp;u=http%3a%2f%2fgo.microsoft.com%2ffwlink%2f%3fLinkId%3d122089"&gt;Read Me&lt;/a&gt; and &lt;a href="http://www.microsoft.com/downloads/info.aspx?na=40&amp;amp;p=2&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=ab99342f-5d1a-413d-8319-81da479ab0d7&amp;amp;u=http%3a%2f%2fsupport.microsoft.com%2fkb%2f951847"&gt;KB&lt;/a&gt; about .NET 3.5 SP1 RTM. If you faced with any issue, please provide us with feedback &lt;a href="https://connect.microsoft.com/VisualStudio"&gt;via MS Connect&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=129731" width="1" height="1"&gt;</description><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/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/promo/default.aspx">promo</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/download/default.aspx">download</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/WCF/default.aspx">WCF</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/LINQ/default.aspx">LINQ</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Arabic and Hebrew languages bidirectional support for Silverlight 2.0 beta 2</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/07/17/arabic-and-hebrew-languages-bidirectional-support-for-silverlight-2-0-beta-2.aspx</link><pubDate>Thu, 17 Jul 2008 14:27:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:119417</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>34</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/arabic-and-hebrew-languages-bidirectional-support-for-silverlight-20-beta-2/"&gt;http://khason.net/blog/arabic-and-hebrew-languages-bidirectional-support-for-silverlight-20-beta-2/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;
&lt;p&gt;Those days, I’m, together with guys from Microsoft Egypt and &lt;a href="http://santeon.com"&gt;Santeon&lt;/a&gt;, finishing development of bidirectional input and output support for Silverlight. I want you to take part in alpha testing of this solution. Please see the test form here and try it.&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://silverlight.services.live.com/invoke/17226/BidiTest2/iframe.html" style="width:500px;height:400px;" scrolling="no" frameborder="0"&gt;&amp;amp;amp;lt;noframes&amp;amp;amp;gt;Visit &amp;amp;amp;lt;a href=&amp;quot;http://blogs.microsoft.co.il/blogs/tamir/archive/2008/07/17/arabic-and-hebrew-languages-bidirectional-support-for-silverlight-2-0-beta-2.aspx&amp;quot;&amp;amp;amp;gt;original article&amp;amp;amp;lt;/a&amp;amp;amp;gt; to test&amp;amp;amp;lt;/noframes&amp;amp;amp;gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Also, you can download &lt;a href="http://www.codeplex.com/SilverlightRTL/SourceControl/ListDownloadableCommits.aspx"&gt;latest development build&lt;/a&gt; or &lt;a href="http://www.codeplex.com/SilverlightRTL/Release/ProjectReleases.aspx"&gt;compiled binary version with debug symbols&lt;/a&gt; and try it yourself. Please, if you’re in any issue, report it, by using &lt;a href="http://www.codeplex.com/SilverlightRTL/WorkItem/List.aspx"&gt;issue tracker in CodePlex&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In order to use it, all you have to do is to use custom namespace within your project and then, you’ll be able to get almost all controls, you know, but with Arabic and Hebrew RTL and LTR support. You have to set one property: FlowDirection to change the rendering method (exactly as in WPF). Here an example of usage.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;UserControl x:Class=&amp;quot;BidiTest2.Page&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns=&amp;quot;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation%22"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:x=&amp;quot;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml%22"&gt;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:l=&amp;quot;clr-namespace:System.Windows.BidiControls;assembly=BidiControls&amp;quot;&amp;gt; &lt;br /&gt;… &lt;br /&gt;&amp;lt;l:TextBlock FlowDirection=&amp;quot;LeftToRight&amp;quot; Text=&amp;quot;שלום עולם&amp;quot;/&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;l:TextBox FlowDirection=&amp;quot;RightToLeft&amp;quot; Text=&amp;quot;{Binding Text, Mode=TwoWay}&amp;quot;/&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;That’s all. Thank you for your cooperation.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/ArabicandHebrewlanguagesbidirecti.0beta2_92E8/image_160565ad-72a1-4fed-8640-a3d2142a2b95.png" title="image" alt="image" width="258" border="0" height="184" /&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=119417" width="1" height="1"&gt;</description><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/source/default.aspx">source</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/promo/default.aspx">promo</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/demos/default.aspx">demos</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/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/Windows+Live/default.aspx">Windows Live</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></item><item><title>Mobile version of this blog</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/07/15/mobile-version-of-this-blog.aspx</link><pubDate>Tue, 15 Jul 2008 17:00:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:118099</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>0</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/mobile-version-of-this-blog/"&gt;http://khason.net/blog/mobile-version-of-this-blog/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;10x to great service of &lt;a href="http://www.mofuse.com/"&gt;mofuse&lt;/a&gt;, I have &lt;a href="http://m.0x15.net/"&gt;mobile version&lt;/a&gt; of this blog now. So bookmark it: &lt;a title="http://m.0x15.net/" href="http://m.0x15.net/"&gt;http://m.0x15.net/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/Mobileversionofthisblog_B6DC/image_222a37ec-f62c-41a3-a5e5-e6eecb4df709.png" width="133" height="249" /&gt; &lt;img title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/Mobileversionofthisblog_B6DC/image_341211ed-35ba-486b-925b-6c86b5d390e7.png" width="134" height="251" /&gt; &lt;/p&gt;  &lt;p&gt;Here the QR code for your convenience&lt;/p&gt;  &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/Mobileversionofthisblog_B6DC/image_4a1e7bb2-68ba-4fc8-a4f8-6c601f7b67ae.png" width="160" height="159" /&gt; &lt;/p&gt; &lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=118099" width="1" height="1"&gt;</description><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/Mobile/default.aspx">Mobile</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/tools/default.aspx">tools</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/blogging+general/default.aspx">blogging general</category></item><item><title>TechEd preparation session + other announcements</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/07/14/teched-preparation-session-other-announcements.aspx</link><pubDate>Mon, 14 Jul 2008 14:19:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:116461</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>2</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/teched-preparation-session-other-announcements/"&gt;http://khason.net/blog/teched-preparation-session-other-announcements/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;If you want to attend my preparations &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/06/13/presenting-at-teched-developers-south-africa-2008-durban.aspx"&gt;before TechEd&lt;/a&gt;, you’re invited to attend 27-Jul in Microsoft Ra’anana. &lt;/p&gt;  &lt;p&gt;What is preparation session? This is the training for myself. I’ll present all four session (each one is an hour + one hour rep.) This is your chance to hear live my &lt;a href="http://www.tech-ed.co.za/"&gt;TechEd South Africa&lt;/a&gt; sessions, &lt;u&gt;without&lt;/u&gt; paying the fee (ZAR 4,500 which is about $600)&lt;/p&gt; &lt;p&gt;Please note, that &lt;b&gt;all lectures are in English&lt;/b&gt; (not in Hebrew)&lt;/p&gt; &lt;p&gt;Here the agenda for &lt;strong&gt;27-Jul (Sunday)&lt;/strong&gt;. It will take place in &lt;strong&gt;Microsoft Israel building&lt;/strong&gt; in &lt;strong&gt;2, Ha&amp;#39;Pnina st. Ranana, Israel&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&lt;em&gt;Time&lt;/em&gt;&lt;/td&gt;        &lt;td valign="top"&gt;&lt;em&gt;Session title&lt;/em&gt;&lt;/td&gt;        &lt;td valign="top"&gt;&lt;em&gt;Conference room&lt;/em&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;8:30-10:30&lt;/td&gt;        &lt;td valign="top"&gt;Creating Rich Applications with Windows Presentation Foundation (300)&lt;/td&gt;        &lt;td valign="top"&gt;Media Center&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;11:00-13:00&lt;/td&gt;        &lt;td valign="top"&gt;WPF Performance (400)&lt;/td&gt;        &lt;td valign="top"&gt;Visual Studio&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;14:30-16:30&lt;/td&gt;        &lt;td valign="top"&gt;Game Development Using Microsoft’s Latest Technologies (300)&lt;/td&gt;        &lt;td valign="top"&gt;Vista&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;17:00-19:00&lt;/td&gt;        &lt;td valign="top"&gt;Understanding Reflection (400)&lt;/td&gt;        &lt;td valign="top"&gt;Vista&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.tech-ed.co.za/"&gt;&lt;img title="clip_image002" border="0" alt="clip_image002" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/TechEdpreparationsessionotherannouncemen_910A/clip_image002_9a37273d-db57-4610-9325-ac04e81a48db.jpg" width="164" height="63" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Also, be sure, you’re attending my session in Expert Days 11-14 August&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;12-Aug, &lt;a href="http://www.e4d.co.il/events/expertdays/Course.aspx?CourseID=027&amp;amp;Course=Windows%20Presentation%20Foundation%20for%20fellow%20developers"&gt;Windows Presentation Foundation for fellow developers – 027&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;13-Aug, &lt;a href="http://www.e4d.co.il/events/expertdays/Course.aspx?CourseID=020&amp;amp;Course=Mastering%20Microsoft%20Silverlight%202.0"&gt;Mastering Microsoft Silverlight 2.0 – 020&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;14-Aug, &lt;strong&gt;&lt;a href="http://www.e4d.co.il/events/expertdays/Course.aspx?CourseID=011&amp;amp;Course=Advanced%20.NET%203.5%20SP1%20%E2%80%93%20Windows%20Presentation%20Foundation"&gt;Advanced .NET 3.5 SP1 – Windows Presentation Foundation – 011&lt;/a&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And/or if you were not able to attend &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/05/20/silverlight-2-0-for-building-rich-internet-applications-local-event.aspx"&gt;Silverlight 2.0 for building Rich Internet Applications event&lt;/a&gt;, you are welcome &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032382418&amp;amp;culture=he-IL"&gt;to book the next session at 23-Jul&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;That’s all for now, see ya…&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=116461" width="1" height="1"&gt;</description><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/promo/default.aspx">promo</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/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/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/teched/default.aspx">teched</category></item><item><title>Silverlight Visual Tree Investigation</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/07/07/silverlight-visual-tree-investigation.aspx</link><pubDate>Mon, 07 Jul 2008 11:44:31 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:113648</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>3</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/silverlight-visual-tree-investigation/"&gt;http://khason.net/blog/silverlight-visual-tree-investigation/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Wait a moment. Silverlight has Visual and Logical Trees as well as WPF? Not exactly. The design more similar to how it was in WinForms (Parent-Child relationship). But dev team made all possible to make it syntactically similar to WPF. Let’s start&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Challenge&lt;/strong&gt;: Find and hold references to all element, contains text.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Recursive VisualTreeHelper (introduced in SL2.0 b2)&lt;/p&gt;  &lt;p&gt;First of all we should know, that Silverlight is not ready for manufacture, thus direct references might produce memory leaks, thus we’ll use WeakReference to hold pointers to SL objects.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;First step&lt;/strong&gt;: We know for sure, that TextBox and TextBlock controls has Text property, that holds only text. Also TextBlock can hold Inlines collection with Runs and LineBreaks. Let’s find them all&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;internal static List&amp;lt;WeakReference&amp;gt; GetTextElements(this DependencyObject root)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;List&amp;lt;WeakReference&amp;gt; res = new List&amp;lt;WeakReference&amp;gt;();      &lt;br /&gt;if (root is TextBlock | root is TextBox)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &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; res.Add(new WeakReference(root));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Next, we know, that ContentControl can hold text directly inside Content property. We’ll find them too, but should check if it holds text inside…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;else if (root is ContentControl)     &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; {      &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; (root as ContentControl).CheckAndAddStringContentControl(ref res);      &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; }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now ItemsControl. It can hold inside either ContentElement, TextBox, TextBlock or other. So we should check inside it too.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;else if (root is ItemsControl)     &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; {      &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; ItemsControl ic = root as ItemsControl;      &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; for (int i = 0; i &amp;lt; ic.Items.Count; i++)      &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; {      &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; if (ic.Items[i] is ContentControl)      &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; {      &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; (ic.Items[i] as ContentControl).CheckAndAddStringContentControl(ref res);      &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; }      &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; else      &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; {      &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; List&amp;lt;WeakReference&amp;gt; tmp = (ic.Items[i] as DependencyObject).GetTextElements();      &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; if (tmp != null &amp;amp;&amp;amp; tmp.Count &amp;gt; 0)      &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; {      &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;#160;&amp;#160;&amp;#160;&amp;#160; res.AddRange(tmp);      &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; }      &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; }      &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; }      &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; }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And last, but not least is to dig into all child of each control.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;else     &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; {      &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; int cnt = VisualTreeHelper.GetChildrenCount(root); &lt;/p&gt;    &lt;p&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; for (int i = 0; i &amp;lt; cnt; i++)     &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; {      &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; DependencyObject d = VisualTreeHelper.GetChild(root, i);      &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; List&amp;lt;WeakReference&amp;gt; tmp = d.GetTextElements();      &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; if (tmp != null &amp;amp;&amp;amp; tmp.Count &amp;gt; 0)      &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; {      &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; res.AddRange(tmp);      &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; } &lt;/p&gt;    &lt;p&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; }     &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; }      &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; return res;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Step two&lt;/strong&gt;: Check whether object contains text inside. This one is simple. If not, we’ll call the main method to inter inside the control and check deeper.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;internal static void CheckAndAddStringContentControl(this ContentControl cc, ref List&amp;lt;WeakReference&amp;gt; res)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &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; if (cc.Content is string)      &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; {      &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; res.Add(new WeakReference(cc));      &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; }      &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; else      &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; res.AddRange(cc.GetTextElements());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We done. Now we have WeakReferences collection of all items, which contains text in our page.&lt;/p&gt;  &lt;p&gt;Have a good day and be nice one to another.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=113648" 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/WPF_2F00_E/default.aspx">WPF/E</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/.NET+3.5/default.aspx">.NET 3.5</category></item><item><title>Printouts of the slides, presented on Silverlight 2.0 open house today</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/06/30/printouts-of-the-slides-presented-on-silverlight-2-0-open-house-today.aspx</link><pubDate>Mon, 30 Jun 2008 20:26:45 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:110010</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>2</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/printouts-of-the-slides-presented-on-silverlight-20-open-house-today/"&gt;http://khason.net/blog/printouts-of-the-slides-presented-on-silverlight-20-open-house-today/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Thank you all, who participated today in &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/05/20/silverlight-2-0-for-building-rich-internet-applications-local-event.aspx"&gt;Silverlight 2.0 for building Rich Internet Applications event&lt;/a&gt;. I uploaded printouts of the slides, presented during the session here. So, you can download it for reference.&lt;/p&gt;  &lt;p&gt;I’m really interesting within your feedback (&lt;em&gt;leave comments&lt;/em&gt;) in order for me to be able to enhance it for future events.&lt;/p&gt;  &lt;p&gt;Also, I want to remind you, that due to lack of space &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/06/26/please-do-not-ask-me-we-cannot-handle-more.aspx"&gt;we were unable to handle all those who want to attend&lt;/a&gt;, thus we decided &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/06/29/silverlight-2-0-for-building-rich-internet-applications-local-event-take-2.aspx"&gt;to make another session within two weeks&lt;/a&gt;, so can &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032382418&amp;amp;culture=he-IL"&gt;register here&lt;/a&gt;. Remember, only registered attendees, who with confirmation received will allow to enter. So, hurry up.&lt;/p&gt;  &lt;p&gt;If you want to learn more about Silverlight, you can register to attend Expert Days “&lt;strong&gt;&lt;a href="http://www.e4d.co.il/events/expertdays/Course.aspx?CourseID=020&amp;amp;Course=Mastering%20Microsoft%20Silverlight%202.0"&gt;Mastering Microsoft Silverlight 2.0 – 020&lt;/a&gt;”&lt;/strong&gt; full day course, &lt;strong&gt;13-August&lt;/strong&gt;, were we’ll have Silverlight 2.0 deep dive training day. You can also review another two courses, I’ll have there: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;12-Aug “&lt;strong&gt;&lt;a href="http://www.e4d.co.il/events/expertdays/Course.aspx?CourseID=027&amp;amp;Course=Windows%20Presentation%20Foundation%20for%20fellow%20developers"&gt;Windows Presentation Foundation for fellow developers – 027&lt;/a&gt;&lt;/strong&gt;”&lt;/li&gt;    &lt;li&gt;14-Aug “&lt;strong&gt;&lt;a href="http://www.e4d.co.il/events/expertdays/Course.aspx?CourseID=011&amp;amp;Course=Advanced%20.NET%203.5%20SP1%20%E2%80%93%20Windows%20Presentation%20Foundation"&gt;Advanced .NET 3.5 SP1 – Windows Presentation Foundation – 011&lt;/a&gt;&lt;/strong&gt;”&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/110009/download.aspx"&gt;&lt;strong&gt;Download slides from today session &amp;gt;&amp;gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032382418&amp;amp;culture=he-IL"&gt;&lt;strong&gt;Register to attend next event at 23 July &amp;gt;&amp;gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/Printoutsoftheslidespres.0openhousetoday_E73D/image_2977810c-d3f4-451a-bb97-26b45857a156.png" width="422" height="215" /&gt; &lt;/p&gt;  &lt;p&gt;Thank you and leave a comment…&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=110010" width="1" height="1"&gt;</description><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/events/default.aspx">events</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/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/blogging+general/default.aspx">blogging general</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Silverlight 2.0 for building Rich Internet Applications (Local Event) – Take 2</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/06/29/silverlight-2-0-for-building-rich-internet-applications-local-event-take-2.aspx</link><pubDate>Sun, 29 Jun 2008 22:42:31 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:109845</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>1</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/silverlight-20-for-building-rich-internet-applications-local-event-%e2%80%93-take-2/"&gt;http://khason.net/blog/silverlight-20-for-building-rich-internet-applications-local-event-%e2%80%93-take-2/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;  &lt;p&gt;As &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/06/26/please-do-not-ask-me-we-cannot-handle-more.aspx3"&gt;promised earlier&lt;/a&gt;, the next session of &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/05/20/silverlight-2-0-for-building-rich-internet-applications-local-event.aspx"&gt;Silverlight 2.0 for building Rich Internet Applications&lt;/a&gt; will take place at &lt;strong&gt;23 July, 8:30 AM-12:30 PM&lt;/strong&gt; in ILDC. This is exactly the same session for those, who unable to attend tomorrow due to lack of place. &lt;/p&gt;  &lt;p&gt;Please, this time, try to &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032382418&amp;amp;culture=he-IL"&gt;register as soon as possible&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; to assure seat assignment.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032382418&amp;amp;culture=he-IL"&gt;Register to attend Silverlight 2.0 for building RIA &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/Sil.0forbuildingRichInternetApplications_D882/image_c66f0029-e65a-4b72-bada-0315ca465f6d.png" alt="" /&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=109845" width="1" height="1"&gt;</description><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/events/default.aspx">events</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/blogging+general/default.aspx">blogging general</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Please do not ask me. We cannot handle more…</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/06/26/please-do-not-ask-me-we-cannot-handle-more.aspx</link><pubDate>Thu, 26 Jun 2008 17:34:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:108797</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>0</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/please-do-not-ask-me-we-cannot-handle-more%e2%80%a6/"&gt;http://khason.net/blog/please-do-not-ask-me-we-cannot-handle-more%e2%80%a6/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;Monday next week, I’m &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/05/20/silverlight-2-0-for-building-rich-internet-applications-local-event.aspx"&gt;making half day session about building rich internet applications with Silverlight 2.0&lt;/a&gt; in ILDC. The &lt;u&gt;registration is over a while ago&lt;/u&gt;, but during this week, I got very large amount of email, IMs and phones calls with appeal to attend. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Sorry, we’re fully booked (currently about twice of available seats and it&amp;#39;s about 200) and cannot handle any more. &lt;u&gt;Only those who registered and got confirmations will allow to enter&lt;/u&gt;. It is for your own convenience!&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;I promise, that within next two weeks &lt;u&gt;I’ll make the same session again&lt;/u&gt; for all those, who want to come, but unable to register and attend (after a small arrangement, I’ll publish here next date).&lt;/p&gt;  &lt;p&gt;Thank you again for understanding and see you soon.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/Sil.0forbuildingRichInternetApplications_D882/image_c66f0029-e65a-4b72-bada-0315ca465f6d.png" alt="" /&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=108797" width="1" height="1"&gt;</description><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/events/default.aspx">events</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/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/blogging+general/default.aspx">blogging general</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>How to consume WCF or Webservice from Vista Sidebar gadget by using Silverlight?</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/06/23/how-to-consume-wcf-or-webservice-from-vista-sidebar-gadget-by-using-silverlight.aspx</link><pubDate>Tue, 24 Jun 2008 01:37:10 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:107795</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>7</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-consume-wcf-or-webservice-from-vista-sidebar-gadget-by-using-silverlight/"&gt;http://khason.net/blog/how-to-consume-wcf-or-webservice-from-vista-sidebar-gadget-by-using-silverlight/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;The challenge today is really simple. All we have to do is to write &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx"&gt;Silverlight&lt;/a&gt;&amp;#160;&lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+Gadgets/default.aspx"&gt;Vista Sidebar Gadget&lt;/a&gt;, that consumes either &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WCF/default.aspx"&gt;WCF&lt;/a&gt;, &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/ASP.NET/default.aspx"&gt;ASMX&lt;/a&gt; or &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Web/default.aspx"&gt;REST&lt;/a&gt; based service. Really simple, isn’t it? Let’s start&lt;/p&gt;  &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/HowtoconsumeWCForWebservicefromVistaSide_13000/image_b882e2d3-27ca-43d7-8549-cf3f0e48d342.png" width="401" height="103" /&gt; &lt;/p&gt;  &lt;h3&gt;Build server side services&lt;/h3&gt;  &lt;p&gt;We should start from services. This is very straight forward mission. Here the logic I want to implement&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;public string Echo(string input)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return string.Format(&amp;quot;ACK from {0}&amp;quot;, input);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Well, WCF? We should mark service and operation contracts. That’s all&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[ServiceContract(Namespace = &amp;quot;&amp;quot;)]     &lt;br /&gt;public class EchoService      &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [OperationContract]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public string Echo(string input)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return string.Format(&amp;quot;ACK from WCF with {0}&amp;quot;, input);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;    &lt;p&gt; }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This does not works. Why? Silverlight knows only consumes ASP.NET compatible (simplified) web services, thus we should add following attribute to the our class attributes collection&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[ServiceContract(Namespace = &amp;quot;&amp;quot;)]     &lt;br /&gt;[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]      &lt;br /&gt;public class EchoService      &lt;br /&gt;{&lt;/p&gt; &lt;/blockquote&gt;  &lt;div&gt;   &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;Now, the service is discoverable and accessible by Silverlight. Great news. Now let’s put it into our shared host. Hmm, we got strange error: “Deploying WCF Services: This collection already contains an address with scheme http.” What the hell is it?&lt;/p&gt;    &lt;p&gt;This is shared hosting problem. Your host provider uses virtual IP and host addresses and has number of different web services, sitting on the same shared host. How to solve it? &lt;/p&gt;    &lt;p&gt;Simple, all you have to do is to specify your own service host factory. Here the example of classes to put into code behind&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;class SLHostFactory : ServiceHostFactory       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SLHost customServiceHost =        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new SLHost(serviceType, new Uri(&amp;quot;[Your URL goes here]&amp;quot;,UriKind.Absolute));        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return customServiceHost;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;} &lt;/p&gt;      &lt;p&gt;class SLHost : ServiceHost       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public SLHost(Type serviceType, params Uri[] baseAddresses)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : base(serviceType, baseAddresses)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { }        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected override void ApplyConfiguration()        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base.ApplyConfiguration();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;}&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;And one attribute into your service tag&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;Factory=&amp;quot;SLHostFactory&amp;quot; &lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;Now it works. So what’s next? Build ASMX web service. This is even simpler&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;[WebMethod]       &lt;br /&gt;public string Echo(string input)        &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return string.Format(&amp;quot;ACK from web service with {0}&amp;quot;, input);        &lt;br /&gt;}&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;We done, now either WCF and Web services are accessible from your Silverlight application. So, add Service reference and consume it&lt;/p&gt;    &lt;h3&gt;Building client side&lt;/h3&gt;    &lt;p&gt;Inside code behind of your Silverlight project, you should define two proxies – one for Web Service and another for WCF service. Bother services implements the same interface, so it should not be a problem&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;ServerEcho.EchoServiceClient proxy;       &lt;br /&gt;WebServiceEcho.EchoWebServiceSoapClient wsProxy;        &lt;br /&gt;private void UserControl_Loaded(object sender, RoutedEventArgs e)        &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; proxy = new ServerEcho.EchoServiceClient();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; proxy.EchoCompleted += new EventHandler&amp;lt;ServerEcho.EchoCompletedEventArgs&amp;gt;(proxy_EchoCompleted); &lt;/p&gt;      &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; wsProxy = new SLGadget.WebServiceEcho.EchoWebServiceSoapClient();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; wsProxy.EchoCompleted += new EventHandler&amp;lt;SLGadget.WebServiceEcho.EchoCompletedEventArgs&amp;gt;(wsProxy_EchoCompleted);        &lt;br /&gt;}&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;Silverlight work only asynchronously, thus you should begin to understand, that synchronous programming is for pussies :). Consume it&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;private void WCF_Click(object sender, RoutedEventArgs e)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {        &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; proxy.EchoAsync(txt.Text);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;      &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private void WS_Click(object sender, RoutedEventArgs e)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {        &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; wsProxy.EchoAsync(txt.Text);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;And Update output&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;void wsProxy_EchoCompleted(object sender, SLGadget.WebServiceEcho.EchoCompletedEventArgs e)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {        &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; txt.Text = e.Error == null ? e.Result : (e.Error.InnerException != null ? e.Error.InnerException.ToString() : e.Error.Message);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;      &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; void proxy_EchoCompleted(object sender, ServerEcho.EchoCompletedEventArgs e)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {        &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; txt.Text = e.Error == null ? e.Result : (e.Error.InnerException != null ? e.Error.InnerException.ToString() : e.Error.Message);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;Now let’s run it. What? Another error? Security? Access denied? Of cause you have no crossdomain.xml. &lt;/p&gt;    &lt;blockquote&gt;     &lt;pre&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;!DOCTYPE cross-domain-policy SYSTEM &amp;quot;http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd&amp;quot;&amp;gt;
&amp;lt;cross-domain-policy&amp;gt;
   &amp;lt;allow-access-from domain=&amp;quot;*&amp;quot; /&amp;gt;
&amp;lt;/cross-domain-policy&amp;gt;&lt;/pre&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;What? You have it and still getting the same error? Look into sniffer. You application is looking for other file, named clientaccesspolicy.xml. Why? According the documentation, you can use either… Hm, another bug with WCF consuming. Never mind, let’s put it too&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;pre&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;access-policy&amp;gt;
  &amp;lt;cross-domain-access&amp;gt;
    &amp;lt;policy&amp;gt;
      &amp;lt;allow-from http-request-headers=&amp;quot;*&amp;quot;&amp;gt;
        &amp;lt;domain uri=&amp;quot;*&amp;quot;/&amp;gt;
      &amp;lt;/allow-from&amp;gt;
      &amp;lt;grant-to&amp;gt;
        &amp;lt;resource path=&amp;quot;/&amp;quot; include-subpaths=&amp;quot;true&amp;quot;/&amp;gt;
      &amp;lt;/grant-to&amp;gt;&lt;/pre&gt;

    &lt;pre&gt;    &amp;lt;/policy&amp;gt;
  &amp;lt;/cross-domain-access&amp;gt;
&amp;lt;/access-policy&amp;gt;&lt;/pre&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;Very well, now we are ready to run our application. It works! So, the only thing we should do is to pack it into MyGadget.gadget directory and put inside &lt;em&gt;%userprofile%\appdata\local\microsoft\windows sidebar\gadgets&lt;/em&gt; together with gadget.xml manifest. &lt;/p&gt;

  &lt;p&gt;But… It stopped working… What’s the problem?&lt;/p&gt;

  &lt;h3&gt;Very client side networking in Silverlight&lt;/h3&gt;

  &lt;p&gt;The problem is, that SideBar executes it’s gadgets with local path, not with network path. Silverlight cannot use any network provider, when running locally. Why? Actually I do not know (maybe to prevent local applications development). so what to do?&lt;/p&gt;

  &lt;p&gt;Simple! Microsoft SideBar knows to run cross domain AJAX without any warnings and problems. So why not to use external XmlHttp from JavaScript for network access. Let’s do it&lt;/p&gt;

  &lt;p&gt;First we should initialize XMLHttpRequest object in JavaSctipt&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;var xObj;
      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; function getEchoWCF(text) {

      &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; if(xObj == null) {&amp;#160;&amp;#160;&amp;#160; &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; xObj = new XMLHttpRequest();

      &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; }

      &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; else if(xObj) {

      &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; xObj.abort();

      &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; }&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;Then create SOAP request to WCF or WebService&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;var sURL = &amp;quot;[Path yo your service]&amp;quot;;
      &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; //Build SOAP

      &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; var sReq = &amp;quot;&amp;lt;s:Envelope xmlns:s=\&amp;quot;http://schemas.xmlsoap.org/soap/envelope/\&amp;quot;&amp;gt;&amp;lt;s:Body&amp;gt;&amp;lt;Echo&amp;gt;&amp;lt;input&amp;gt;&amp;quot;+text+&amp;quot;&amp;lt;/input&amp;gt;&amp;lt;/Echo&amp;gt;&amp;lt;/s:Body&amp;gt;&amp;lt;/s:Envelope&amp;gt;&amp;quot;;

      &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; xObj.open(&amp;quot;POST&amp;quot;, sURL, true);

      &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; xObj.setRequestHeader( &amp;quot;Content-Type&amp;quot;, &amp;quot;text/xml; charset=utf-8&amp;quot; );

      &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; xObj.setRequestHeader( &amp;quot;Cache-Control&amp;quot;, &amp;quot;no-cache&amp;quot; );

      &lt;br /&gt;…

      &lt;br /&gt;xObj.send(sReq);&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;After the request created and send we should handle result. So we need an access from HTML page, hosting Silverlight object to Silverlight. Simple. “ScriptableMember - ScriptableType”, remember?&lt;/p&gt;

  &lt;p&gt;[ScriptableType]
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public partial class Page : UserControl

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {

    &lt;br /&gt;…

    &lt;br /&gt;&lt;/p&gt;

  &lt;p&gt;[ScriptableMember]
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void UpdateResponse(string result)

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;

  &lt;p&gt;Now return the result&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;xObj.onreadystatechange = function() {
      &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; if (xObj.readyState === 4) {

      &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; if (xObj.status &amp;amp;&amp;amp; xObj.status === 200) {&amp;#160;&amp;#160;&amp;#160; &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; var control = document.getElementById(&amp;quot;silverlightControl&amp;quot;);

      &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; control.Content.Page.UpdateResponse(xObj.responseText);

      &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; } 

      &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; } &lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;But this is not enough. We also should know to call Javascript from Silverlight… This is really simple&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;private void JS_Click(object sender, RoutedEventArgs e)
      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {

      &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; HtmlPage.Window.Invoke(&amp;quot;getEchoWCF&amp;quot;, txt.Text);

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;We done. Now you can pack your &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx"&gt;Silverlight control&lt;/a&gt;, together with hosting HTML and Javascript into &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+Gadgets/default.aspx"&gt;windows sidebar gadget&lt;/a&gt; and use it even with external network support.&lt;/p&gt;

  &lt;p&gt;Have a good day and be nice people.&lt;/p&gt;

  &lt;p&gt;&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=107795" 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/Windows+Gadgets/default.aspx">Windows Gadgets</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/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/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/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Quick Silverlight tip: How to set format and validate value in TextBox?</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/06/19/quick-silverlight-tip-how-to-set-format-and-validate-value-in-textbox.aspx</link><pubDate>Thu, 19 Jun 2008 19:07:55 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:106153</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>5</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/quick-silverlight-tip-how-to-set-format-and-validate-value-in-textbox/"&gt;http://khason.net/blog/quick-silverlight-tip-how-to-set-format-and-validate-value-in-textbox/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Today morning I got an email from one of Microsofties, asking following question:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Is there any way to set format and validation on TextBox in Silverlight 2. TextBox format: Date Format, Currency Format etc, TextBox validation: Regular date expression, should allow only numeric etc. If it’s possible out-of-box how do I do it? &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The answer is, that there is no data validation or formatting in Silverlight, however it’s very simple to build converter to format binded value. Here the code of the converter:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;public class TextFormatConverter:IValueConverter     &lt;br /&gt;&amp;#160;&amp;#160; { &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; #region IValueConverter Members &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return Format(value, parameter);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return Format(value, parameter);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; object Format(object value, object param)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (value == null)      &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; return value;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int ri;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; double rd;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (int.TryParse(value.ToString(), out ri))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &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; return string.Format(param.ToString(), ri);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else if (double.TryParse(value.ToString(), out rd))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &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; return string.Format(param.ToString(), rd);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &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; return string.Format(param.ToString(), value);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; #endregion     &lt;br /&gt;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Here the usage:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;TextBox Text=&amp;quot;{Binding String, Source={StaticResource data}, Mode=TwoWay, Converter={StaticResource formatConverter}, ConverterParameter=&amp;#39;{0:0.00}&amp;#39;}&amp;quot; /&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Regarding validators – There is no ValidationRule or IDataErrorInfo in Silverlight right now. If you want to have it, you’ll need to write your own custom TextBox with validation. But, I’ll speak next time about it. ValidatingTextBox with format support will be a part of &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/06/15/silverlight-controls-library-has-been-upgraded-to-beta-2.aspx"&gt;Silverlight controls library &lt;/a&gt;when I’ll have a time for it.&lt;/p&gt;  &lt;p&gt;Have a nice day and be good people. &lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=106153" width="1" height="1"&gt;</description><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/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></item><item><title>Quick Silverlight tip: How to open new window or tab by using HyperlinkButton and Ctrl-Shift modifiers</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/05/26/quick-silverlight-tip-how-to-open-new-window-or-tab-by-using-hyperlinkbutton-and-ctrl-shift-modifiers.aspx</link><pubDate>Mon, 26 May 2008 14:07:43 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:93520</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>1</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/quick-silverlight-tip-how-to-open-new-window-or-tab-by-using-hyperlinkbutton-and-ctrl-shift-modifiers/"&gt;http://khason.net/blog/quick-silverlight-tip-how-to-open-new-window-or-tab-by-using-hyperlinkbutton-and-ctrl-shift-modifiers/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Regular behavior of any HTML anchor element is to open new Window if you’re clicking the link with Shift key and new Tab, if you’re clicking with Ctrl key or middle mouse button. Unfortunately, Silverlight HyperlinkButton does not support opening new window or tab. It also does not support key modifiers. What to do?&lt;/p&gt;  &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/QuickSilverlighttipHowtoopennewwindowort_8E4E/image_63ea3aaf-dac3-433a-98f9-3ddcaba0e85d.png" width="400" height="608" /&gt;     &lt;br /&gt;&lt;font size="2"&gt;(rotary reading desk – first tabbed browser, invented in 1588. via &lt;/font&gt;&lt;a href="http://www.kirchersociety.org/blog/?p=1079" target="_blank"&gt;&lt;font size="2"&gt;Athanasius Kircher society&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;First of all, &lt;a href="http://connect.microsoft.com/" target="_blank"&gt;request this feature&lt;/a&gt;. This is regular behavior and there is no reason not to support it in Silverlight. Next, we should do something to fix it by now. So let’s start.&lt;/p&gt;  &lt;p&gt;We should understand what happens under the hoods of HyperlinkButton. It does not generate html anchor, however it uses window.navigate to move. One of HyperlinkButton properties is TargetName – this one is actually html ”target” attribute. So we can just change it according the keystrokes. This is acceptable, but ugly solution. The better one is to subclass HyperlinkButton and check KeyModifiers. Then void Click event and navigate&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;if(Keyboard.Modifiers == ModifierKeys.Control | Keyboard.Modifiers == ModifierKeys.Shift)     &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; {      &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; this.TargetName=”_blank”;      &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; }      &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; base.OnClick();&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So far so good, but not good enough. What will happen if user explicitly set TargetName Value? We’ll override it and this is something we wont to do. Also, following approach will work differently between browsers. For example in IE it will open new window, while in FF – new tab by default. So how to avoid it?&lt;/p&gt;  &lt;p&gt;We can use HtmlPage.Window.Navigate method to assure opening of new window. Navigate method receives three parameter, Uri for navigation address, target frame and “target features”. What are those target features? Actually, it parameters we’re using in JavaScript for window.open method. Thus HtmlPage.Window.Navigate(new Uri(“http://blogs.microsoft.co.il/blogs/tamir”,null,”menubar=1,resizable=1,width=350,height=250”) will open resizable window with menubar and size of 350x250. &lt;/p&gt;  &lt;p&gt;Very well. Now we almost finished, but how to assure, that I opened new tab? Actually, we cannot until all browsers will support &lt;a href="http://www.css3.info/" target="_blank"&gt;CSS3&lt;/a&gt;. In CSS3 we have &lt;a href="http://www.w3.org/TR/css3-hyperlinks/" target="_blank"&gt;style attributes, which can target into tab or window&lt;/a&gt;. By now, the only workaround is to use &lt;a href="http://msdn.microsoft.com/en-us/library/aa752134(VS.85).aspx" target="_blank"&gt;IWebBrowser2::Navigate2&lt;/a&gt; method for IE and pass 0x1000 (navOpenInBackgroundTab) as second parameter. This “heck” can only be done in &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/04/27/how-to-make-silverlight-be-air.aspx" target="_blank"&gt;Full trust mode&lt;/a&gt;. For Mozilla (FireFox or any Geco + ancestors) we should use nsIBrowserWindow::OPEN_NEWTAB override for nsIBrowserWindow::OPEN_NEWWINDOW. There is no known way to do it for Safari.&lt;/p&gt;  &lt;p&gt;So, the best thing can be done is inheritance of build-in feature of any supported browser to handle Ctrl/Shift modifiers for force opening links in other tabs or new windows.&lt;/p&gt;  &lt;p&gt;Have a nice week and be good people.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=93520" 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/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/Accessibility/default.aspx">Accessibility</category></item><item><title>Action required: Smart client users group</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/05/22/action-required-smart-client-users-group.aspx</link><pubDate>Fri, 23 May 2008 01:44:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:91573</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>8</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/action-required-smart-client-users-group/"&gt;http://khason.net/blog/action-required-smart-client-users-group/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Recently I browsed &lt;a href="http://ineta.org" target="_blank"&gt;INETA&lt;/a&gt; to seek for some group and was really surprising. There is no Smart Client user group registered there. Maybe there is a reason? Let’s understand what Smart Client is? &lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Smart_client" target="_blank"&gt;According wikipedia&lt;/a&gt;, the term &amp;quot;Smart Client&amp;quot; is meant to refer to simultaneously capturing the benefits of a &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Thin_client"&gt;thin client&lt;/a&gt;&amp;quot; (zero-install, auto-update) and a &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Fat_client"&gt;fat client&lt;/a&gt;&amp;quot; (high performance, high productivity). However, I think, that this term is much wider. It is not only thin-fat client application, it’s also most of applications we’re using today. &lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/ActionrequiredSmartclientusersgroup_13148/image_9b0168ec-d360-436a-a934-f287471e7222.png" title="image" alt="image" border="0" height="315" width="453" /&gt; &lt;/p&gt;  &lt;h3&gt;Thick Client&lt;/h3&gt;  &lt;p&gt;We always want to provide our users with best experience and increase their performance. However we are (as developers) want to avoid complicated development and deployment. This why we should know as much as possible about user’s system, when users do not want to have real footprint in their systems. That’s dilemma. Is it possible to solve it? Let’s look deeper…&lt;/p&gt;  &lt;p&gt;Are we really need installation? Most of old software installations put things in registry. It because you were never sure what client has in his system and were our application can put files or temporary data. Today, when we have local application or user isolated storage, so we not really need to use registry. Maybe only for our own ego – this is cool to have something like “HKLM/Software/MYNAME” in 1,000,000 user’s computers…&lt;/p&gt;  &lt;p&gt;No installation is good, but what to me with maintenance. We want our system connected…&lt;/p&gt;  &lt;h3&gt;Thin Client&lt;/h3&gt;  &lt;p&gt;Could you imagine your user to visit product site twice a week to see what’s going on? I can not. However I know, that if I’ll ask him first about automatic updates and he’ll agree to forget about application maintenance, his experience will be much better.&lt;/p&gt;  &lt;p&gt;So,we are connected. What now? I want to make time reporting system. Web service? Maybe some kind of distributed application. Maybe, even &lt;a href="http://twitter.com/tamir" target="_blank"&gt;Twitter&lt;/a&gt;? This way we can be sure, that our data is safe and if user reinstall whole system, he do not really need to care about backups. &lt;/p&gt;  &lt;p&gt;But users not always have internet access. Sometimes they are offline. How to solve the problem of occasionally connected users? I do not want him every lunch want for two minutes, until I realize, that there is no internet connection and will not even give him a chance to use the application?&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/ActionrequiredSmartclientusersgroup_13148/image_10278991-02bf-4f23-9df9-d51332414509.png" title="image" alt="image" border="0" height="412" width="632" /&gt; &lt;/p&gt;  &lt;p&gt;So, we also want our system to be useful offline. But what’s up with Web 10.0? We want millions. We want very broad reach for our application. Also we want to be able to manage application updates remotely?&lt;/p&gt;  &lt;p&gt;Let’s take a look into other pan of application development. Do you like JavaScript? I do not! I think it’s too complicated to develop things for web. We should invest into at least 50% of coverage and integration tests, while giving customers pretty poor user experience. What is we want to provide the same look and feel everywhere? In web, desktop, mobile and other devices? Our customers want the application everywhere?&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;This is exactly what Smart client designed for. Technologies such as .NET, WPF, Silverlight from Microsoft, Flex, Thermo from Adobe and others tries to make you to be there with your application. But how to do it? How to answer all those hard questions, I asked?&lt;/p&gt;  &lt;p&gt;I want to announce new (currently virtual) user group, dedicated to Smart Client development. I do not want to restrict this group geographically, due to fact, that current infrastructures allows us to forget about distances and be together. Join today “Smart Client development” user group.&lt;/p&gt;  &lt;p&gt;In order to join, just send me an email to &lt;i&gt;tamir [at] khason.biz&lt;/i&gt; with information about you. I put the request to create this user group in INETA. Once it will be opened, I’ll send everyone email to register and connect them selves to this group.&lt;/p&gt;  &lt;p&gt;Be in touch.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=91573" width="1" height="1"&gt;</description><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/Mobile/default.aspx">Mobile</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/thoughts/default.aspx">thoughts</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/blogging+general/default.aspx">blogging general</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/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></item></channel></rss>