<?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>Alex Golesh&amp;#39;s Blog About Silverlight Development : Source Code</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx</link><description>Tags: Source Code</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Windows Phone 7 Quick Tip: How to use Bing Maps in XNA games</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2010/10/22/windows-phone-7-quick-tip-how-to-use-bing-maps-in-xna-games.aspx</link><pubDate>Fri, 22 Oct 2010 14:31:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:729256</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=729256</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=729256</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2010/10/22/windows-phone-7-quick-tip-how-to-use-bing-maps-in-xna-games.aspx#comments</comments><description>&lt;p&gt;A few days ago, a colleague of mine pointed out to &lt;a href="http://www.techpetals.com/xbox-live-for-windows-phone-7-wp7-to-feature-bing-maps-xna-control-1879" target="_blank"&gt;this&lt;/a&gt; site which shows a Bing Maps usage within XNA game.&lt;/p&gt;
&lt;p&gt;I was intrigued how to achieve it… I know that Silverlight applications for Windows Phone 7 could use Bing Maps control (see great usage tutorial &lt;a href="http://channel9.msdn.com/Learn/Courses/WP7TrainingKit/WP7Silverlight/UsingBingMapsLab" target="_blank"&gt;here&lt;/a&gt;), but XNA games cannot render Silverlight controls… &lt;/p&gt;
&lt;p&gt;To solve it, I decided to use a different approach for XNA – download image tiles and present them in XNA game.&lt;/p&gt;
&lt;p&gt;Let’s get started. First, in order to use Bing Maps API you need a Bing Maps Account and Application Private Key. &lt;br /&gt;The Bing Maps Account Center allows you to create keys to use the Bing Maps Control, Bing Maps SOAP Services, Bing Maps REST (representational state transfer) Services and Bing Spatial Data Services. &lt;/p&gt;
&lt;p&gt;If you already have a key for using Bing, you may skip next few lines&lt;img style="BORDER-BOTTOM-STYLE:none;BORDER-RIGHT-STYLE:none;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.microsoft.co.il/blogs/alex_golesh/wlEmoticon-smile_69F70322.png" /&gt;. &lt;/p&gt;
&lt;p&gt;Without a valid key, you won’t be able to see retrieve Bing Maps content from the web. To create the account use the following steps (shamelessly taken from &lt;a href="http://channel9.msdn.com/Learn/Courses/WP7TrainingKit/WP7Silverlight/UsingBingMapsLab/Exercise-1-Introduction-to-the-Bing-Map-Control" target="_blank"&gt;here&lt;/a&gt;)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open your web browser and go to the following address: &lt;a href="http://www.bingmapsportal.com/"&gt;http://www.bingmapsportal.com&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Click Create to create a new Bing Maps account using your Windows Live ID. 
&lt;p&gt;&lt;img alt="alt" src="http://ecn.channel9.msdn.com/o9/learn/WP7TrainingKit/Labs/UsingBingMaps/UsingBingMaps.html/html/images/7e973af4-9de6-483e-a71f-d1e221226067.png" /&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;On the next page, fill in your details. 
&lt;p&gt;&lt;img alt="alt" src="http://ecn.channel9.msdn.com/o9/learn/WP7TrainingKit/Labs/UsingBingMaps/UsingBingMaps.html/html/images/5c26e3af-1a8d-43ce-ae3f-c0cd6b083aa4.png" /&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Once you’ve agreed the terms and registered and/or signed in, you may choose to create a new key for your application. Click the “Create or view keys” link on the left. 
&lt;p&gt;&lt;img alt="alt" src="http://ecn.channel9.msdn.com/o9/learn/WP7TrainingKit/Labs/UsingBingMaps/UsingBingMaps.html/html/images/8798a9f9-733c-40fa-8bb3-55583386b3d4.png" /&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;On the next page fill in your application details and click Create Key. 
&lt;p&gt;&lt;img alt="alt" src="http://ecn.channel9.msdn.com/o9/learn/WP7TrainingKit/Labs/UsingBingMaps/UsingBingMaps.html/html/images/54c48d53-1036-42cb-b58c-a07b13d408e6.png" /&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Below, you’ll see your new private key. Save this key, you will use it later. 
&lt;p&gt;&lt;img alt="alt" src="http://ecn.channel9.msdn.com/o9/learn/WP7TrainingKit/Labs/UsingBingMaps/UsingBingMaps.html/html/images/97a18c8c-4d59-4f76-b0c1-eceb429d0ae8.png" /&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Now let’s do some coding! I decided to create very simple XNA game, which uses Windows Phone 7 location services (on the device) or hardcoded location (on emulator). The game will query Bing maps services and display the received map on screen. &lt;img style="MARGIN:5px 0px;DISPLAY:inline;FLOAT:right;" align="right" src="http://avatar.xboxlive.com/avatar/Dark%20Virus%20ISR/avatar-body.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;In addition I added my &lt;img style="BORDER-BOTTOM-STYLE:none;BORDER-RIGHT-STYLE:none;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;" class="wlEmoticon wlEmoticon-xbox" alt="Xbox" src="http://blogs.microsoft.co.il/blogs/alex_golesh/wlEmoticon-xbox_73DBF48D.png" /&gt;&lt;a href="http://www.xbox.com/en-US/live" target="_blank"&gt;XBOX Live&lt;/a&gt; avatar to the center of the map – this will simulate a game process. &lt;/p&gt;
&lt;p&gt;Lastly I decided to add simple Zoom In/Out controls too.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Disclaimer&lt;/em&gt;: this sample is not an XNA tutorial. To learn about 2D game development with XNA game studio 4.0 for Windows Phone 7 please refer to great tutorial (which I had a great honor to be an author &lt;img style="BORDER-BOTTOM-STYLE:none;BORDER-RIGHT-STYLE:none;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://blogs.microsoft.co.il/blogs/alex_golesh/wlEmoticon-winkingsmile_12B2686C.png" /&gt;) at new MSDN Apps Hub site (&lt;a title="http://create.msdn.com/en-US/education/catalog/lab/catapult_wars" href="http://create.msdn.com/en-US/education/catalog/lab/catapult_wars"&gt;http://create.msdn.com/en-US/education/catalog/lab/catapult_wars&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;My game will start with loading some assets at &lt;em&gt;LoadContent&lt;/em&gt; function – it will load a font to draw text on screen, default background (to fill the screen while first map tile still downloading) and ZoomIn/ZoomOut images.&lt;/p&gt;
&lt;p&gt;First – the references I will need in order to make whole thing work – please make sure all of the selected assemblies referenced in the project (some of them automatically referenced with new Windows Phone 7 Game project, some of them need to be referenced manually):&lt;/p&gt;
&lt;p&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;MARGIN:5px 5px 5px 0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_18F93EFA.png" width="299" height="258" /&gt;&lt;/p&gt;
&lt;p&gt;Make sure or add the following using statements at the top of the class:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;using &lt;/span&gt;Microsoft.Xna.Framework.Input;
&lt;span style="COLOR:blue;"&gt;using &lt;/span&gt;Microsoft.Xna.Framework.Input.Touch;
&lt;span style="COLOR:blue;"&gt;using &lt;/span&gt;System.Device.Location;
&lt;span style="COLOR:blue;"&gt;using &lt;/span&gt;System.Net;
&lt;span style="COLOR:blue;"&gt;using &lt;/span&gt;Microsoft.Devices;&lt;/pre&gt;
&lt;p&gt;Let’s see the LoadContent function:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;protected override void &lt;/span&gt;LoadContent()
{
    &lt;span style="COLOR:green;"&gt;// Create a new SpriteBatch, which can be used to draw textures.
    &lt;/span&gt;spriteBatch = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;SpriteBatch&lt;/span&gt;(GraphicsDevice);

    &lt;span style="COLOR:green;"&gt;// TODO: use this.Content to load your game content here
    &lt;/span&gt;font = Content.Load&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;SpriteFont&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Font&amp;quot;&lt;/span&gt;);
    mapImage = Content.Load&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Nowhere&amp;quot;&lt;/span&gt;);
    zoominImage = Content.Load&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;zoomin&amp;quot;&lt;/span&gt;);
    zoomoutImage = Content.Load&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;zoomout&amp;quot;&lt;/span&gt;);

}&lt;/pre&gt;
&lt;p&gt;In addition I created a number of class level variables which will be used during the game:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:#2b91af;"&gt;GeoCoordinateWatcher &lt;/span&gt;watcher;
&lt;span style="COLOR:#2b91af;"&gt;Texture2D &lt;/span&gt;mapImage;
&lt;span style="COLOR:#2b91af;"&gt;Texture2D &lt;/span&gt;playerImage;
&lt;span style="COLOR:#2b91af;"&gt;Texture2D &lt;/span&gt;zoominImage;
&lt;span style="COLOR:#2b91af;"&gt;Texture2D &lt;/span&gt;zoomoutImage;
&lt;span style="COLOR:#2b91af;"&gt;SpriteFont &lt;/span&gt;font;
&lt;span style="COLOR:#2b91af;"&gt;GeoCoordinate &lt;/span&gt;co;
&lt;span style="COLOR:blue;"&gt;bool &lt;/span&gt;mapLoaded = &lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;;
&lt;span style="COLOR:blue;"&gt;bool &lt;/span&gt;mapUpdated = &lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;;

&lt;span style="COLOR:blue;"&gt;float &lt;/span&gt;baseScale = 0.04545454545454545454545454545455f;
&lt;span style="COLOR:blue;"&gt;float &lt;/span&gt;scale = 1f;
&lt;span style="COLOR:#2b91af;"&gt;Vector2 &lt;/span&gt;zoomInPosition = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Vector2&lt;/span&gt;(20, 20);
&lt;span style="COLOR:#2b91af;"&gt;Vector2 &lt;/span&gt;zoomOutPosition = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Vector2&lt;/span&gt;(20, 100);&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;const string &lt;/span&gt;bingAppKey = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;MY_BING_MAPS_KEY&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;The &lt;em&gt;GeoCoordinateWatcher&lt;/em&gt; will be used to observe location changes on the device; once location changes it will be retrieved to the &lt;em&gt;GeoCoordinate&lt;/em&gt; variable.&lt;/p&gt;
&lt;p&gt;Since Bing Maps uses scale between 1 and 22, I have to scale my textures accordingly. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;baseScale&lt;/em&gt; variable is 1/22 in order to enable easy scale calculation.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;bingAppKey&lt;/em&gt; is a private key received at step 6 during registration process.&lt;/p&gt;
&lt;p&gt;Now game will draw a mapImage on screen and will display status text according to boolean variables introduced above:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;protected override void &lt;/span&gt;Draw(&lt;span style="COLOR:#2b91af;"&gt;GameTime &lt;/span&gt;gameTime)
{
    GraphicsDevice.Clear(&lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.CornflowerBlue);

    &lt;span style="COLOR:green;"&gt;// TODO: Add your drawing code here
    &lt;/span&gt;spriteBatch.Begin();

    spriteBatch.Draw(mapImage, &lt;span style="COLOR:#2b91af;"&gt;Vector2&lt;/span&gt;.Zero, &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.White);

    &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(mapLoaded)
        DrawZoomControls();

    &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;null &lt;/span&gt;!= playerImage)
    {
        &lt;span style="COLOR:#2b91af;"&gt;Vector2 &lt;/span&gt;position = 
            &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Vector2&lt;/span&gt;(GraphicsDevice.Viewport.Width / 2 - 
                        (playerImage.Width * baseScale * scale) / 2,
                        GraphicsDevice.Viewport.Height / 2 - 
                        (playerImage.Height * baseScale * scale) / 2);

        spriteBatch.Draw(playerImage, position, &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;, &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.White, 0f, 
            &lt;span style="COLOR:#2b91af;"&gt;Vector2&lt;/span&gt;.Zero, baseScale * scale, &lt;span style="COLOR:#2b91af;"&gt;SpriteEffects&lt;/span&gt;.None, 0);
    }

    &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(!mapLoaded || mapUpdated)
    {
        &lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;text = !mapLoaded ? &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Locating position...&amp;quot; &lt;/span&gt;: &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Refining map...&amp;quot;&lt;/span&gt;;
        &lt;span style="COLOR:#2b91af;"&gt;Color &lt;/span&gt;color = !mapLoaded ? &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.White : &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.Red;
        &lt;span style="COLOR:#2b91af;"&gt;Vector2 &lt;/span&gt;size = font.MeasureString(text);
        &lt;span style="COLOR:#2b91af;"&gt;Vector2 &lt;/span&gt;position = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Vector2&lt;/span&gt;(10, GraphicsDevice.Viewport.Height - size.Y  - 10);
        spriteBatch.DrawString(font, text, position, color);
    }

    spriteBatch.End();
    &lt;span style="COLOR:blue;"&gt;base&lt;/span&gt;.Draw(gameTime);
}&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;private void &lt;/span&gt;DrawZoomControls()
{
    spriteBatch.Draw(zoominImage, zoomInPosition, &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.White);
    spriteBatch.Draw(zoomoutImage, zoomOutPosition, &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.White);
}&lt;/pre&gt;
&lt;p&gt;The code snippet is pretty simple, yet requires some explanations. In XNA the on-screen object location and its &lt;em&gt;Z-Index&lt;/em&gt; depends on draw order during the &lt;em&gt;Draw&lt;/em&gt; function. In order to start drawing the function should &lt;em&gt;Begin&lt;/em&gt; a sprite batch rendering process and &lt;em&gt;End&lt;/em&gt; it after all objects are drawn. First, the function above draws a background texture which currently will be a “Nowhere” image and will be replaced by the map once it arrives from server. Next, if map already downloaded it will call to helper method to draw zoom controls at known fixed positions. This assures, that zoom texture will be paced &lt;em&gt;above&lt;/em&gt; the background (&lt;em&gt;Z-Index&lt;/em&gt; is higher). After then, if the player’s image (remember&amp;nbsp; - it will be my &lt;a href="http://www.xbox.com/en-US/live" target="_blank"&gt;XBOX Live&lt;/a&gt; Avatar) arrived, it will display it at the center of the screen scaled accordingly to the map scale. Lastly, it will display “Loading” text if the map is not loaded yet or zoom level changed and map image being updated.&lt;/p&gt;
&lt;p&gt;Running application at this stage produces the following result (both at emulator and the device):&lt;/p&gt;
&lt;p&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-BOTTOM:0px;BORDER-LEFT:0px;MARGIN:5px 5px 5px 0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_16DC4031.png" width="991" height="546" /&gt;&lt;/p&gt;
&lt;p&gt;To get map images I will use a &lt;em&gt;WebClient&lt;/em&gt; class (same one which used also in Silverlight applications on Windows Phone 7). &lt;/p&gt;
&lt;p&gt;Now it is a time to look at Bing Maps API; from &lt;a href="http://msdn.microsoft.com/en-us/library/dd877180.aspx" target="_blank"&gt;MSDN documentation&lt;/a&gt; (&lt;a title="http://msdn.microsoft.com/en-us/library/ff701716.aspx" href="http://msdn.microsoft.com/en-us/library/ff701716.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff701716.aspx&lt;/a&gt;, &lt;a title="http://msdn.microsoft.com/en-us/library/ff701724.aspx" href="http://msdn.microsoft.com/en-us/library/ff701724.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff701724.aspx&lt;/a&gt;) I see, that the request URI should be build as follows:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;http://dev.virtualearth.net/REST/version/Imagery/Metadata/imagerySet?key=BingMapsKey&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For more info about &lt;em&gt;version&lt;/em&gt;, &lt;em&gt;Imagery&lt;/em&gt;, &lt;em&gt;Metadata&lt;/em&gt;, etc. please refer to the Bing Maps APIs documentation.&lt;/p&gt;
&lt;p&gt;In my sample I will use static image search by query on the emulator:&lt;/p&gt;&lt;pre&gt;&lt;em&gt;http://dev.virtualearth.net/REST/V1/Imagery/Map/AerialWithLabels/eiffel tower?zoomLevel=SCALE&amp;amp;mapSize=800,480&amp;amp;key=MY_BING_MAPS_KEY&lt;/em&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Verdana"&gt;and location centers at specified geographical coordinate (longitude and latitude) on the device:&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;em&gt;http://dev.virtualearth.net/REST/V1/Imagery/Map/Aerial/LATITUDE,LONGTITUDE/SCALE?mapSize=800,480&amp;amp;key=MY_BING_MAPS_KEY&lt;/em&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;SCALE&lt;/em&gt; will be replaced by current scale and &lt;em&gt;MY_BING_MAPS_KEY&lt;/em&gt; by my private key. On the device also &lt;em&gt;LATITUDE&lt;/em&gt; and &lt;em&gt;LONGTITUDE &lt;/em&gt;will be replaced by values reported by Windows Phone 7 location services.&lt;/p&gt;
&lt;p&gt;In this quick-and-dirty sample I put the initialization code in Initialize function of XNA game class:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;protected override void &lt;/span&gt;Initialize()
{
    &lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;requestUri = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
    &lt;span style="COLOR:#2b91af;"&gt;WebClient &lt;/span&gt;wc = &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;;

    &lt;span style="COLOR:blue;"&gt;float &lt;/span&gt;currentScale = baseScale * scale * 22;

    &lt;span style="COLOR:green;"&gt;// TODO: Add your initialization logic here
    &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(Microsoft.Devices.&lt;span style="COLOR:#2b91af;"&gt;Environment&lt;/span&gt;.DeviceType == &lt;span style="COLOR:#2b91af;"&gt;DeviceType&lt;/span&gt;.Device)
    {
        watcher = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;GeoCoordinateWatcher&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;GeoPositionAccuracy&lt;/span&gt;.High); &lt;span style="COLOR:green;"&gt;// Use high accuracy.
        &lt;/span&gt;watcher.MovementThreshold = 20; &lt;span style="COLOR:green;"&gt;// Use MovementThreshold to ignore noise in the signal.
        &lt;/span&gt;watcher.StatusChanged += (sender, e) =&amp;gt;
        {
            &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(e.Status == &lt;span style="COLOR:#2b91af;"&gt;GeoPositionStatus&lt;/span&gt;.Ready)
            {
                mapUpdated = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;
                co = watcher.Position.Location;
                &lt;span style="COLOR:green;"&gt;//watcher.Stop(); &lt;strong&gt;//Stop to conserve the battery - will disable the movement updates&lt;/strong&gt;

                &lt;/span&gt;requestUri = &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;http://dev.virtualearth.net/REST/V1/Imagery/Map/Aerial/{0},{1}/{3}?mapSize=800,480&amp;amp;key={2}&amp;quot;&lt;/span&gt;, 
                    co.Latitude, co.Longitude, 
                    bingAppKey, currentScale);
                wc = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;WebClient&lt;/span&gt;();
                wc.OpenReadCompleted += &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;OpenReadCompletedEventHandler&lt;/span&gt;(wc_OpenReadCompleted);
                wc.OpenReadAsync(&lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Uri&lt;/span&gt;(requestUri, &lt;span style="COLOR:#2b91af;"&gt;UriKind&lt;/span&gt;.Absolute), &lt;span style="COLOR:#a31515;"&gt;&amp;quot;MAP&amp;quot;&lt;/span&gt;);
            }
        };
        watcher.Start();
    }
    &lt;span style="COLOR:blue;"&gt;else
    &lt;/span&gt;{
        &lt;span style="COLOR:green;"&gt;//Get static location (also by lat/long) on emu
        &lt;/span&gt;requestUri = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;http://dev.virtualearth.net/REST/V1/Imagery/Map/AerialWithLabels/eiffel tower?zoomLevel=&amp;quot; 
            &lt;/span&gt;+ currentScale.ToString() + &lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;amp;mapSize=800,480&amp;amp;key=&amp;quot; &lt;/span&gt;+ bingAppKey;
        wc = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;WebClient&lt;/span&gt;();
        wc.OpenReadCompleted += &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;OpenReadCompletedEventHandler&lt;/span&gt;(wc_OpenReadCompleted);
        wc.OpenReadAsync(&lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Uri&lt;/span&gt;(requestUri, &lt;span style="COLOR:#2b91af;"&gt;UriKind&lt;/span&gt;.Absolute), &lt;span style="COLOR:#a31515;"&gt;&amp;quot;MAP&amp;quot;&lt;/span&gt;);
    }

    &lt;span style="COLOR:green;"&gt;//Download avatar anyway
    &lt;/span&gt;requestUri = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;http://avatar.xboxlive.com/avatar/Dark%20Virus%20ISR/avatar-body.png&amp;quot;&lt;/span&gt;;
    wc = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;WebClient&lt;/span&gt;();
    wc.OpenReadCompleted += &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;OpenReadCompletedEventHandler&lt;/span&gt;(wc_OpenReadCompleted);
    wc.OpenReadAsync(&lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Uri&lt;/span&gt;(requestUri, &lt;span style="COLOR:#2b91af;"&gt;UriKind&lt;/span&gt;.Absolute), &lt;span style="COLOR:#a31515;"&gt;&amp;quot;IMG&amp;quot;&lt;/span&gt;);

    &lt;span style="COLOR:blue;"&gt;base&lt;/span&gt;.Initialize();
}&lt;/pre&gt;
&lt;p&gt;The code snippet above check the Environment variable in order to understand where it is being executed. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: this is not &lt;em&gt;System.Environment&lt;/em&gt; available for all .NET applications, but &lt;em&gt;Microsoft.Device.Environment&lt;/em&gt; specific to Windows Phone apps. &lt;/p&gt;
&lt;p&gt;If the device is actual device (Windows Phone 7 hardware) the code snippet initializes &lt;em&gt;GeoCoordinateWatcher&lt;/em&gt; and subscribes to StatusChanged events. Once the status turns to “Ready”, the code snippet gets current reported location and requests a map image using &lt;em&gt;WebClient&lt;/em&gt;. It uses reported Longitude, Latitude and current zoom level; in addition it provides Bing Maps private key.&lt;/p&gt;
&lt;p&gt;If the device is emulator (and &lt;em&gt;GeoCoordinateWatcher&lt;/em&gt; will never return meaningful value), the code snippet uses &lt;em&gt;WebClient&lt;/em&gt; to request a map centered at some landmark – in my case &lt;a href="http://en.wikipedia.org/wiki/Eiffel_Tower" target="_blank"&gt;Eiffel Tower&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;In both request &lt;em&gt;WebClient&lt;/em&gt; passes desired image size 800x480 to match Windows Phone 7 landscape resolution.&lt;/p&gt;
&lt;p&gt;Lastly, it uses another instance of WebClient to download my &lt;a href="http://www.xbox.com/en-US/live" target="_blank"&gt;XBOX Live&lt;/a&gt; avatar.&lt;/p&gt;
&lt;p&gt;Last parameter in all &lt;em&gt;OpenReadAsync&lt;/em&gt; calls is a state object I’m using to identify which image is arrived.&lt;/p&gt;
&lt;p&gt;Let’s see the &lt;em&gt;wc_OpenReadCompleted&lt;/em&gt; method:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;void &lt;/span&gt;wc_OpenReadCompleted(&lt;span style="COLOR:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="COLOR:#2b91af;"&gt;OpenReadCompletedEventArgs &lt;/span&gt;e)
{
    &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(e.Error == &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;)
    {
        &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(e.UserState.ToString() == &lt;span style="COLOR:#a31515;"&gt;&amp;quot;MAP&amp;quot;&lt;/span&gt;)
        {
            mapImage = &lt;span style="COLOR:#2b91af;"&gt;Texture2D&lt;/span&gt;.FromStream(graphics.GraphicsDevice, e.Result);
            mapLoaded = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;
            mapUpdated = &lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;;
        }
        &lt;span style="COLOR:blue;"&gt;else
            &lt;/span&gt;playerImage = &lt;span style="COLOR:#2b91af;"&gt;Texture2D&lt;/span&gt;.FromStream(graphics.GraphicsDevice, e.Result);
    }
}&lt;/pre&gt;
&lt;p&gt;Running the application at the current state produces the following output on the emulator:&lt;/p&gt;
&lt;p&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-BOTTOM:0px;BORDER-LEFT:0px;MARGIN:5px 5px 5px 0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_329D03C2.png" width="991" height="546" /&gt;&lt;/p&gt;
&lt;p&gt;and the following at the device:&lt;/p&gt;
&lt;p&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-BOTTOM:0px;BORDER-LEFT:0px;MARGIN:5px 5px 5px 0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_55B98700.png" width="606" height="366" /&gt;&lt;/p&gt;
&lt;p&gt;Note small red rectangle I put on both images – there is a very small scaled avatar inside &lt;img style="BORDER-BOTTOM-STYLE:none;BORDER-RIGHT-STYLE:none;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.microsoft.co.il/blogs/alex_golesh/wlEmoticon-smile_69F70322.png" /&gt;&lt;/p&gt;
&lt;p&gt;Now let’s enable zoom controls. First, I enabled a Tap gesture at the Game constructor:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:#2b91af;"&gt;TouchPanel&lt;/span&gt;.EnabledGestures = &lt;span style="COLOR:#2b91af;"&gt;GestureType&lt;/span&gt;.Tap;&lt;/pre&gt;
&lt;p&gt;Next, at the &lt;em&gt;Update&lt;/em&gt; function of the game I checked Available gestures and if available, their positions. I limited the scale between 1 and 22 (supported by Bing Maps) and if scale change detected used &lt;em&gt;WebClient&lt;/em&gt; to get new map at desired zoom level:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;protected override void &lt;/span&gt;Update(&lt;span style="COLOR:#2b91af;"&gt;GameTime &lt;/span&gt;gameTime)
{
    &lt;span style="COLOR:blue;"&gt;float &lt;/span&gt;prevScale = scale;

    &lt;span style="COLOR:green;"&gt;// Allows the game to exit
    &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;GamePad&lt;/span&gt;.GetState(&lt;span style="COLOR:#2b91af;"&gt;PlayerIndex&lt;/span&gt;.One).Buttons.Back == &lt;span style="COLOR:#2b91af;"&gt;ButtonState&lt;/span&gt;.Pressed)
        &lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.Exit();

    &lt;span style="COLOR:green;"&gt;// TODO: Add your update logic here
    &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;while &lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;TouchPanel&lt;/span&gt;.IsGestureAvailable &amp;amp;&amp;amp; mapLoaded)
    {
        &lt;span style="COLOR:#2b91af;"&gt;GestureSample &lt;/span&gt;sample = &lt;span style="COLOR:#2b91af;"&gt;TouchPanel&lt;/span&gt;.ReadGesture();

        &lt;span style="COLOR:green;"&gt;//Prepare a rectangle around touch position to allow more comfortable touch 
        &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Rectangle &lt;/span&gt;touchPosition = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Rectangle&lt;/span&gt;((&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;)sample.Position.X - 5, 
                                                (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;)sample.Position.Y - 5,
                                                10, 10);

        &lt;span style="COLOR:green;"&gt;//Prepare a rectange from ZoomIn texture and on-screen position
        &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Rectangle &lt;/span&gt;zoomInRect = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Rectangle&lt;/span&gt;((&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;)zoomInPosition.X, (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;)zoomInPosition.Y,
                                                zoominImage.Width, zoominImage.Height);

        &lt;span style="COLOR:green;"&gt;//Prepare a rectange from ZoomOut texture and on-screen position
        &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Rectangle &lt;/span&gt;zoomOutRect = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Rectangle&lt;/span&gt;((&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;)zoomOutPosition.X, (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;)zoomOutPosition.Y,
                                zoomoutImage.Width, zoomoutImage.Height);

        &lt;span style="COLOR:green;"&gt;//Check Touch and zoom rectangles intersection
        &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(touchPosition.Intersects(zoomInRect))
            scale += 1;
        &lt;span style="COLOR:blue;"&gt;else if &lt;/span&gt;(touchPosition.Intersects(zoomOutRect))
            scale -= 1;

        &lt;span style="COLOR:green;"&gt;//Limit the result between 1 and 22 (scale values supported by Bing Maps
        &lt;/span&gt;scale = &lt;span style="COLOR:#2b91af;"&gt;MathHelper&lt;/span&gt;.Clamp(scale, 1, 22);
    }

    &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(prevScale != scale)
    {
        &lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;requestUri = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
        &lt;span style="COLOR:#2b91af;"&gt;WebClient &lt;/span&gt;wc = &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;;

        &lt;span style="COLOR:blue;"&gt;float &lt;/span&gt;currentScale = baseScale * scale * 22;

        &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(Microsoft.Devices.&lt;span style="COLOR:#2b91af;"&gt;Environment&lt;/span&gt;.DeviceType == &lt;span style="COLOR:#2b91af;"&gt;DeviceType&lt;/span&gt;.Device)
            requestUri = &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;http://dev.virtualearth.net/REST/V1/Imagery/Map/Aerial/{0},{1}/{3}?mapSize=800,480&amp;amp;key={2}&amp;quot;&lt;/span&gt;, 
                co.Latitude, co.Longitude, bingAppKey, currentScale);
        &lt;span style="COLOR:blue;"&gt;else
            &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//Get static location (also by lat/long) on emu
            &lt;/span&gt;requestUri = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;http://dev.virtualearth.net/REST/V1/Imagery/Map/AerialWithLabels/eiffel tower?zoomLevel=&amp;quot; 
                &lt;/span&gt;+ currentScale.ToString() + &lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;amp;mapSize=800,480&amp;amp;key=&amp;quot; &lt;/span&gt;+ bingAppKey;

        wc = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;WebClient&lt;/span&gt;();
        wc.OpenReadCompleted += &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;OpenReadCompletedEventHandler&lt;/span&gt;(wc_OpenReadCompleted);
        wc.OpenReadAsync(&lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Uri&lt;/span&gt;(requestUri, &lt;span style="COLOR:#2b91af;"&gt;UriKind&lt;/span&gt;.Absolute), &lt;span style="COLOR:#a31515;"&gt;&amp;quot;MAP&amp;quot;&lt;/span&gt;);
        mapUpdated = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;
    }

    &lt;span style="COLOR:blue;"&gt;base&lt;/span&gt;.Update(gameTime);
}&lt;/pre&gt;
&lt;p&gt;Now when running the application on the device touching Zoom In/Out buttons produces the following results:&lt;/p&gt;
&lt;p&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-BOTTOM:0px;BORDER-LEFT:0px;MARGIN:5px 5px 5px 0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_0402E6E1.png" width="606" height="366" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: in this image the next map image is still downloading…&lt;/p&gt;
&lt;p&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-BOTTOM:0px;BORDER-LEFT:0px;MARGIN:5px 5px 5px 0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_7D1007D0.png" width="606" height="367" /&gt;&lt;/p&gt;
&lt;p&gt;and on the emulator:&lt;/p&gt;
&lt;p&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-BOTTOM:0px;BORDER-LEFT:0px;MARGIN:5px 5px 5px 0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_6610EABA.png" width="991" height="546" /&gt;&lt;/p&gt;
&lt;p&gt;From here the process is simple: add some real game logic, animations, some Bing Maps pushpins (using sample Bing Maps APIs), respond to drag/pinch gestures and voila – the XNA game for Windows Phone 7 with Bing Maps integrated is ready!&lt;/p&gt;
&lt;p&gt;Completed sample hosted &lt;a href="http://www.devcorner.info/Sources/BingMaps.zip" target="_blank"&gt;here&lt;/a&gt;. Note: you will need a Bing Maps Application Key to run it.&lt;/p&gt;
&lt;p&gt;To see more of XNA 4.0 with Windows Phone 7, PC and Xbox 360 visit my session “&lt;strong&gt;XNA Studio 4.0: Code Once, Play Everywhere! PC, Xbox, Phone&lt;/strong&gt;” at &lt;a href="http://www.microsoft.com/israel/TechEd2010/" target="_blank"&gt;TechEd 2010 Israel&lt;/a&gt;/&lt;a href="http://www.microsoft.com/israel/TechEd2010/Tracks/DEV.aspx" target="_blank"&gt;Development Tools &amp;amp; Technologies track&lt;/a&gt;. In this session you will see how to build the real world computer games running on all platforms together!&lt;/p&gt;
&lt;p&gt;Stay tuned for more come!&lt;/p&gt;
&lt;p&gt;Enjoy,&lt;/p&gt;
&lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=729256" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/XNA/default.aspx">XNA</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/TechEd/default.aspx">TechEd</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Promo/default.aspx">Promo</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET+4.0/default.aspx">.NET 4.0</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Teaser/default.aspx">Teaser</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Sela/default.aspx">Sela</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/XNA+4.0/default.aspx">XNA 4.0</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/wp7dev/default.aspx">wp7dev</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/XNA+Creators+Club/default.aspx">XNA Creators Club</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/TechEd2010/default.aspx">TechEd2010</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Bing+Maps/default.aspx">Bing Maps</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Location/default.aspx">Location</category></item><item><title>Silverlight 4 Tutorial @SDP</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/12/28/silverlight-4-tutorial-sdp.aspx</link><pubDate>Mon, 28 Dec 2009 13:06:03 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:477334</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=477334</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=477334</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/12/28/silverlight-4-tutorial-sdp.aspx#comments</comments><description>&lt;p&gt;My Silverlight 4 Tutorial day at SDP is over. I’d like to thank all participants!!!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;As promised, &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/SDP_Tutorial.zip" target="_blank"&gt;here&lt;/a&gt; is source of application I’ve build during the session.&lt;/p&gt;  &lt;p&gt;Additional samples &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/HTMLHosting_Sample.zip" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/SL4_MEFSample.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Labs could be found &lt;a href="http://silverlight.net/learn/handsonlabs" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;See you at Silverlight 4 session tomorrow :)&lt;/p&gt;  &lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=477334" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Presentation/default.aspx">Presentation</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET+4.0/default.aspx">.NET 4.0</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Beta/default.aspx">Beta</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Hebrew/default.aspx">Hebrew</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/SDP/default.aspx">SDP</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Sela/default.aspx">Sela</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+4/default.aspx">Silverlight 4</category></item><item><title>Silverlight Quick Tip: Dynamically Updating Class Fields/Properties</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/08/27/silverlight-quick-tip-dynamically-updating-class-fields-properties.aspx</link><pubDate>Thu, 27 Aug 2009 15:03:30 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:388214</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=388214</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=388214</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/08/27/silverlight-quick-tip-dynamically-updating-class-fields-properties.aspx#comments</comments><description>&lt;p&gt;In previous post (&lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/08/13/silverlight-quick-tip-dynamically-displaying-class-fields-properties.aspx" target="_blank"&gt;here&lt;/a&gt;) I blogged about displaying values of class/control in runtime and displaying them in Visual Studio - like property window. Today I’ll show how to push them back to the class instance.&lt;/p&gt;  &lt;p&gt;In previous post I’ve stored values in “ObservableCollection&amp;lt;FieldsPropertiesData&amp;gt;” for easy databinding and connected this ListBox control. In order to get user input I’ve created TwoWay databinding in DataTemplate – here is updated data template:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Style &lt;/span&gt;&lt;span style="color:red;"&gt;TargetType&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;local:FiledPropertyData&amp;quot;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter &lt;/span&gt;&lt;span style="color:red;"&gt;Property&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Template&amp;quot;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ControlTemplate &lt;/span&gt;&lt;span style="color:red;"&gt;TargetType&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;local:FiledPropertyData&amp;quot;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid &lt;/span&gt;&lt;span style="color:red;"&gt;ToolTipService.Placement&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Mouse&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TemplateBinding &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;DisplayName&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Center&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Left&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0,0,10,0&amp;quot;/&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBox &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;FieldValue&lt;/span&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="color:blue;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;Mode&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&lt;u&gt;=TwoWay&lt;/u&gt;&lt;/strong&gt;}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Center&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Right&amp;quot; &lt;br /&gt;                   &lt;/span&gt;&lt;span style="color:red;"&gt;IsEnabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;IsReadOnly&lt;/span&gt;&lt;span style="color:blue;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;Converter&lt;/span&gt;&lt;span style="color:blue;"&gt;={&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource &lt;/span&gt;&lt;span style="color:red;"&gt;boolToEnabledConverter&lt;/span&gt;&lt;span style="color:blue;"&gt;}}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Grid.Column&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;1&amp;quot;/&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTipService.ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip &lt;/span&gt;&lt;span style="color:red;"&gt;Background&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Transparent&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;BorderBrush&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Transparent&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;BorderThickness&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Padding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot;&amp;gt;
              &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip.Content&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Border &lt;/span&gt;&lt;span style="color:red;"&gt;Background&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;PaleGoldenrod&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;BorderBrush&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Black&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;BorderThickness&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;2&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;CornerRadius&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Padding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0&amp;quot;&amp;gt;
                  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;Description&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;/&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Border&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
              &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip.Content&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTipService.ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Style&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Now at the setter of the “&lt;span style="color:red;"&gt;FieldValue&lt;/span&gt;” property all I need is to push it back to the instance.&lt;/p&gt;

&lt;p&gt;I’ve create function, which accepts FieldName, FieldType (from data already exits in the file from the loading) and new value:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private static void &lt;/span&gt;SetFieldValue(&lt;span style="color:blue;"&gt;string &lt;/span&gt;FieldName, &lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;FieldType, &lt;span style="color:blue;"&gt;object &lt;/span&gt;TheValue)
{
  &lt;span style="color:#2b91af;"&gt;Assembly &lt;/span&gt;asm = &lt;span style="color:#2b91af;"&gt;Assembly&lt;/span&gt;.GetExecutingAssembly();
  &lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;type = asm.GetType(&lt;span style="color:#a31515;"&gt;&amp;quot;SAMPLE_TYPE_TO_UPDATE&amp;quot;&lt;/span&gt;);
  &lt;span style="color:#2b91af;"&gt;FieldInfo&lt;/span&gt;[] fields = type.GetFields(&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Static | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public);

  &lt;span style="color:blue;"&gt;var &lt;/span&gt;fieldInfo = &lt;span style="color:blue;"&gt;from &lt;/span&gt;field &lt;span style="color:blue;"&gt;in &lt;/span&gt;fields
                  &lt;span style="color:blue;"&gt;where &lt;/span&gt;field.FieldType == FieldType &amp;amp;&amp;amp; field.Name == FieldName
                  &lt;span style="color:blue;"&gt;select &lt;/span&gt;field;

  &lt;span style="color:#2b91af;"&gt;FieldInfo &lt;/span&gt;theField = fieldInfo.FirstOrDefault();
  &lt;span style="color:blue;"&gt;if &lt;/span&gt;(&lt;span style="color:blue;"&gt;null &lt;/span&gt;!= theField)
    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(value.GetType() == FieldType)
      theField.SetValue(&lt;span style="color:blue;"&gt;if &lt;/span&gt;(theField.IsStatic) ? &lt;span style="color:blue;"&gt;null : TheInstance&lt;/span&gt;, TheValue);
    &lt;span style="color:blue;"&gt;else &lt;/span&gt;&lt;span style="color:green;"&gt;//In case of value changed by databinding in most cases ToString() result will be here, 
         //hence need to convert
      &lt;/span&gt;theField.SetValue(&lt;span style="color:blue;"&gt;if &lt;/span&gt;(theField.IsStatic) ? &lt;span style="color:blue;"&gt;null : TheInstance&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ChangeType(TheValue, FieldType, &lt;span style="color:blue;"&gt;null&lt;/span&gt;));

  fieldInfo = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;
  fields = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;
  type = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;
  asm = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;
}&lt;/pre&gt;

&lt;p&gt;That’s it… Now the data dynamically displayed, updated by user and pushed back to the instance of the object.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy,&lt;/p&gt;

&lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=388214" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Dynamic/default.aspx">Dynamic</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+3/default.aspx">Silverlight 3</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Propeties/default.aspx">Propeties</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Reflection/default.aspx">Reflection</category></item><item><title>Silverlight Quick Tip: Dynamically Displaying Class Fields/Properties</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/08/13/silverlight-quick-tip-dynamically-displaying-class-fields-properties.aspx</link><pubDate>Thu, 13 Aug 2009 19:21:25 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:378817</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=378817</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=378817</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/08/13/silverlight-quick-tip-dynamically-displaying-class-fields-properties.aspx#comments</comments><description>&lt;p&gt;In one of my projects I had to create something like Visual Studio property window, for data set of different controls/data classes. Those controls/classes are still under development and I needed the way to display/change values of those properties dynamically without even knowing what is inside.&lt;/p&gt;  &lt;p&gt;For the simple case, let’s assume the following class which holds the data:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SampleData
&lt;/span&gt;{
  &lt;span style="color:blue;"&gt;public &lt;/span&gt;SampleData()
  {
    BooleanProperty = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
  }

  &lt;span style="color:blue;"&gt;public string &lt;/span&gt;StringProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;BooleanProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Button &lt;/span&gt;ButtonProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public static double &lt;/span&gt;StaticDoubleFiled = 123;
  &lt;span style="color:blue;"&gt;public static string &lt;/span&gt;StaticStringFiled = &lt;span style="color:#a31515;"&gt;&amp;quot;This is static field&amp;quot;&lt;/span&gt;;
  &lt;span style="color:blue;"&gt;public int &lt;/span&gt;IntFiled = 345;
  &lt;span style="color:blue;"&gt;public string &lt;/span&gt;StringFiled = &lt;span style="color:#a31515;"&gt;&amp;quot;This is non static field&amp;quot;&lt;/span&gt;;
  &lt;span style="color:blue;"&gt;public float &lt;/span&gt;FloatProperty = 456.0f;
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The class fields/properties should be displayed dynamically. I decided to create an attribute to decorate the relevant fields/properties and then get the values/metadata from attributes on-the-fly via reflection.&lt;/p&gt;

&lt;p&gt;So here is a sample attribute I’ve create for this:&lt;/p&gt;

&lt;pre class="code"&gt;[&lt;span style="color:#2b91af;"&gt;AttributeUsage&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;AttributeTargets&lt;/span&gt;.Field | &lt;span style="color:#2b91af;"&gt;AttributeTargets&lt;/span&gt;.Property, Inherited = &lt;span style="color:blue;"&gt;false&lt;/span&gt;, AllowMultiple = &lt;span style="color:blue;"&gt;false&lt;/span&gt;)]
&lt;span style="color:blue;"&gt;internal sealed class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropertyFieldDescriptionAttribute &lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;Attribute
&lt;/span&gt;{

  &lt;span style="color:blue;"&gt;#region &lt;/span&gt;.ctor
  &lt;span style="color:blue;"&gt;public &lt;/span&gt;PropertyFieldDescriptionAttribute(&lt;span style="color:blue;"&gt;string &lt;/span&gt;DisplayName)
  {
    &lt;span style="color:blue;"&gt;this&lt;/span&gt;.displayName = DisplayName;
    &lt;span style="color:blue;"&gt;this&lt;/span&gt;.IsReadOnly = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
  }
  &lt;span style="color:blue;"&gt;#endregion

  #region &lt;/span&gt;Public proerties
  &lt;span style="color:blue;"&gt;public string &lt;/span&gt;DisplayName
  {
    &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;displayName; }
  }

  &lt;span style="color:blue;"&gt;public string &lt;/span&gt;Description { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public string &lt;/span&gt;DefaultValue { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;IsReadOnly { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;#endregion

  #region &lt;/span&gt;Private variables
  &lt;span style="color:blue;"&gt;readonly string &lt;/span&gt;displayName;
  &lt;span style="color:blue;"&gt;#endregion
&lt;/span&gt;}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;And decorated fields/properties with the attribute (partial code):&lt;/p&gt;

&lt;pre class="code"&gt;[&lt;span style="color:#2b91af;"&gt;PropertyFieldDescription&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Sample String Property&amp;quot;&lt;/span&gt;, Description=&lt;span style="color:#a31515;"&gt;&amp;quot;This is sample string property&amp;quot;&lt;/span&gt;)]
&lt;span style="color:blue;"&gt;public string &lt;/span&gt;StringProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }

[&lt;span style="color:#2b91af;"&gt;PropertyFieldDescription&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Sample Boolean Property&amp;quot;&lt;/span&gt;, Description = &lt;span style="color:#a31515;"&gt;&amp;quot;This is sample boolean property&amp;quot;&lt;/span&gt;, DefaultValue=&lt;span style="color:#a31515;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;)]
&lt;span style="color:blue;"&gt;public bool &lt;/span&gt;BooleanProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }

[&lt;span style="color:#2b91af;"&gt;PropertyFieldDescription&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Sample Button Property&amp;quot;&lt;/span&gt;, Description = &lt;span style="color:#a31515;"&gt;&amp;quot;This is sample button property&amp;quot;&lt;/span&gt;)]
&lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Button &lt;/span&gt;ButtonProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;From here everything were pretty straight forward – sample code for getting fields information:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:#2b91af;"&gt;FieldInfo&lt;/span&gt;[] fields = type.GetFields(&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Static | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public);

&lt;span style="color:blue;"&gt;if &lt;/span&gt;(fields.Length &amp;gt; 0)
{
  &lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;field &lt;span style="color:blue;"&gt;in &lt;/span&gt;fields)
  {
    &lt;span style="color:#2b91af;"&gt;PropertyFieldDescriptionAttribute&lt;/span&gt;[] attribs = (&lt;span style="color:#2b91af;"&gt;PropertyFieldDescriptionAttribute&lt;/span&gt;[])field.GetCustomAttributes(&lt;br /&gt;                                                      &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;PropertyFieldDescriptionAttribute&lt;/span&gt;), &lt;span style="color:blue;"&gt;false&lt;/span&gt;);

    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(attribs.Length == 1) &lt;span style="color:green;"&gt;//Each valid property in this sample case should have only 1(!) such attribute
    &lt;/span&gt;{
      &lt;span style="color:green;"&gt;//Define data class to hold it
      &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FieldsPropertiesData &lt;/span&gt;constant = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FieldsPropertiesData&lt;/span&gt;(field.Name, field.FieldType);
      &lt;span style="color:blue;"&gt;if &lt;/span&gt;(field.IsStatic)
        constant.FiledValue = field.GetValue(&lt;span style="color:blue;"&gt;null&lt;/span&gt;);
      &lt;span style="color:blue;"&gt;else
        &lt;/span&gt;constant.FiledValue = field.GetValue(instance);
      constant.DefaultValue = attribs[0].DefaultValue;
      constant.Description = attribs[0].Description;
      constant.DisplayName = attribs[0].DisplayName;
      constant.ReadOnly = attribs[0].IsReadOnly;
      &lt;span style="color:green;"&gt;//add to collection, which will be databoud to the screen
      &lt;/span&gt;constants.Add(constant);
    }
  }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;and almost the same function for the properties.&lt;/p&gt;

&lt;p&gt;The results I stored in “&lt;span style="color:#2b91af;"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;FieldsPropertiesData&lt;/span&gt;&amp;gt;” for easy data binding.&lt;/p&gt;

&lt;p&gt;The FieldsPropertiesData of mine is like follows:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FieldsPropertiesData
&lt;/span&gt;{
  &lt;span style="color:blue;"&gt;#region &lt;/span&gt;.ctor
  &lt;span style="color:blue;"&gt;public &lt;/span&gt;FieldsPropertiesData(&lt;span style="color:blue;"&gt;string &lt;/span&gt;FiledName, &lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;FieldType)
  {
    &lt;span style="color:blue;"&gt;this&lt;/span&gt;.FieldName = FieldName;
    &lt;span style="color:blue;"&gt;this&lt;/span&gt;.FieldType = FieldType;
  }

  &lt;span style="color:blue;"&gt;#endregion

  #region &lt;/span&gt;Public properties
  &lt;span style="color:blue;"&gt;public object &lt;/span&gt;FiledValue { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;FieldType { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;private set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public string &lt;/span&gt;FieldName { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;private set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public string &lt;/span&gt;DisplayName { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public string &lt;/span&gt;Description { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public string &lt;/span&gt;DefaultValue { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;ReadOnly { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
  &lt;span style="color:blue;"&gt;#endregion
&lt;/span&gt;}&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;I’ve created 2 simple custom controls – one to serve as a grid for my properties grid, and another to hold data item&lt;/p&gt;

&lt;p&gt;The Grid:&lt;/p&gt;

&lt;pre class="code"&gt;[&lt;span style="color:#2b91af;"&gt;TemplatePart&lt;/span&gt;(Name=&lt;span style="color:#a31515;"&gt;&amp;quot;lst&amp;quot;&lt;/span&gt;, Type=&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;ListBox&lt;/span&gt;))]
&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FieldsPropertiesGrid &lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;Control
&lt;/span&gt;{
  &lt;span style="color:blue;"&gt;public &lt;/span&gt;FieldsPropertiesGrid()
  {
    &lt;span style="color:blue;"&gt;this&lt;/span&gt;.DefaultStyleKey = &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FieldsPropertiesGrid&lt;/span&gt;);
  }

  &lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;FieldsPropertiesData&lt;/span&gt;&amp;gt; Data
  {
    &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;FieldsPropertiesData&lt;/span&gt;&amp;gt;)GetValue(DataProperty); }
    &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ SetValue(DataProperty, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }
  }

  &lt;span style="color:green;"&gt;// Using a DependencyProperty as the backing store for Data.  This enables animation, styling, binding, etc...
  &lt;/span&gt;&lt;span style="color:blue;"&gt;public static readonly &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DependencyProperty &lt;/span&gt;DataProperty =
      &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;span style="color:#a31515;"&gt;&amp;quot;Data&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;FieldsPropertiesData&lt;/span&gt;&amp;gt;), &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FieldsPropertiesGrid&lt;/span&gt;), &lt;span style="color:blue;"&gt;null&lt;/span&gt;);

  &lt;span style="color:blue;"&gt;public override void  &lt;/span&gt;OnApplyTemplate()
  {
       &lt;span style="color:blue;"&gt;base&lt;/span&gt;.OnApplyTemplate();

    &lt;span style="color:#2b91af;"&gt;ListBox &lt;/span&gt;lst = GetTemplateChild(&lt;span style="color:#a31515;"&gt;&amp;quot;lst&amp;quot;&lt;/span&gt;) &lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ListBox&lt;/span&gt;;
    lst.DataContext = &lt;span style="color:blue;"&gt;this&lt;/span&gt;;
  }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The DataItem (partial):&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FiledPropertyData &lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;Control
&lt;/span&gt;{
  &lt;span style="color:blue;"&gt;public &lt;/span&gt;FiledPropertyData()
  {
    &lt;span style="color:blue;"&gt;this&lt;/span&gt;.DefaultStyleKey = &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FiledPropertyData&lt;/span&gt;);
  }


  &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;IsReadOnly
  {
    &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;(&lt;span style="color:blue;"&gt;bool&lt;/span&gt;)GetValue(IsReadOnlyProperty); }
    &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ SetValue(IsReadOnlyProperty, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }
  }

  &lt;span style="color:green;"&gt;// Using a DependencyProperty as the backing store for IsReadOnly.  This enables animation, styling, binding, etc...
  &lt;/span&gt;&lt;span style="color:blue;"&gt;public static readonly &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DependencyProperty &lt;/span&gt;IsReadOnlyProperty =
      &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;span style="color:#a31515;"&gt;&amp;quot;IsReadOnly&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue;"&gt;bool&lt;/span&gt;), &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FiledPropertyData&lt;/span&gt;), &lt;span style="color:blue;"&gt;null&lt;/span&gt;);

  &lt;span style="color:blue;"&gt;public string &lt;/span&gt;DefaultValue
  {
    &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;(&lt;span style="color:blue;"&gt;string&lt;/span&gt;)GetValue(DefaultValueProperty); }
    &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ SetValue(DefaultValueProperty, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }
  }

  &lt;span style="color:green;"&gt;// And following depenedency properties: DefaultValue, Description, DisplayName, etc.
&lt;/span&gt;&lt;font color="#008000"&gt;&lt;/font&gt;&lt;span style="color:green;"&gt;  // ... &lt;/span&gt;
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The default template for the controls:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Style &lt;/span&gt;&lt;span style="color:red;"&gt;TargetType&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;local:FieldsPropertiesGrid&amp;quot;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter &lt;/span&gt;&lt;span style="color:red;"&gt;Property&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Template&amp;quot;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ControlTemplate &lt;/span&gt;&lt;span style="color:red;"&gt;TargetType&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;local:FieldsPropertiesGrid&amp;quot;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Border &lt;/span&gt;&lt;span style="color:red;"&gt;Background&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TemplateBinding &lt;/span&gt;&lt;span style="color:red;"&gt;Background&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;
                          &lt;/span&gt;&lt;span style="color:red;"&gt;BorderBrush&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TemplateBinding &lt;/span&gt;&lt;span style="color:red;"&gt;BorderBrush&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;
                          &lt;/span&gt;&lt;span style="color:red;"&gt;BorderThickness&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TemplateBinding &lt;/span&gt;&lt;span style="color:red;"&gt;BorderThickness&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;lst&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;ItemsSource&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;Data&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
              &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;local&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;FiledPropertyData &lt;/span&gt;&lt;span style="color:red;"&gt;Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0,2.5&amp;quot;/&amp;gt;
              &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Border&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Style&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Style &lt;/span&gt;&lt;span style="color:red;"&gt;TargetType&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;local:FiledPropertyData&amp;quot;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter &lt;/span&gt;&lt;span style="color:red;"&gt;Property&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Template&amp;quot;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ControlTemplate &lt;/span&gt;&lt;span style="color:red;"&gt;TargetType&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;local:FiledPropertyData&amp;quot;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid &lt;/span&gt;&lt;span style="color:red;"&gt;ToolTipService.Placement&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Mouse&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TemplateBinding &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;DisplayName&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Center&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Left&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0,0,10,0&amp;quot;/&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBox &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;DefaultValue&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Center&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Right&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;IsEnabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;IsReadOnly&lt;/span&gt;&lt;span style="color:blue;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;Converter&lt;/span&gt;&lt;span style="color:blue;"&gt;={&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource &lt;/span&gt;&lt;span style="color:red;"&gt;boolToEnabledConverter&lt;/span&gt;&lt;span style="color:blue;"&gt;}}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Grid.Column&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;1&amp;quot;/&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTipService.ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip &lt;/span&gt;&lt;span style="color:red;"&gt;Background&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Transparent&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;BorderBrush&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Transparent&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;BorderThickness&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Padding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot;&amp;gt;
              &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip.Content&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Border &lt;/span&gt;&lt;span style="color:red;"&gt;Background&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;PaleGoldenrod&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;BorderBrush&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Black&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;BorderThickness&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;2&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;CornerRadius&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Padding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0&amp;quot;&amp;gt;
                  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;Description&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;/&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Border&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
              &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip.Content&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTipService.ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Style&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;The sample page creates an instance of SampleData class, and displays attributed the properties/fields in the fields grid:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;LayoutRoot&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Background&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.Resources&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;local&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;PropetiesConverter &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;propertiesConverter&amp;quot;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;theSampleButton&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Content&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Sample Button&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;100&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;25&amp;quot;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;local&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SampleData &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;theSampleData&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;BooleanProperty&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;True&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;StringProperty&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Test String&amp;quot; &lt;br /&gt;                                            &lt;/span&gt;&lt;span style="color:red;"&gt;ButtonProperty&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource &lt;/span&gt;&lt;span style="color:red;"&gt;theSampleButton&lt;/span&gt;&lt;span style="color:blue;"&gt;}&amp;quot;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.Resources&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;local&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;FieldsPropertiesGrid &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;propGrid&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Data&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;Source&lt;/span&gt;&lt;span style="color:blue;"&gt;={&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource &lt;/span&gt;&lt;span style="color:red;"&gt;theSampleData&lt;/span&gt;&lt;span style="color:blue;"&gt;}, &lt;br /&gt;                                                               &lt;/span&gt;&lt;span style="color:red;"&gt;Converter&lt;/span&gt;&lt;span style="color:blue;"&gt;={&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StaticResource &lt;/span&gt;&lt;span style="color:red;"&gt;propertiesConverter&lt;/span&gt;&lt;span style="color:blue;"&gt;}}&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The last thing here is the converter which get’s the instance and returns the &lt;span style="color:#2b91af;"&gt;ObservableCollection&lt;/span&gt; with properties/fields info:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropetiesConverter &lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;IValueConverter
&lt;/span&gt;{
  &lt;span style="color:blue;"&gt;#region &lt;/span&gt;IValueConverter Members

  &lt;span style="color:blue;"&gt;public object &lt;/span&gt;Convert(&lt;span style="color:blue;"&gt;object &lt;/span&gt;value, &lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;targetType, &lt;span style="color:blue;"&gt;object &lt;/span&gt;parameter, System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture)
  {
    &lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;destType = value.GetType();
    &lt;span style="color:#2b91af;"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;FieldsPropertiesData&lt;/span&gt;&amp;gt; props = &lt;span style="color:#2b91af;"&gt;ReflectionHelper&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;SampleData&lt;/span&gt;&amp;gt;.GetProperties((&lt;span style="color:#2b91af;"&gt;SampleData&lt;/span&gt;)value);

    &lt;span style="color:blue;"&gt;return &lt;/span&gt;props;
  }

  &lt;span style="color:blue;"&gt;public object &lt;/span&gt;ConvertBack(&lt;span style="color:blue;"&gt;object &lt;/span&gt;value, &lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;targetType, &lt;span style="color:blue;"&gt;object &lt;/span&gt;parameter, System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture)
  {
    &lt;span style="color:blue;"&gt;throw new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;NotImplementedException&lt;/span&gt;();
  }

  &lt;span style="color:blue;"&gt;#endregion
&lt;/span&gt;}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;That’s it – not any type with known attributes will be displayed in the Properties Grid:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_5E5B1F69.png" width="303" height="140" /&gt; &lt;/p&gt;

&lt;p&gt;If adding new Field/Property with the attribute it will be shown next time the Properties grid displayed:&lt;/p&gt;

&lt;pre class="code"&gt;[&lt;span style="color:#2b91af;"&gt;PropertyFieldDescription&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Additional String Field&amp;quot;&lt;/span&gt;, Description = &lt;span style="color:#a31515;"&gt;&amp;quot;This is additional sample string field&amp;quot;&lt;/span&gt;, &lt;br /&gt;                                                     DefaultValue = &lt;span style="color:#a31515;"&gt;&amp;quot;Test Value&amp;quot;&lt;/span&gt;)]
&lt;span style="color:blue;"&gt;public string &lt;/span&gt;AdditionaStringProperty = &lt;span style="color:#a31515;"&gt;&amp;quot;New Value&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_7D319347.png" width="342" height="135" /&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The source code &lt;a href="http://www.devcorner.info/Sources/DevCorner.Samples.PropertiesBrowser.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Running sample &lt;a href="http://www.devcorner.info/#/Samples" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy,&lt;/p&gt;

&lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=378817" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Dynamic/default.aspx">Dynamic</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Data+Binding/default.aspx">Data Binding</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+3/default.aspx">Silverlight 3</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Propeties/default.aspx">Propeties</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Reflection/default.aspx">Reflection</category></item><item><title>Silverlight 3: Hebrew and Arabic Support</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/07/10/silverlight-3-hebrew-and-arabic-support.aspx</link><pubDate>Fri, 10 Jul 2009 14:36:10 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:362827</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>66</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=362827</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=362827</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/07/10/silverlight-3-hebrew-and-arabic-support.aspx#comments</comments><description>&lt;p&gt;Since I’m constantly getting many questions about Hebrew and Arabic support and also huge amount of requests to provide/support it, I’ve updated the SilverlightRTL project at codeplex to support Silverlight 3.&lt;/p&gt;  &lt;p&gt;The project homepage &lt;a href="http://silverlightrtl.codeplex.com/" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Latest release for Silverlight 3 RTW is &lt;a href="http://silverlightrtl.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30010" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The updated source also includes sample application to demonstrate Bidi controls usage and comparison with standard core controls with Hebrew and Arabic:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/clip_image002_0A5E0883.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.microsoft.co.il/blogs/alex_golesh/clip_image002_thumb_153AE9CB.jpg" width="644" height="350" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/clip_image00212_383B356E.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image002[12]" border="0" alt="clip_image002[12]" src="http://blogs.microsoft.co.il/blogs/alex_golesh/clip_image00212_thumb_2DBA614E.jpg" width="644" height="350" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy,&lt;/p&gt;  &lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=362827" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+3/default.aspx">Silverlight 3</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Release/default.aspx">Release</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/RTW/default.aspx">RTW</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/SilverlightRTL/default.aspx">SilverlightRTL</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Hebrew/default.aspx">Hebrew</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Arabic/default.aspx">Arabic</category></item><item><title>Silverlight 3 Quick Tip #6: Navigation Framework and Uri Routing</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/04/02/silverlight-3-quick-tip-6-navigation-framework-and-uri-routing.aspx</link><pubDate>Thu, 02 Apr 2009 18:44:14 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:263789</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>40</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=263789</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=263789</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/04/02/silverlight-3-quick-tip-6-navigation-framework-and-uri-routing.aspx#comments</comments><description>&lt;p&gt;Silverlight 3 introduced the Navigation Framework and URI Routing features. Today I’ll show how to use those features.&lt;/p&gt;  &lt;p&gt;To use navigation features you could either create a new “Silverlight Navigation Application” or simply add relevant references to standard “Silverlight application”&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_5F5701AD.png" width="644" height="458" /&gt;&lt;/p&gt;  &lt;p&gt;In case of standard “Silverlight Application” you need to add reference to “System.Windows.Controls.Navigation” assembly and relevant XAML introduce namespace:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;navigation&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;To use the navigation feature, simply add new Frame to your XAML page. Frame could have default content, specify Journal usage (own history storage or integration within browser’s history), raise navigation related events.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;navigation&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Frame &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;frame&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Source&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/Pages/DefaultPage.xaml&amp;quot;
                      &lt;/span&gt;&lt;span style="color:red;"&gt;HorizontalContentAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Stretch&amp;quot;
                      &lt;/span&gt;&lt;span style="color:red;"&gt;VerticalContentAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Stretch&amp;quot;
                      &lt;/span&gt;&lt;span style="color:red;"&gt;Padding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;15,10,15,10&amp;quot;
                      &lt;/span&gt;&lt;span style="color:red;"&gt;Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5,0&amp;quot;
                      &lt;/span&gt;&lt;span style="color:red;"&gt;Background&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;This is default content for the navigation frame&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;FontFamily&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Times New Roman&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;FontSize&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;25&amp;quot;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;navigation&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Frame&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;To navigate to new page use “Navigate” function of Frame object:&lt;/p&gt;

&lt;pre class="code"&gt;frame.Navigate(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Uri&lt;/span&gt;(“/Pages/Page1.xaml”, &lt;span style="color:#2b91af;"&gt;UriKind&lt;/span&gt;.Relative));&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Navigation could be done to class instances derived from “System.Windows.Controls.Page” class. The simplest way to create such a class (and XAML) is by adding to the project new item from “Silverlight Page” type:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_340244D9.png" width="644" height="388" /&gt; &lt;/p&gt;

&lt;p&gt;In addition to navigation, the Frame provides functionality to navigate Forward/Backward according to own/browsing history. Sample “Next”/“Previous” button handlers:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private void &lt;/span&gt;btnNext_Click(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;RoutedEventArgs &lt;/span&gt;e)
{
  &lt;span style="color:blue;"&gt;if &lt;/span&gt;(frame.CanGoForward)
    frame.GoForward();
}

&lt;span style="color:blue;"&gt;private void &lt;/span&gt;btnPrev_Click(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;RoutedEventArgs &lt;/span&gt;e)
{
  &lt;span style="color:blue;"&gt;if &lt;/span&gt;(frame.CanGoBack)
    frame.GoBack();
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The history definition for the frame defined by JournalOwnership dependency property:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_717F7CD5.png" width="296" height="95" /&gt; &lt;/p&gt;

&lt;table cellspacing="0" cellpadding="2"&gt;
    &lt;tr&gt;
      &lt;td valign="top"&gt;Automatic [default]&lt;/td&gt;

      &lt;td valign="top"&gt;Whether or not this Frame will create and use its own journal depends on its parent&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;OwnsJournal&lt;/td&gt;

      &lt;td valign="top"&gt;The Frame maintains its own journal&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;UsesParentJournal&lt;/td&gt;

      &lt;td valign="top"&gt;The Frame uses the journal of the next available navigation host up the content tree, if available. Otherwise, navigation history is not maintained for the Frame&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;To raise navigation related events subscribe to themNext:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;//This event will be fired when frame is already navigated
&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.frame.Navigated += &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;NavigatedEventHandler&lt;/span&gt;(frame_Navigated);
&lt;span style="color:green;"&gt;//This event will be fired when frame is navigating
&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.frame.Navigating += &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;NavigatingCancelEventHandler&lt;/span&gt;(frame_Navigating);
&lt;span style="color:green;"&gt;//This event will be fired when navigation error occurs
&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.frame.NavigationFailed += &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;NavigationFailedEventHandler&lt;/span&gt;(frame_NavigationFailed);&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;By using this Navigation Framework features you could implement deep linking support by URI Routing feature. To use this feature you need to create the UriMapper in application resources. To do so first you need to introduce a namespace in your App.XAML:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;navcore&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation&amp;quot;
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Then create the UriMapper as a part of application resources:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Application.Resources&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;navcore&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UriMapper &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;uriMapper&amp;quot;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;navcore&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UriMapping &lt;/span&gt;&lt;span style="color:red;"&gt;Uri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Home&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;MappedUri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/Pages/DefaultPage.xaml&amp;quot;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;navcore&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UriMapping &lt;/span&gt;&lt;span style="color:red;"&gt;Uri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Link{number}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;MappedUri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/Pages/Page{number}.xaml&amp;quot;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;navcore&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UriMapping &lt;/span&gt;&lt;span style="color:red;"&gt;Uri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Page/{number}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;MappedUri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/Pages/Page{number}.xaml&amp;quot;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;navcore&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UriMapping &lt;/span&gt;&lt;span style="color:red;"&gt;Uri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Customers/{id}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;MappedUri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/Pages/Page1.xaml?action=getCustomer&amp;amp;amp;id={id}&amp;quot;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;navcore&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UriMapping &lt;/span&gt;&lt;span style="color:red;"&gt;Uri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Products/{id}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;MappedUri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/Pages/Page1.xaml?action=getProduct&amp;amp;amp;id={id}&amp;quot;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;navcore&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UriMapping &lt;/span&gt;&lt;span style="color:red;"&gt;Uri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Stories/{id}&amp;amp;amp;{number}&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;MappedUri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/Pages/Page1.xaml?action={id}&amp;amp;amp;page={number}&amp;quot;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;navcore&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UriMapper&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Application.Resources&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;In Beta 1 build the Uri Mapper must have “uriMapper” name, otherwise it will not work&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In my case the mapping is very straightforward:&lt;/p&gt;

&lt;table cellspacing="0" cellpadding="2"&gt;
    &lt;tr&gt;
      &lt;td valign="top"&gt;Uri&lt;/td&gt;

      &lt;td valign="top"&gt;Target + Description&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;Home&lt;/td&gt;

      &lt;td valign="top"&gt;/Pages/DefaultPage.xaml&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;Link{number}&lt;/td&gt;

      &lt;td valign="top"&gt;/Pages/Page{number}.xaml –-&amp;gt; use {number} as variable received from navigation input&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;Page/{number}&lt;/td&gt;

      &lt;td valign="top"&gt;/Pages/Page{number}.xaml –-&amp;gt; use {number} as variable received from navigation input&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;Customers/{id}&lt;/td&gt;

      &lt;td valign="top"&gt;/Pages/Page1.xaml?action=getCustomer&amp;amp;amp;id={id} –-&amp;gt; use {id} as part of Query String&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;Products/{id}&lt;/td&gt;

      &lt;td valign="top"&gt;/Pages/Page1.xaml?action=getProduct&amp;amp;amp;id={id} –-&amp;gt; use {id} as part of Query String&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;Stories/{id}&amp;amp;amp;{number}&lt;/td&gt;

      &lt;td valign="top"&gt;/Pages/Page1.xaml?action={id}&amp;amp;amp;page={number} –&amp;gt; use {id} and {number} in Query String. You could introduce as many, as you need.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;

&lt;p&gt;When navigating, the navigating URI becomes something much more readable (and SEO):&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_04540080.png" width="359" height="34" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_426D1B31.png" width="412" height="34" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_0811A550.png" width="351" height="30" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_71DB89FD.png" width="383" height="31" /&gt; &lt;/p&gt;

&lt;p&gt;The passed query string parameters could be used on specific page from NavigationContext. While creating new “Silverlight Page” visual studio also creates override function “OnNavigatedTo” which being executed right after navigation to the page:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;// Executes when the user navigates to this page.
&lt;/span&gt;&lt;span style="color:blue;"&gt;protected override void &lt;/span&gt;OnNavigatedTo(&lt;span style="color:#2b91af;"&gt;NavigationEventArgs &lt;/span&gt;e)
{
  &lt;span style="color:blue;"&gt;if &lt;/span&gt;(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.NavigationContext.QueryString.ContainsKey(&lt;span style="color:#a31515;"&gt;&amp;quot;action&amp;quot;&lt;/span&gt;))
  {

    &lt;span style="color:blue;"&gt;switch &lt;/span&gt;(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.NavigationContext.QueryString[&lt;span style="color:#a31515;"&gt;&amp;quot;action&amp;quot;&lt;/span&gt;])
    {
      &lt;span style="color:blue;"&gt;case &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;getCustomer&amp;quot;&lt;/span&gt;:
        txtOutput.Text = &lt;span style="color:#a31515;"&gt;&amp;quot;This is DUMMY info CustomerID = &amp;quot; &lt;/span&gt;+ &lt;span style="color:blue;"&gt;this&lt;/span&gt;.NavigationContext.QueryString[&lt;span style="color:#a31515;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;];
        &lt;span style="color:blue;"&gt;break&lt;/span&gt;;
      &lt;span style="color:blue;"&gt;case &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;getProduct&amp;quot;&lt;/span&gt;:
        txtOutput.Text = &lt;span style="color:#a31515;"&gt;&amp;quot;This is DUMMY info ProductID = &amp;quot; &lt;/span&gt;+ &lt;span style="color:blue;"&gt;this&lt;/span&gt;.NavigationContext.QueryString[&lt;span style="color:#a31515;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;];
        &lt;span style="color:blue;"&gt;break&lt;/span&gt;;
      &lt;span style="color:blue;"&gt;default&lt;/span&gt;:
        txtOutput.Text = &lt;span style="color:#a31515;"&gt;&amp;quot;This is DUMMY story saved in my sources with ID = &amp;quot; 
          &lt;/span&gt;+ &lt;span style="color:blue;"&gt;this&lt;/span&gt;.NavigationContext.QueryString[&lt;span style="color:#a31515;"&gt;&amp;quot;action&amp;quot;&lt;/span&gt;] + &lt;span style="color:#a31515;"&gt;&amp;quot; opened on page #&amp;quot; 
          &lt;/span&gt;+ &lt;span style="color:blue;"&gt;this&lt;/span&gt;.NavigationContext.QueryString[&lt;span style="color:#a31515;"&gt;&amp;quot;page&amp;quot;&lt;/span&gt;];
        &lt;span style="color:blue;"&gt;break&lt;/span&gt;;
    }
  }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;That’s it for today.&lt;/p&gt;

&lt;p&gt;Sample application sources is &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/NavigationDemo.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy,&lt;/p&gt;

&lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=263789" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+3/default.aspx">Silverlight 3</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Beta/default.aspx">Beta</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/UriMapping/default.aspx">UriMapping</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Navigation/default.aspx">Navigation</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/UriMapper/default.aspx">UriMapper</category></item><item><title>Silverlight 3 Quick Tip #3: Creating custom easing for Silverlight animations</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/03/19/silverlight-3-quick-tip-3-creating-custom-easing-for-silverlight-animations.aspx</link><pubDate>Thu, 19 Mar 2009 05:15:17 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:251839</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=251839</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=251839</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/03/19/silverlight-3-quick-tip-3-creating-custom-easing-for-silverlight-animations.aspx#comments</comments><description>&lt;p&gt;This time I’ll show how to use new easing functions for animations. In Silverlight 3 we could apply one of existing easing functions to our animation (storyboard) or create our own.&lt;/p&gt;  &lt;p&gt;First, let’s apply existing easing function. &lt;/p&gt;  &lt;p&gt;On my sample page I have a bunch of buttons to control UI, a stack panel with some path that looks like a spring and a ball attached to it. Also I created a storyboard to animate the Width property:&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Background&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LightGray&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel.Resources&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;BeginStoryboard&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;sb1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Storyboard&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DoubleAnimation&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;springAnim&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;RepeatBehavior&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Forever&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;AutoReverse&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Duration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0:0:3&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                             &lt;span style="color:#ff0000;"&gt;From&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;To&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Storyboard&lt;/span&gt;.&lt;span style="color:#ff0000;"&gt;TargetName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;spring&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Storyboard&lt;/span&gt;.&lt;span style="color:#ff0000;"&gt;TargetProperty&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Width&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Storyboard&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;BeginStoryboard&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel.Resources&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Orientation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;btnAnimate&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;No Ease&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Click&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;btnAnimate_Click_1&amp;quot;&lt;/span&gt;  &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;25&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;btnAnimate1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Predefined Ease&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Click&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;btnAnimate_Click&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;25&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;btnAnimate2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Custom Ease&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Click&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;btnAnimate2_Click&amp;quot;&lt;/span&gt;  &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;25&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Orientation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Path&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;spring&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Fill&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Transparent&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Stretch&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Fill&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Stroke&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Black&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;StrokeThickness&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Data&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;M49,306 L75,266 L91.5,303.5 L116.70348,265.5 L132.89345,300.56708 L151.9158,268.95731 L165.57288,297.60367 L175.32793,282.78659 L183.58783,281.79877&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;RenderTransformOrigin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0.5,0&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Center&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Left&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Path.RenderTransform&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TransformGroup&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ScaleTransform&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;TransformGroup&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Path.RenderTransform&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Path&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Ellipse&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ball&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;30&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;30&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Fill&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Red&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Left&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Center&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="104" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_5C0B1BEE.png" width="371" border="0" /&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now let’s see the the code behind those buttons…&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;No ease is simple – just assign NULL to easing function property of the storyboard:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; btnAnimate_Click_1(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    springAnim.EasingFunction = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Using existing easing is also very simple task – just select one on existing ease function in System.Windows.Media.Animiation namespace, tweak the function parameters (optional) and assign it as EasingFunction of the storyboard:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; btnAnimate_Click(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  ElasticEase ease = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ElasticEase();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  ease.EasingMode = EasingMode.EaseOut;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  ease.Springiness = 5;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  ease.Oscillations = 10;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  springAnim.EasingFunction = ease;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now the interesting one – I’ll create my simple easing function. To do it, I have to create a new class, which derives from EasingFunctionBase class (the base class in from System.Windows.Media.Animiation namespace):&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; CustomSquareRootEase : EasingFunctionBase&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; CustomSquareRootEase()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    : &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;double&lt;/span&gt; EaseInCore(&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt; normalizedTime)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; Math.Sqrt(normalizedTime);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;My math was very simple, but still not standard easing. Now the usage of this one is exactly like any other existing easing function:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; btnAnimate2_Click(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt; springAnim.EasingFunction = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CustomSquareRootEase();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Sample code is &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/AnimationCustomEasingDemo.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Stay tuned to more tips and enjoy,&lt;/p&gt;

&lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=251839" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/MIX09/default.aspx">MIX09</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Storyboard/default.aspx">Storyboard</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+3/default.aspx">Silverlight 3</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Beta/default.aspx">Beta</category></item><item><title>Silverlight 2 Metro Training Event in Mumbai</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/02/26/silverlight-2-metro-training-event-in-mumbai.aspx</link><pubDate>Thu, 26 Feb 2009 16:16:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:236098</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=236098</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=236098</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/02/26/silverlight-2-metro-training-event-in-mumbai.aspx#comments</comments><description>&lt;p&gt;I’m doing a Silverlight 2 Training for MS Metro program in Mumbai.&lt;/p&gt;  &lt;p&gt;Thanks for all participants in this event. Hope you enjoyed the course as much as I enjoyed doing it.&lt;/p&gt;  &lt;p&gt;As promised the selected samples from this event could be found &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/SilverlightApplication35.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Samples updated…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Thanks and Enjoy the samples&lt;/p&gt;  &lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=236098" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+2/default.aspx">Silverlight 2</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Presentation/default.aspx">Presentation</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Style/default.aspx">Style</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Data+Binding/default.aspx">Data Binding</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Storyboard/default.aspx">Storyboard</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Metro+Training/default.aspx">Metro Training</category></item><item><title>Silverlight 2 Developer Day – a minute after</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/02/04/silverlight-2-developer-day-a-minute-after.aspx</link><pubDate>Wed, 04 Feb 2009 19:24:18 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:222049</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=222049</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=222049</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/02/04/silverlight-2-developer-day-a-minute-after.aspx#comments</comments><description>&lt;p&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="image" border="0" alt="image" align="right" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_1F25BC51.png" width="225" height="281" /&gt;Thank you all, who participated today at &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/01/14/silverlight-2-developer-day.aspx"&gt;Silverlight 2 Developer Day&lt;/a&gt; (Microsoft Israel offices). I uploaded printouts of the slides, presented during the session and the demo code so you can download it for a 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;&amp;#160;&lt;/p&gt;  &lt;p&gt;PowerPoint printouts here:&lt;/p&gt; &lt;iframe style="border-bottom:#dde5e9 1px solid;border-left:#dde5e9 1px solid;padding-bottom:0px;background-color:#ffffff;margin:3px;padding-left:0px;width:240px;padding-right:0px;height:66px;border-top:#dde5e9 1px solid;border-right:#dde5e9 1px solid;padding-top:0px;" src="http://cid-7b52e283f918b15b.skydrive.live.com/embedrowdetail.aspx/Public/SL2DevDay.xps" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Demo project sources &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/LiveDemo.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Thanks and hope to see you again next time!&lt;/p&gt;  &lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=222049" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+2/default.aspx">Silverlight 2</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Presentation/default.aspx">Presentation</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Developers+Day/default.aspx">Developers Day</category></item><item><title>Silverlight in the Mesh and the “Cloud” – Hosted Service and Blob Storage (Part 2)</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/01/15/silverlight-in-the-mesh-and-the-cloud-hosted-service-and-blob-storage-part-2.aspx</link><pubDate>Thu, 15 Jan 2009 21:43:07 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:211866</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=211866</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=211866</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/01/15/silverlight-in-the-mesh-and-the-cloud-hosted-service-and-blob-storage-part-2.aspx#comments</comments><description>&lt;p&gt;Hello. As I promised &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/01/14/silverlight-in-the-mesh-and-the-cloud-introduction-teaser-part-1.aspx" target="_blank"&gt;here&lt;/a&gt; I’m starting to describe my experiences in creating Silverlight Mesh Enabled Web Application (MEWA or SMEWA) with Cloud Hosted Services and Cloud Storage.&lt;/p&gt;  &lt;p&gt;Today I’ll talk about creating the storage and supported hosted services.&lt;/p&gt;  &lt;p&gt;First of all I needed to be a part of Windows Azure CTP and have at least 1 Storage account (to have persistent and non-persistent storage in Windows Azure) and at least 1 Hosted Services account (environment that provides the hosting and management service for cloud based applications).&lt;/p&gt;  &lt;p&gt;To get such account(s) one should apply for them via &lt;a href="http://connect.microsoft.com/" target="_blank"&gt;Microsoft Connect&lt;/a&gt; site.&lt;/p&gt;  &lt;p&gt;After getting invitation to this program from Microsoft Connect you could go to &lt;a href="https://lx.azure.microsoft.com/" target="_blank"&gt;Azure Services Developer Portal&lt;/a&gt;, claim received tokens, download and install &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=80e3eabf-0507-4560-aeb6-d31e9a70a0a6&amp;amp;displaylang=en" target="_blank"&gt;Windows Azure SDK&lt;/a&gt; and &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8e90b639-1ef0-4e21-bb73-fc22662911bc&amp;amp;displaylang=en" target="_blank"&gt;Windows Azure Tools Visual Studio&lt;/a&gt; and start creating cloud based applications. &lt;em&gt;One small note here – those tools doesn’t support Windows 7 Beta right now, so it will not work there&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Once all setup done, we could go to &lt;a href="https://lx.azure.microsoft.com/" target="_blank"&gt;Azure Services Developer Portal&lt;/a&gt; and create a new project: &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="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_064857E5.png" width="719" height="363" /&gt; &lt;/p&gt;  &lt;p&gt;I created 1 for Storage &lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_43F53FA1.png" width="540" height="413" /&gt;&lt;/p&gt;  &lt;p&gt;(Endpoints are gateways that I could use from anywhere when accessing my storage account, and pair of key access is to secure my connection.)&lt;/p&gt;  &lt;p&gt;Another project was created for Hosted Services&lt;/p&gt;  &lt;p&gt;You could have 2 projects simultaneously running at the cloud – one for testing/debugging online and one as a real production service. The URL for the service in Staging will change every time you will re-deploy the new version of the service, thus you have to reconfigure your applications which will work with those services externally.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_1A31C4AE.png" width="593" height="645" /&gt;&lt;/p&gt;  &lt;p&gt;Now back to my “Cloud Store”. I decided to provide access to my cloud storage via Web Services and those web services will be in my Host Services Project.&lt;/p&gt;  &lt;p&gt;After installing Windows Azure Tools for Visual Studio you will get new project templates:&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="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_367F06CE.png" width="632" height="484" /&gt; &lt;/p&gt;  &lt;p&gt;For my purposes I’ve created Web Cloud Service. In my service I’ve added 2 new web services – one which will be used by Content Management UI SMEWA, and one by Content Consumer UI SMEWA. I wish I had more Hosted Services projects allocated to use different projects for each application, but I haven’t. Also, I could use the same service for both applications but I wanted the whole thing to me close to the real world architecture.&lt;/p&gt;  &lt;p&gt;When you creating such a project Visual Studio will create 2 projects in the solution – ASP.NET Web Application and the Web Cloud Service Project:&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="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_13026269.png" width="242" height="354" /&gt;&lt;/p&gt;  &lt;p&gt; In my case I’ve also added 2 exiting projects from Windows Azure SDK Samples (Common and Storage Client) which will handle for me all communications with the blob.&lt;/p&gt;  &lt;p&gt;Now to the interesting part. Lets see how to work with the blob storage. Most of the “real mesh code” was taken from PCD demos and samples from Windows Azure SDK so if you need more info you know where to find it.&lt;/p&gt;  &lt;p&gt;Let’s see&amp;#160; the FileUpload WebMethod as an example:&lt;/p&gt;  &lt;div&gt;   &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;[WebMethod]&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; UploadFile(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; fileName, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; contentType ,&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] f)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#008000;"&gt;//Assume success - its good to be optmistic :)&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; bRes = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#008000;"&gt;// Get the configuration from the cscfg(cloud service configuration) file&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    StorageAccountInfo accountInfo = StorageAccountInfo.GetDefaultBlobStorageAccountFromConfiguration();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#008000;"&gt;// Container names have the same restrictions as DNS names&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    BlobStorage blobStorage = BlobStorage.Create(accountInfo);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    _Container = blobStorage.GetBlobContainer(RoleManager.GetConfigurationSetting(&lt;span style="color:#006080;"&gt;&amp;quot;ContainerName&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#008000;"&gt;// returns false if the container already exists, ignore for now&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#008000;"&gt;// Make the container public so that we can hit the URLs from the web&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    _Container.CreateContainer(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; NameValueCollection(), ContainerAccessControl.Public);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    BlobProperties properties = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; BlobProperties(Guid.NewGuid().ToString());&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#008000;"&gt;// Create metadata to be associated with the blob&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    NameValueCollection metadata = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; NameValueCollection();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    metadata[&lt;span style="color:#006080;"&gt;&amp;quot;FileName&amp;quot;&lt;/span&gt;] = fileName;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    properties.Metadata = metadata;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    properties.ContentType = contentType;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#008000;"&gt;// Create the blob&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    BlobContents fileBlob = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; BlobContents(f);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    _Container.CreateBlob(properties, fileBlob, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (WebException webExcept)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    bRes = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (webExcept.Status == WebExceptionStatus.ConnectFailure)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      System.Diagnostics.Debug.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Failed to connect to the Blob Storage Service, make sure it is running: &amp;quot;&lt;/span&gt; + webExcept.Message);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      System.Diagnostics.Debug.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Error creating container: &amp;quot;&lt;/span&gt; + webExcept.Message);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception ex)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    bRes = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    System.Diagnostics.Debug.WriteLine(ex.Message);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; bRes;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The code itself is pretty easy – create or get blob container, fill new blob properties and metadata and the create new blob to the container.&lt;/p&gt;

&lt;p&gt;Same goes for DeleteFile WebMethod&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;[WebMethod]&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; DeleteFile(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; fileName)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; bRes = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#008000;"&gt;// Get the configuration from the cscfg file&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  StorageAccountInfo accountInfo = StorageAccountInfo.GetDefaultBlobStorageAccountFromConfiguration();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#008000;"&gt;// Container names have the same restrictions as DNS names&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  BlobStorage blobStorage = BlobStorage.Create(accountInfo);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  _Container = blobStorage.GetBlobContainer(RoleManager.GetConfigurationSetting(&lt;span style="color:#006080;"&gt;&amp;quot;ContainerName&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#008000;"&gt;//Check if desired blob exists, and if it does - delete it&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_Container.DoesBlobExist(fileName))&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    bRes = _Container.DeleteBlob(fileName);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; bRes;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Last, but not least is I want to able to show blob contents in my management SMEWA, so I created GetFiles WebMethod&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;[WebMethod]&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; List&amp;lt;ContentEntry&amp;gt; GetFiles()&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#008000;"&gt;// Get the configuration from the cscfg file&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  StorageAccountInfo accountInfo = StorageAccountInfo.GetDefaultBlobStorageAccountFromConfiguration();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#008000;"&gt;// Container names have the same restrictions as DNS names&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  BlobStorage blobStorage = BlobStorage.Create(accountInfo);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  _Container = blobStorage.GetBlobContainer(RoleManager.GetConfigurationSetting(&lt;span style="color:#006080;"&gt;&amp;quot;ContainerName&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#008000;"&gt;//Get blobs in my account&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  IEnumerable&amp;lt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&amp;gt; blobs = _Container.ListBlobs(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  List&amp;lt;ContentEntry&amp;gt; filesList = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;ContentEntry&amp;gt;();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; o &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; blobs)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    BlobProperties bp = o &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; BlobProperties;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (bp != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#008000;"&gt;//Get current blob properties&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      BlobProperties p = _Container.GetBlobProperties(bp.Name);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      NameValueCollection fileEntryProperties = p.Metadata;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#008000;"&gt;//Create data container which will return relevan information to the client&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      filesList.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ContentEntry() { BlobName = p.Name, FileUri = bp.Uri.ToString(), FileName = fileEntryProperties[&lt;span style="color:#006080;"&gt;&amp;quot;FileName&amp;quot;&lt;/span&gt;], Submitter = &lt;span style="color:#006080;"&gt;&amp;quot;ALEX&amp;quot;&lt;/span&gt; });&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; filesList;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The ContentEntry class itself is pretty simple also:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ContentEntry&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ContentEntry()&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ContentEntry(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; blobName, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; fileAddress, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; user)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      BlobName = blobName;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      FileUri = fileAddress;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      FileName = name;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      Submitter = user;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; FileUri { get; set; }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; BlobName { get; set; }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; FileName { get; set; }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Submitter { get; set; }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;After doing all that, I had to configure my service to work with local development storage. Configuration settings for cloud services defined in file named “ServiceDefinition.csdef”. In my case it is like follows:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ServiceDefinition&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;StoreBusinessTier&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;WebRole&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;WebRole&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;InputEndpoints&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#008000;"&gt;&amp;lt;!-- Must use port 80 for http and port 443 for https when running in the cloud --&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;InputEndpoint&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;HttpIn&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;protocol&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;port&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;80&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;InputEndpoints&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ConfigurationSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Setting&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;AccountName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Setting&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;AccountSharedKey&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Setting&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;BlobStorageEndpoint&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Setting&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ContainerName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ConfigurationSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;WebRole&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ServiceDefinition&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And the actual values for those configuration settings are in “ServiceConfiguration.cscfg” file:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ServiceConfiguration&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;serviceName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;StoreBusinessTier&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Role&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;WebRole&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Instances&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;count&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ConfigurationSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#008000;"&gt;&amp;lt;!--Local Develoment Storage Account Settings--&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Setting&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;AccountName&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;devstoreaccount1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Setting&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;AccountSharedKey&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Setting&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;BlobStorageEndpoint&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://127.0.0.1:10000/&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#008000;"&gt;&amp;lt;!--Real Cloud Storage Settings--&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#008000;"&gt;&amp;lt;!--&amp;lt;Setting name=&amp;quot;AccountName&amp;quot; value=&amp;quot;STORAGE_PROJECT_NAME&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;      &amp;lt;Setting name=&amp;quot;AccountSharedKey&amp;quot; value=&amp;quot;PRIMARY_ACCESS_KEY&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;      &amp;lt;Setting name=&amp;quot;BlobStorageEndpoint&amp;quot; value=&amp;quot;https://blob.core.windows.net&amp;quot;/&amp;gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Setting&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ContainerName&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;files&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ConfigurationSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Role&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ServiceConfiguration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Compiling an executing the application will bring Developer Storage&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_4270D135.png" width="607" height="209" /&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;and the Development Fabric&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/image_2E773E9F.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_thumb_4B9CE6A9.png" width="796" height="623" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and finally IE with standard ASP.NET Web Application debugging experience. In my case the WebService was a start-up file, so I’ve got this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/image_6F759836.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_thumb_000D9325.png" width="626" height="237" /&gt;&lt;/a&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;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;My second web service has pretty simple functionality – Listing the exiting files and getting the specific file content:&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="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_25971086.png" width="479" height="159" /&gt; &lt;/p&gt;

&lt;p&gt;GetFile WebMethod should return me the list of files (like FileHandler web service) – I thought I could even use the one from FileHandler… I thought so, but it will not work – will see why in last part.&lt;/p&gt;

&lt;p&gt;GetFile WebMethod should return me the contents of the selected file (byes[] or Stream or something) – pretty easy task… Hm… This one was actually not trivial as it turns out – will see why also in last part.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Last thing I did after checking this service locally with some tester application I’ve deployed this service to the cloud and started to work on my SMEWA:&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="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_1D333B2F.png" width="696" height="114" /&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Stay tuned for the next part. &lt;/p&gt;

&lt;p&gt;This part will connect the two worlds which are very close, but somehow not connected until now -&amp;#160; I will show how to create management SMEWA and use Azure Storage (blob) and Azure Hosted Services (I just created here) to save the data from Live Mesh Application to the Windows Azure Storage.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy,&lt;/p&gt;

&lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=211866" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/ASP+.NET/default.aspx">ASP .NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+2/default.aspx">Silverlight 2</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Live+Framework/default.aspx">Live Framework</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Hosted+Services/default.aspx">Hosted Services</category></item><item><title>Silverlight in the Mesh and the “Cloud” – Introduction/Teaser (Part 1)</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/01/14/silverlight-in-the-mesh-and-the-cloud-introduction-teaser-part-1.aspx</link><pubDate>Wed, 14 Jan 2009 17:47:24 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:211170</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=211170</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=211170</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/01/14/silverlight-in-the-mesh-and-the-cloud-introduction-teaser-part-1.aspx#comments</comments><description>&lt;p&gt;Hello,&lt;/p&gt;  &lt;p&gt;For quite some time I’m investigating the Azure Services and Live Framework. After gaining some experience, I decided to build simple project - Content Store – to share with you how to build the next generation of applications.&lt;/p&gt;  &lt;p&gt;My “Cloud Store” project will use Windows Azure Storage Account to persist content at the cloud, will use Windows Azure Hosted Services as business logic provider (submit contents to the store, display the contents and “purchase” it). Also, my project will use Live Framework Mesh Silverlight applications to provide UI for content submitters and content viewers/buyers.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Schematically my project looks like follows:&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="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_02E7740B.png" width="460" height="576" /&gt; &lt;/p&gt;  &lt;p&gt;The store itself will be pretty simple – not the real store with security restrictions, money transactions, etc. – to keep the project as simple as possible. In my “ideal” world everyone will be able to submit content, and everyone will be able to “purchase” content for free :)&lt;/p&gt;  &lt;p&gt;Along with it, it will include the demos about how to work with storage account (blobs and possibly tables), how to create/consume hosted services, how to create Mesh applications and consume hosted services from there. Also it will show how to create mesh objects to store purchased content at users Live desktop (at the mesh).&lt;/p&gt;  &lt;p&gt;All parts will be accompanied with sources, but to use the sources you will need to have access to Azure Services Developer Portal and have an ability to create a new projects. At the current stage you have to be a member of CTP to do it.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Stay tuned for next parts really soon.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy,&lt;/p&gt;  &lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=211170" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+2/default.aspx">Silverlight 2</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Live+Framework/default.aspx">Live Framework</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Hosted+Services/default.aspx">Hosted Services</category></item><item><title>Silverlight Tip: Dynamic animations</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/01/06/silverlight-tip-dynamic-animations.aspx</link><pubDate>Tue, 06 Jan 2009 19:19:03 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:206824</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>25</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=206824</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=206824</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/01/06/silverlight-tip-dynamic-animations.aspx#comments</comments><description>&lt;p&gt;Hello,&lt;/p&gt;  &lt;p&gt;I was asked about creation of animations dynamically for various elements. Today I’ll show how to create such animations for any (almost) Silverlight element. I’ll create some of popular standard PowerPoint animations.&lt;/p&gt;  &lt;p&gt;I know that it is not the full set of animations available in PowerPoint, also the animations itself are probably not perfect but it is a good starting point to those who want to know how to do it.&lt;/p&gt;  &lt;p&gt;Generally, to create the animation on-the-fly we need to create a storyboard, add one or more animations to it, add the created storyboard to resources of our container and run it. &lt;/p&gt;  &lt;p&gt;For this sample I’ve created function, which will receive Target Element, new storyboard name and some animation definitions. The function will add created storyboard to topmost parent element resources.&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CreateAnimation(FrameworkElement targetElement,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                             &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; StoryboardName,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                             AnimationSpeed StoryboardDuration,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                             AnimationType type,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                             AnimationDirection direction)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#008000;"&gt;//...&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Also, I’ve created a couple Enums to define animation&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; AnimationType&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;      FlyIn,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;      FlyOut,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;      FadeIn,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;      FadeOut&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; AnimationDirection&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;   {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;     Top,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     Bottom,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;     Right,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     Left,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;     TopLeft,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     TopRight,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;     BottomLeft,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     BottomRight,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;     None&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;   }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; AnimationSpeed&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;   {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;     ExtremlySlow = 10000,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     VerySlow = 5000,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;     Slow = 3000,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     Normal = 1000,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;     Fast = 500,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     VeryFast = 250,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;     ExtrimlyFast = 100&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;   }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In my “CreateAnimation” function I did the following:&lt;/p&gt;

&lt;p&gt;1. Prepared TransformGroup with all possible Transforms for my desired element&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; FrameworkElement prepareTransformGroup(FrameworkElement targetElement, Point transformOrigin)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  targetElement.RenderTransform = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; TransformGroup();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  (targetElement.RenderTransform &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; TransformGroup).Children.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ScaleTransform());&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  (targetElement.RenderTransform &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; TransformGroup).Children.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SkewTransform());&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  (targetElement.RenderTransform &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; TransformGroup).Children.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; RotateTransform());&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  (targetElement.RenderTransform &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; TransformGroup).Children.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; TranslateTransform());&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  targetElement.RenderTransformOrigin = transformOrigin;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; targetElement;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;2. Created new Duration object (based on received parameter) and Storyboard object&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;Duration duration = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Duration(TimeSpan.FromMilliseconds((&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt;)StoryboardDuration));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Storyboard sb = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Storyboard();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;sb.Duration = duration;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;3. Then, based on direction, created animations (will see one of them – in my case other will be almost identical)&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;DoubleAnimation animX = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DoubleAnimation();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;animX.Duration = duration;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;FrameworkElement parent = GetParent(targetElement);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (type == AnimationType.FlyIn)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  animX.From = parent.ActualWidth * -SCALE_FACTOR;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  animX.To = parent.ActualWidth * -SCALE_FACTOR;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;animX.SetValue(Storyboard.TargetNameProperty, targetElement.Name);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Storyboard.SetTargetProperty(animX, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PropertyPath(&lt;span style="color:#006080;"&gt;&amp;quot;(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;sb.Children.Add(animX);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;DoubleAnimation animY = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DoubleAnimation();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;animY.Duration = duration;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (type == AnimationType.FlyIn)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  animY.From = parent.ActualHeight * -SCALE_FACTOR;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  animY.To = parent.ActualHeight * -SCALE_FACTOR;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;animY.SetValue(Storyboard.TargetNameProperty, targetElement.Name);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Storyboard.SetTargetProperty(animY, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PropertyPath(&lt;span style="color:#006080;"&gt;&amp;quot;(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;sb.Children.Add(animY);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;4. Added created storyboard to topmost parent&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;FrameworkElement p = GetParent(targetElement);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;p.Resources.Add(StoryboardName, sb);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;5.GetParent function recursively traverses the visual tree until it gets topmost FrameworkElement&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; FrameworkElement GetParent(FrameworkElement element)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((element.Parent &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; FrameworkElement) == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; element;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;  &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; GetParent((element.Parent &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; FrameworkElement));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now we can call the “CreateAnimation” and then execute created animation&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;FrameworkElement elm = someButton;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; == ((LayoutRoot.Parent &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; FrameworkElement).Resources[&lt;span style="color:#006080;"&gt;&amp;quot;myDynamicAnimation&amp;quot;&lt;/span&gt;] &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Storyboard))&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    CreateAnimation(elm, &lt;span style="color:#006080;"&gt;&amp;quot;myDynamicAnimation&amp;quot;&lt;/span&gt;, AnimationSpeed.Fast, AnimationType.FadeIn, AnimationDirection.None);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;((LayoutRoot.Parent &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; FrameworkElement).Resources[&lt;span style="color:#006080;"&gt;&amp;quot;myDynamicAnimation&amp;quot;&lt;/span&gt;] &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Storyboard).Begin();&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Here it works… &lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:6046ddcf-3eff-4015-bd2a-00447fff8760" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;div id="bd8c0685-b5cd-41de-a694-baeb338fa735" style="margin:0px;padding:0px;display:inline;"&gt;&lt;div&gt;&lt;a href="http://video.msn.com/video.aspx?vid=bf08fe81-32bb-4b1e-971e-0da0a8e0ae15&amp;amp;from=writer" target="_new"&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/alex_golesh/videoa5a6c3920d77_31ADF663.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="clear:both;font-size:.8em;"&gt;Dynamic Silverlight Animation&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Full sources &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/SilverlightApplication30.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy,&lt;/p&gt;

&lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=206824" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+2/default.aspx">Silverlight 2</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Dynamic/default.aspx">Dynamic</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Storyboard/default.aspx">Storyboard</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Animation/default.aspx">Animation</category></item><item><title>Silverlight Tip: How to Inject and Execute JavaScript Function(s) on-the-fly from Silverlight</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2008/12/04/silverlight-tip-how-to-inject-and-execute-javascript-function-s-on-the-fly-from-silverlight.aspx</link><pubDate>Thu, 04 Dec 2008 14:18:09 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:184773</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=184773</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=184773</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2008/12/04/silverlight-tip-how-to-inject-and-execute-javascript-function-s-on-the-fly-from-silverlight.aspx#comments</comments><description>&lt;p&gt;Today I’ve been asked by colleague how to inject and execute JavaScript functionality from Silverlight application to the HTML DOM of hosting page.&lt;/p&gt;  &lt;p&gt;Well, things are pretty easy. First we need to get JavaScript from somewhere. In colleague&amp;#39;s case it was an embedded resource, in my sample I’ll use TextBox to accept the script code. Also I’ll accept function name and parameters from UI.&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="327" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_43175C6E.png" width="643" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;From here we have two approaches: to Eval the function code or to create “Script” element dynamically. &lt;/p&gt;  &lt;p&gt;First approach is very straightforward:&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; src = txtScript.Text;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;HtmlPage.Window.Eval(src);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Second approach is pretty much of the same, but creates a real “Script” block in the document’s body:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;HtmlElement Script = HtmlPage.Document.CreateElement(&lt;span style="color:#006080;"&gt;&amp;quot;script&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Script.SetAttribute(&lt;span style="color:#006080;"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;Script.SetProperty(&lt;span style="color:#006080;"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;, txtScript.Text);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;HtmlPage.Document.DocumentElement.AppendChild(Script);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now all we have to do is execute the function:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; funcParames = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (txtFunctionParams.Text.Length &amp;gt; 0)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    funcParames = txtFunctionParams.Text;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;HtmlPage.Window.Invoke(txtFunctionName.Text, funcParames);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;That’s it… Running application here:&lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:345ab752-3d9c-4489-a7a7-42b9ad531645" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;div id="2c15e757-7fe3-4c8b-a51b-3f5e7113e1e2" style="margin:0px;padding:0px;display:inline;"&gt;&lt;div&gt;&lt;a href="http://video.msn.com/video.aspx?vid=413fb8ab-0247-44b1-b660-8cacb58a8fe8&amp;amp;from=writer" target="_new"&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/alex_golesh/video60e6d5b974b1_61819D57.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="clear:both;font-size:.8em;"&gt;Dynamic JavaScript Injection and Execution with Silverlight&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Sure this application is pretty simple and unsecure, but this is only a demo and could be enriched with any needed functionality.&lt;/p&gt;

&lt;p&gt;Sources &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/DynamicJS.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;p.s. Noam – many thanks for idea ;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy,&lt;/p&gt;

&lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=184773" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Csharp/default.aspx">Csharp</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+2/default.aspx">Silverlight 2</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Video/default.aspx">Video</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Dynamic/default.aspx">Dynamic</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Quick Silverlight Tips: Control Reflection, Control Properties Data Binding, Window Title and Status Bar text (IE only)</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2008/12/01/quick-silverlight-tips-control-reflection-control-properties-data-binding-window-title-and-status-bar-text-ie-only.aspx</link><pubDate>Mon, 01 Dec 2008 14:32:57 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:180366</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=180366</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=180366</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2008/12/01/quick-silverlight-tips-control-reflection-control-properties-data-binding-window-title-and-status-bar-text-ie-only.aspx#comments</comments><description>&lt;p&gt;Well it was pretty long time since my last post here… I was busy, mostly doing consulting… Now the pressure is eased of alittle, so I hope to write here more.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;During this time I heard a couple of questions from clients which were pretty easy to solve but possibly still not obvious.&lt;/p&gt;  &lt;p&gt;My first tip today will be about “how to produce reflection under text box” and “emulate PropertyBinding” (like it worked at WPF)&lt;/p&gt;  &lt;p&gt;To produce reflection (in case of TextBox) I built Vertical StackPanel with desired TextBox and TextBlock with applied ScaleTransform.&lt;/p&gt;  &lt;p&gt;Here sample XAML:&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Orientation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Vertical&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;250&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Background&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Lavender&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;txtTitle&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;200&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;35&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Test Text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;FontSize&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;20&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;txtStatus&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;200&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;35&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Test Text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0,25&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Padding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;3,0&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;FontSize&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;20&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock.RenderTransform&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TransformGroup&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ScaleTransform&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ScaleY&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;-1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;TransformGroup&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock.RenderTransform&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock.Foreground&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;LinearGradientBrush&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;EndPoint&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0.5,1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;StartPoint&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0.5,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;GradientStop&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Color&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;#FF000000&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Offset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;GradientStop&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Color&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;#FFFFFFFF&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Offset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock.Foreground&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In my case I’ve added some Gradient to TextBlock’s foreground to achieve better reflection effect:&lt;/p&gt;

&lt;p&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="67" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_30FD7D38.png" width="223" border="0" /&gt; &lt;/p&gt;

&lt;p&gt;The second part (“property binding emulation”) is slightly harder. To emulate “Property Binding” let’s first see how to bind the TextBox.Text property to the TextBlock.Text property.&lt;/p&gt;

&lt;p&gt;I prepared simple class, which in my case will hold single string property and will implement INotifyPropertyChanged.&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; TextData : INotifyPropertyChanged&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; str = &lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Text&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;      get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; str; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;      set&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;      {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        str = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; != PropertyChanged)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;          PropertyChanged(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PropertyChangedEventArgs(&lt;span style="color:#006080;"&gt;&amp;quot;Text&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;      }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#cc6633;"&gt;#region&lt;/span&gt; INotifyPropertyChanged Members&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;event&lt;/span&gt; PropertyChangedEventHandler PropertyChanged;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#cc6633;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;  }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now I can do TwoWay binding of my TextBox.Text property to this class and also OneWay binding of TextBlock.Text property to the same instance. Here the XAML:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SilverlightApplication20:TextData&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TextDataDS&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;d:IsDataSource&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Orientation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Vertical&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;250&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Background&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Aqua&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;txtTitle&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;150&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;25&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{Binding Mode=TwoWay, Path=Text, Source={StaticResource TextDataDS}}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;txtStatus&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;150&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;25&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{Binding Mode=OneWay, Path=Text, Source={StaticResource TextDataDS}}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now the class instance will be updated once user will leave the TextBox (Lost Focus) and it will update the TextBlock:&lt;/p&gt;

&lt;p&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="81" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/image_69A82745.png" width="174" border="0" /&gt; &lt;/p&gt;

&lt;p&gt;Good, but client wanted to perform update every key press… Thus I created dependency property from TextData type:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; TextData textValue&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;      get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (TextData)GetValue(textValueProperty); }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;      set { SetValue(textValueProperty, &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;); }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; DependencyProperty textValueProperty =&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    DependencyProperty.Register(&lt;span style="color:#006080;"&gt;&amp;quot;textValue&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(TextData), &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Page), &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In control’s constructor set it to be a DataContext and subscribed to TextBox.KeyUp:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;textValue = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; TextData();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;textValue.Text = &lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;txtTitle.KeyUp += &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; KeyEventHandler(txtTitle_KeyUp);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.DataContext = textValue;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;All left to is is to update my data source at the time of event handlig:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;textValue.Text = txtTitle.Text;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The last, but not least I’ve changed a little my XAML, so now TextBox.Text property is databound like following:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;Text=&amp;quot;{Binding Mode=TwoWay, Path=Text}&amp;quot;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;and TextBlock.Text property bounded defind like follows:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;Text=&amp;quot;{Binding Mode=OneWay, Path=Text}&amp;quot;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Also, I removed TextDataDS (from previous example) because I don&amp;#39;t need it anymore. Here it goes:&lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:c4619222-abe5-4055-a5bb-11b916f07d59" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;div id="ea3576ef-8235-4b91-a47e-ebce7722b383" style="margin:0px;padding:0px;display:inline;"&gt;&lt;div&gt;&lt;a href="http://video.msn.com/video.aspx?vid=dac99d61-bca2-40d7-b909-5fb6954e49dc&amp;amp;from=writer" target="_new"&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/alex_golesh/video7cb3edf70a45_374453C6.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="clear:both;font-size:.8em;"&gt;&amp;quot;Property Binding&amp;quot; and Reflection in Silverlight - Demo&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The second tip today will be about changing Page Title dynamically and setting Browsers status text.&lt;/p&gt;

&lt;p&gt;Changing page title is really easy – all you have to do is to change “title” property of the document which holds the application:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;HtmlPage.Document.SetProperty(&lt;span style="color:#006080;"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Some Text&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Changing status text is very easy in IE, but will not in other browsers: it could work in Firefox for example but it is turned off by default. So my example is for IE folks:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; strAgent = HtmlPage.BrowserInformation.UserAgent;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (strAgent.IndexOf(&lt;span style="color:#006080;"&gt;&amp;quot;MSIE&amp;quot;&lt;/span&gt;) &amp;gt; -1)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    HtmlPage.Window.SetProperty(&lt;span style="color:#006080;"&gt;&amp;quot;status&amp;quot;&lt;/span&gt;, txtStatus.Text);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    //This browser does not support windows.status messages&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Here it goes:&lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:5eb264fa-9427-4303-aaa8-bbcb725977ed" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;div id="1ca02b21-d658-4b44-acae-1614243773a6" style="margin:0px;padding:0px;display:inline;"&gt;&lt;div&gt;&lt;a href="http://video.msn.com/video.aspx?vid=9fdd0e0b-d4e8-4436-a2b3-99448f6581f2&amp;amp;from=writer" target="_new"&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/alex_golesh/videodcbaa734e025_4E8F5837.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="clear:both;font-size:.8em;"&gt;Page Title and Status Bar Text with Silverlight - Demo&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Sources for all samples &lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/SilverlightApplication20.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;img title="Developer Academy 3 Twitter DevAcademy3" style="display:inline;margin-left:0px;margin-right:0px;" height="91" alt="Developer Academy 3 Twitter DevAcademy3" src="http://blogs.microsoft.co.il/blogs/bursteg/DevAcademy3_68B54369.jpg" width="204" align="right" border="0" /&gt;Don’t forget about DevAcademy3 (local event) which will take place at 15 Dec at Avenue, Airport City. &lt;/p&gt;

&lt;p&gt;My lecture is &lt;strong&gt;DEV303 - Integrating Silverlight 2 into Existing Web Sites (Level 300)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Registration is still open &lt;a href="http://www.microsoft.com/israel/msdn/devacademy3" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy, &lt;/p&gt;

&lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=180366" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+2/default.aspx">Silverlight 2</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DevAcademy3/default.aspx">DevAcademy3</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Data+Binding/default.aspx">Data Binding</category></item><item><title>Silverlight TreeView and String-To-PathGeometry Converter projects updated to RC0 syntax</title><link>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2008/10/09/silverlight-treeview-and-string-to-pathgeometry-converter-projects-updated-to-rc0-syntax.aspx</link><pubDate>Thu, 09 Oct 2008 11:09:55 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:151393</guid><dc:creator>Alex Golesh</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/rsscomments.aspx?PostID=151393</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/alex_golesh/commentapi.aspx?PostID=151393</wfw:comment><comments>http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2008/10/09/silverlight-treeview-and-string-to-pathgeometry-converter-projects-updated-to-rc0-syntax.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve updated Silverlight TreeView control and&amp;nbsp; with RC0 changes.&lt;/p&gt; &lt;p&gt;Both projects has couple community requested changes. &lt;/p&gt; &lt;p&gt;For example, TreeView supports DoubleClick and Single click on node and String-To_PathGeometry Converter supports multiple figures in Path string.&lt;/p&gt; &lt;p&gt;&lt;img alt="TreeView.jpg" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=SilverlightTreeView&amp;amp;DownloadId=45286" /&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="394" alt="image" src="http://blogs.microsoft.co.il/blogs/alex_golesh/WindowsLiveWriter/SilverlightTreeViewupdatedtoRC0syntax_B504/image_3.png" width="488" border="0" /&gt; &lt;/p&gt; &lt;p&gt;Latest sources/build could be downloaded from &lt;a href="http://www.codeplex.com/SilverlightTreeView" target="_blank"&gt;here&lt;/a&gt; (TreeView) and &lt;a href="http://www.codeplex.com/StringToPathGeometry" target="_blank"&gt;here&lt;/a&gt; (String-To-PathGeometry Converter).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy,&lt;/p&gt; &lt;p&gt;Alex&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=151393" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Source+Code/default.aspx">Source Code</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/Silverlight+2/default.aspx">Silverlight 2</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/RC0/default.aspx">RC0</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/TreeView/default.aspx">TreeView</category><category domain="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/tags/String-To-PathGeometry+Converter/default.aspx">String-To-PathGeometry Converter</category></item></channel></rss>