<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>The MossyBlog Times Archives 2007 - 2009 : Animation</title><link>http://blogs.msdn.com/msmossyblog/archive/tags/Animation/default.aspx</link><description>Tags: Animation</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Silverlight: VisualState Manager, Storyboards and why designers should care about them both.</title><link>http://blogs.msdn.com/msmossyblog/archive/2008/06/30/understanding-how-visualstate-manager-s-durations-work-in-silverlight-expression-blend.aspx</link><pubDate>Mon, 30 Jun 2008 09:50:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8665257</guid><dc:creator>scbarnes</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/8665257.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=8665257</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=8665257</wfw:comment><description>&lt;p&gt;I've seen a lot of talk around VisualState Manager online and it mostly covers button states and so on. What I want to do here in this post is illustrate why VisualState Manager is a handy tool for the average interactive designer out there and how it can kind of short-cut a lot of animation transition logic automatically for you.&lt;/p&gt;  &lt;h1&gt;You can make your own States.&lt;/h1&gt;  &lt;p&gt;In &lt;a href="http://www.silverlight.net/" target="_blank" mce_href="http://www.silverlight.net/"&gt;Silverlight&lt;/a&gt; via &lt;a href="http://www.microsoft.com/expression" target="_blank" mce_href="http://www.microsoft.com/expression"&gt;Expression Blend&lt;/a&gt; you will have the ability to make your own &lt;em&gt;VisualStates&lt;/em&gt;. In my case I have a Menu that when a button is clicked it fly's down. Once clicked again, it fly's back up.&lt;/p&gt;  &lt;p&gt;First things first, I setup a basic wire-frame UI (always prototype people!) in which I have an outer-chrome and underneath it, I have a &lt;font color="#008040"&gt;&lt;strong&gt;Green&lt;/strong&gt;&lt;/font&gt; rectangle which represents the &amp;quot;menu&amp;quot;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Closed:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="111" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb.png" width="450" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;strong&gt;Opened:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="97" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb_2.png" width="450" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb_2.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That's the intent anyway. &lt;/p&gt;  &lt;p&gt;Inside Expression Blend, on the Far left you should see this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="181" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb_3.png" width="260" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb_3.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is the area where you can add your own VisualStates. In this case, if you click on the &lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_13.png" width="35" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_13.png" /&gt; icon, you will get &amp;quot;&lt;font color="#0000ff"&gt;Add State Group&lt;/font&gt;&amp;quot;, which should automatically add a &lt;strong&gt;StateGroup&lt;/strong&gt; for you.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;New StateGroup added.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_18.png" width="247" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_18.png" /&gt; &lt;/p&gt;  &lt;p&gt;Now, notice the 0s next to the &lt;strong&gt;&lt;em&gt;StateGroup&lt;/em&gt;&lt;/strong&gt; Label (You can change the Label if you want by the way to suite a more appealing name). The 0s input is essentially the total duration of time it will take to go between each state housed within this group. It's currently at 0s which means that there will be no animated transition between states. To enable an animation between states, bump this up to more than 0, (0.5seconds will be great starting point, as anything lower and it's hard to visually gauge the transition).&lt;/p&gt;  &lt;p&gt;At this point, go ahead and Add two States via the &lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="22" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_21.png" width="26" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_21.png" /&gt; menu (+ meaning add, - meaning remove).&lt;/p&gt;  &lt;p&gt;You should end up with the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_25.png" mce_href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_25.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="156" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb_10.png" width="260" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb_10.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h1&gt;Setting up the States.&lt;/h1&gt;  &lt;p&gt;At this point, go ahead and rename the State and State1 to &lt;strong&gt;PullDown&lt;/strong&gt; and &lt;strong&gt;PullUp&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="127" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_28.png" width="260" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_28.png" /&gt; &lt;/p&gt;  &lt;p&gt;Click on &lt;strong&gt;PullDown's&lt;/strong&gt; state. &lt;/p&gt;  &lt;p&gt;If you are familiar with the way StoryBoards work inside Expression Blend, then you will notice that the timelines per state can exist (by default they aren't added until you add them via clicking on the &lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="22" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightVisualStateManagerStoryboard_FAC5/image_3.png" width="32" border="0" /&gt;&amp;#160; icon). This is called &amp;quot;in-state animation&amp;quot;.&lt;/p&gt;  &lt;p&gt;This is quite a powerful, as basically we've provided you the ability to add your own amount of animation per state. In this case, I've made my Green Rectangle fly down from 0y to 130y within the PullDown in-state animation.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_30.png" mce_href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_30.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="389" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb_12.png" width="450" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb_12.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_34.png" mce_href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_34.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="407" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb_14.png" width="450" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_thumb_14.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I've made the duration for the animation around 2seconds which in this case means that although my animation for that state is expected to run for 2 seconds it won't (well not quite like that)&lt;/p&gt;  &lt;p&gt;Why won't it?&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="72" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_37.png" width="450" border="0" mce_src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/UnderstandinghowVisualStateManagersDura_F46C/image_37.png" /&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;0.5s&lt;/strong&gt; here will add to the overall actual animation. As the way VisualStateManager works is that it will take 0.5s to go from PullUp state to PullDown state. Once the transition has completed, it will then play the 2second animation.&lt;/p&gt;  &lt;p&gt;In total, your entire transition will take 2.5 seconds. Important thing to note here, is that should you want it to take 2seconds you just make the actual StateGroup (NxsRibbonMenuState) 0s.&lt;/p&gt;  &lt;p&gt;The reason I would opt for a 0s Duration is that this allows you to attach your own easing (in/out) sequence per state, whilst allowing you to have a multi-step animation (meaning the animation can play different effects per tick on the Timeline). &lt;/p&gt;  &lt;p&gt;This could also be done simply using a basic Storyboarding approach, but you don't get the flexibility of accessing the VisualStateManager via code-behind and you also have to write your own reverse routines should the user wish to interrupt the sequence of animation.&lt;/p&gt;  &lt;h1&gt;Why use States for Animations then?&lt;/h1&gt;  &lt;p&gt;In my case I wanted to enable a Menu to come down and up when the user clicks on a button. I also want it to also allow the user to change their minds and reverse the animation should they click the button half way.&lt;/p&gt;  &lt;p&gt;VisualState Manager's can provide a great way to achieve this, as in my Button's Click handler, I simply tell it which state to go to and the rest automatically takes care of itself.&lt;/p&gt;  &lt;p&gt;What does that mean though? say you've clicked on PullDown and the animation of PullDown state is half-way through (meaning 1sec into the animation). If you then trigger the state change to PullUp, VisualStateManager will automatically figure out how to transition all properties adjusted whilst in PullDown State back to PullUp state, automatically.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Note: When I say automatically (it's half true) what really happens is that Blend will create some storyboards within the VisualState tags. This is done at design-time but at run-time it essentially is automated in terms of figuring out how to go from AS-IS to a TO-BE.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Pretty powerful yes?&lt;/p&gt;  &lt;p&gt;Here's some code to illustrate how you switch between states.&lt;/p&gt;  &lt;div class="csharpcode" style="overflow: auto; width: 430px"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NxsRibbon : UserControl &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{ &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; NxsRibbon() &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    { &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        InitializeComponent(); &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        CURRENT_STATE = &lt;span class="str"&gt;&amp;quot;PullDown&amp;quot;&lt;/span&gt;; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        VisualStateManager.GoToState(&lt;span class="kwrd"&gt;this&lt;/span&gt;, CURRENT_STATE, &lt;span class="kwrd"&gt;true&lt;/span&gt;); &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;this&lt;/span&gt;.btnTest.Click += &lt;span class="kwrd"&gt;new&lt;/span&gt; RoutedEventHandler(onButtonTestClick); &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    } &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CURRENT_STATE; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;void&lt;/span&gt; onButtonTestClick(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e) { &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;switch&lt;/span&gt; (CURRENT_STATE) &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        { &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;PullDown&amp;quot;&lt;/span&gt;: &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                CURRENT_STATE = &lt;span class="str"&gt;&amp;quot;PullUp&amp;quot;&lt;/span&gt;; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                &lt;span class="kwrd"&gt;break&lt;/span&gt;; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            &lt;span class="kwrd"&gt;default&lt;/span&gt;: &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                CURRENT_STATE = &lt;span class="str"&gt;&amp;quot;PullDown&amp;quot;&lt;/span&gt;; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                &lt;span class="kwrd"&gt;break&lt;/span&gt;; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        } &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        VisualStateManager.GoToState(&lt;span class="kwrd"&gt;this&lt;/span&gt;, CURRENT_STATE, &lt;span class="kwrd"&gt;true&lt;/span&gt;); &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    } &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.visualstatemanager(VS.95).aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/system.windows.visualstatemanager(VS.95).aspx"&gt;VisualState Manager&lt;/a&gt; is quite a powerful feature within Silverlight and Expression Blend. You just have to treat it with care, and keep your eye on the durations as the StateGroup will always win the fight.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8665257" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Expression+Blend/default.aspx">Expression Blend</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/RIA+Handbook/default.aspx">RIA Handbook</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Design/default.aspx">Design</category></item><item><title>Silverlight Experiment: Create a PullDown Menu using Storyboards.</title><link>http://blogs.msdn.com/msmossyblog/archive/2008/06/29/silverlight-experiment-create-a-pulldown-menu-using-storyboards.aspx</link><pubDate>Sun, 29 Jun 2008 07:09:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8666034</guid><dc:creator>scbarnes</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/8666034.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=8666034</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=8666034</wfw:comment><description>&lt;p&gt;This is a basic example of how to create a &amp;quot;PullDown Menu&amp;quot; using Silverlight and Expression Blend.&lt;/p&gt;  &lt;h1&gt;The Objectives&lt;/h1&gt;  &lt;ul&gt;   &lt;li&gt;The GUI will have a PullDown Menu (UserControl) under the main outer chrome. It's intended that when a user clicks on the &amp;quot;MainMenu&amp;quot; it will not only change state, but animate down or up (depending on the previous state it was resting in - default being Up). &lt;/li&gt;    &lt;li&gt;The End User will need to have the ability to interrupt the animation should they decide to cancel the action, as a result the menu will react to the End User's intended action and reflect the direction change as well as state change. &lt;/li&gt; &lt;/ul&gt;  &lt;h1&gt;The Expected Outcome.&lt;/h1&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="326" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_thumb.png" width="434" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="326" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_thumb_1.png" width="434" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h1&gt;The Blueprints.&lt;/h1&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="312" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_thumb_3.png" width="444" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;1x &lt;strong&gt;OuterChrome&lt;/strong&gt; Control       &lt;ul&gt;       &lt;li&gt;1x TopLeft Corner Bitmap (Static) &lt;/li&gt;        &lt;li&gt;1x Top Bitmap (Stretch Horizontally) &lt;/li&gt;        &lt;li&gt;1x Left Bitmap (Stretch Vertically) &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;1x &lt;strong&gt;PullDownMenu&lt;/strong&gt; Container       &lt;ul&gt;       &lt;li&gt;1x InnerMenu Control (NxsRibbon) &lt;/li&gt;        &lt;li&gt;1x LowerBar Bitmap (Static) &lt;/li&gt;        &lt;li&gt;1x PullDown Tab Bitmap (Static) &lt;/li&gt;        &lt;li&gt;1x PullUp Tab Bitmap (static) &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h1&gt;The Process&lt;/h1&gt;  &lt;ol type="1"&gt;   &lt;li&gt;Create the the WireFrames.      &lt;ol type="A"&gt;       &lt;li&gt;Create a &lt;font color="#008080"&gt;UserControl&lt;/font&gt; in Blend, call it &lt;strong&gt;NxsApplication.xam&lt;/strong&gt;l (this will be your base)           &lt;ol type="i"&gt;           &lt;li&gt;Change its Metrics to be 1000px, 760px. &lt;/li&gt;            &lt;li&gt;Change the &lt;font color="#0000ff"&gt;NxsApplication.LayoutRoot&lt;/font&gt; from Grid to Canvas (as you want things to freely float).               &lt;br /&gt;              &lt;br /&gt;&lt;strong&gt;NxsApplication.xaml&lt;/strong&gt;               &lt;br /&gt;              &lt;br /&gt;              &lt;div class="csharpcode" style="overflow: auto; width: 100%"&gt;               &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;RCIA.Containers.NxsApplication&amp;quot;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; &lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; &lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1000&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;760&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Canvas&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Canvas.Background&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;LinearGradientBrush&lt;/span&gt; &lt;span class="attr"&gt;EndPoint&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0.5,0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;StartPoint&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0.5,1&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;GradientStop&lt;/span&gt; &lt;span class="attr"&gt;Color&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;#FF000000&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;GradientStop&lt;/span&gt; &lt;span class="attr"&gt;Color&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;#FF131313&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Offset&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;LinearGradientBrush&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Canvas.Background&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Canvas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
            &lt;/div&gt;
            &lt;style type="text/css"&gt;










.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;

      &lt;li&gt;Create a &lt;font color="#008080"&gt;UserControl&lt;/font&gt; in Blend, call it &lt;strong&gt;NxsShell.xaml&lt;/strong&gt; (this will be your Chrome) 

        &lt;ol type="i"&gt;
          &lt;li&gt;Keep &lt;font color="#0000ff"&gt;NxsShell.LayoutRoot&lt;/font&gt; type as Grid. &lt;/li&gt;

          &lt;li&gt;Inside &lt;font color="#0000ff"&gt;NxShell&lt;/font&gt;, define the Grid Definition as having the below (you basically want to use the Grid to help you scale-9 the overall assets). 

            &lt;br /&gt;

            &lt;br /&gt;&lt;strong&gt;NxsShell.xaml&lt;/strong&gt; 

            &lt;br /&gt;

            &lt;div class="csharpcode" style="overflow: auto; width: 100%"&gt;
              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;RCIA.Controls.NxsShell&amp;quot;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; &lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; &lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xmlns:d&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xmlns:mc&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;mc:Ignorable&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;d&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xmlns:vsm&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;clr-namespace:System.Windows;assembly=System.Windows&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;30&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;30&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;30&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rectangle&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0,0,0,0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Fill&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;#FFFE0000&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rectangle&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0,0,0,0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Fill&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;#FF213986&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;ColumnSpan&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rectangle&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0,0,0,0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Fill&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;#FFA42020&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rectangle&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0,0,0,0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;2&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Fill&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;#FF0943FF&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

              &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
            &lt;/div&gt;
          &lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;

      &lt;li&gt;Create a &lt;font color="#008080"&gt;UserControl&lt;/font&gt; in Blend, call it&lt;strong&gt; NxsRibbon.xaml&lt;/strong&gt; (this will be the container you place your ribbon into). 

        &lt;br /&gt;

        &lt;br /&gt;&lt;strong&gt;NxsRibbon.xaml&lt;/strong&gt; 

        &lt;br /&gt;

        &lt;br /&gt;

        &lt;div class="csharpcode" style="overflow: auto; width: 100%; height: 326px"&gt;
          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;RCIA.Controls.NxsRibbon&amp;quot;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; &lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; &lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1000&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;180&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xmlns:vsm&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;clr-namespace:System.Windows;assembly=System.Windows&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UserControl.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Storyboard&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PullDown&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt; &lt;span class="attr"&gt;BeginTime&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;00:00:00&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Storyboard&lt;/span&gt;.&lt;span class="attr"&gt;TargetName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;rectangle&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Storyboard&lt;/span&gt;.&lt;span class="attr"&gt;TargetProperty&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SplineDoubleKeyFrame&lt;/span&gt; &lt;span class="attr"&gt;KeyTime&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;00:00:01&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;130&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SplineDoubleKeyFrame.KeySpline&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;KeySpline&lt;/span&gt; &lt;span class="attr"&gt;ControlPoint1&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0,0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ControlPoint2&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0,1&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SplineDoubleKeyFrame.KeySpline&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SplineDoubleKeyFrame&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Storyboard&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Storyboard&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PullUp&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt; &lt;span class="attr"&gt;BeginTime&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;00:00:00&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Storyboard&lt;/span&gt;.&lt;span class="attr"&gt;TargetName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;rectangle&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Storyboard&lt;/span&gt;.&lt;span class="attr"&gt;TargetProperty&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SplineDoubleKeyFrame&lt;/span&gt; &lt;span class="attr"&gt;KeyTime&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;00:00:01&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SplineDoubleKeyFrame.KeySpline&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;KeySpline&lt;/span&gt; &lt;span class="attr"&gt;ControlPoint1&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0,1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ControlPoint2&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1,1&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SplineDoubleKeyFrame.KeySpline&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SplineDoubleKeyFrame&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Storyboard&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;UserControl.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Canvas&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Background&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;#FF0D0D0D&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rectangle&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;160&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;962&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Canvas&lt;/span&gt;.&lt;span class="attr"&gt;Left&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;30&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Canvas&lt;/span&gt;.&lt;span class="attr"&gt;Top&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;-115&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Fill&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;#FF35E50C&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Stroke&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;#FF000000&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;rectangle&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rectangle.RenderTransform&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TransformGroup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ScaleTransform&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SkewTransform&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RotateTransform&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TranslateTransform&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TransformGroup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rectangle.RenderTransform&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rectangle&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;23&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;81&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Canvas&lt;/span&gt;.&lt;span class="attr"&gt;Left&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;911&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Canvas&lt;/span&gt;.&lt;span class="attr"&gt;Top&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;149&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Open...&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;btnTest&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Canvas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;
        &lt;/div&gt;
      &lt;/li&gt;
    &lt;/ol&gt;
    &lt;style type="text/css"&gt;












.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

    &lt;ol&gt;
      &lt;li&gt;Inside &lt;font color="#0000ff"&gt;NxsRibbon.LayoutRoot&lt;/font&gt;, create a rectangle and a button. &lt;/li&gt;

      &lt;li&gt;Name the button &amp;quot;&lt;font color="#0000ff"&gt;btnTest&lt;/font&gt;&amp;quot;. &lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;&amp;#160;&lt;/p&gt;
  &lt;/li&gt;

  &lt;li&gt;In &lt;font color="#0000ff"&gt;NxsAplication&lt;/font&gt; instantiate the GUI assets. 

    &lt;ol&gt;
      &lt;li&gt;In &lt;strong&gt;NxsApplication.xaml.cs&lt;/strong&gt; instantiate &lt;font color="#0000ff"&gt;NxsRibbonMenu&lt;/font&gt; &lt;font color="#008080"&gt;UserControl&lt;/font&gt;. As this will ensure it has the lowest z index. &lt;/li&gt;

      &lt;li&gt;In &lt;strong&gt;NxsApplication.xaml.cs&lt;/strong&gt; instantiate &lt;strong&gt;NxsShell&lt;/strong&gt; &lt;font color="#008080"&gt;UserControl&lt;/font&gt;. As this will ensure it has the highest z index. 

        &lt;br /&gt;

        &lt;br /&gt;&lt;strong&gt;NxsApplication.xaml.cs&lt;/strong&gt; 

        &lt;br /&gt;

        &lt;br /&gt;

        &lt;div class="csharpcode" style="overflow: auto; width: 100%; height: 303px"&gt;
          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NxsApplication : UserControl&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    {&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; NxsShell NXS_SHELL;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; NxsRibbon NXS_RIBBON;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; NxsApplication()&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        {&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            InitializeComponent();&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="rem"&gt;// Add the Nexus Ribbon&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            NXS_RIBBON = &lt;span class="kwrd"&gt;new&lt;/span&gt; NxsRibbon();&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.LayoutRoot.Children.Add(NXS_RIBBON);&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            &lt;span class="rem"&gt;// Add in the Nexus Chrome.&lt;/span&gt;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            NXS_SHELL = &lt;span class="kwrd"&gt;new&lt;/span&gt; NxsShell();&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            NXS_SHELL.Width = Width;&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            NXS_SHELL.Height = Height;&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.LayoutRoot.Children.Add(NXS_SHELL);&lt;/pre&gt;

          &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        }&lt;/pre&gt;

          &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    }&lt;/pre&gt;
        &lt;/div&gt;
      &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;

  &lt;li&gt;In &lt;strong&gt;NxsRibbon.xaml.cs&lt;/strong&gt; register the &lt;font color="#0000ff"&gt;btnTest&lt;/font&gt; to initiate the &lt;font color="#0000ff"&gt;PullDown&lt;/font&gt; and &lt;font color="#0000ff"&gt;PullUp&lt;/font&gt; Animations. &lt;/li&gt;

  &lt;li&gt;In &lt;strong&gt;NxsRibbon.xaml.cs&lt;/strong&gt; register the Animation state to ensure that if the user wishes to interrupt either the &lt;font color="#0000ff"&gt;PullDown&lt;/font&gt;/&lt;font color="#0000ff"&gt;PullUp&lt;/font&gt; animations that they react in a way that halts the current storyboard, switches to the opposite storyboard and then continues to play. 

    &lt;br /&gt;

    &lt;br /&gt;&lt;strong&gt;NxsRibbon.xaml.cs 
      &lt;br /&gt;&lt;/strong&gt;

    &lt;br /&gt;

    &lt;div class="csharpcode" style="overflow: auto; width: 100%; height: 303px"&gt;
      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NxsRibbon : UserControl&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    {&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        Boolean CURRENT_PULLDOWN_STATE;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        Boolean IN_MOTION;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; NxsRibbon()&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        {&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            InitializeComponent();&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.btnTest.Click += &lt;span class="kwrd"&gt;new&lt;/span&gt; RoutedEventHandler(onButtonTestClick);&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.PullDown.Completed += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(PullDown_Completed);&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.PullUp.Completed += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(PullUp_Completed);&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            CURRENT_PULLDOWN_STATE = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            IN_MOTION = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        }&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; PullUp_Completed(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        {&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            CURRENT_PULLDOWN_STATE = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            IN_MOTION = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        }&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; PullDown_Completed(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        {&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            CURRENT_PULLDOWN_STATE = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;            IN_MOTION = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        }&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; onButtonTestClick(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e) {&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (IN_MOTION)&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            {&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (!CURRENT_PULLDOWN_STATE)&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                {&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                    IN_MOTION = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                    CURRENT_PULLDOWN_STATE = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                    PullDown.Pause();&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                    PullUp.SeekAlignedToLastTick(PullDown.GetCurrentTime());&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                    PullUp.Begin();&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                }&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;                {&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;                    IN_MOTION = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;                    CURRENT_PULLDOWN_STATE = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                    PullUp.Pause();&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;                    PullDown.SeekAlignedToLastTick(PullUp.GetCurrentTime());&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;                    PullDown.Begin();&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;                }&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;            }&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!CURRENT_PULLDOWN_STATE)&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;            {&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;                IN_MOTION = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;                PullDown.Begin();&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;            }&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;            {&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;                IN_MOTION = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;                PullUp.Begin();&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;            }&lt;/pre&gt;

      &lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;        }&lt;/pre&gt;

      &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;    }&lt;/pre&gt;
    &lt;/div&gt;
    &lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;The Conclusion&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt; I found that it was faster to create the initial &lt;strong&gt;StoryBoard&lt;/strong&gt; for &lt;font color="#0000ff"&gt;PullDown&lt;/font&gt;. Once I was happy with the way it animated in/out, I then Duplicated the &lt;strong&gt;StoryBoard&lt;/strong&gt; (via this &lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="23" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_11.png" width="32" border="0" /&gt; ). I renamed the &lt;font color="#0000ff"&gt;PullDown&lt;/font&gt;_Copy to &lt;font color="#0000ff"&gt;PullUp&lt;/font&gt; and under the same icon (&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="23" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_11.png" width="32" border="0" /&gt;) I &amp;quot;Reversed&amp;quot; it. This basically figured out how to revert the various properties that are being changed to the appropriate state.&lt;/li&gt;

  &lt;li&gt;Keeping track of the &lt;font color="#008080"&gt;IN_MOTION&lt;/font&gt; and &lt;font color="#408080"&gt;CURRENT_PULLDOWN_STATE&lt;/font&gt; was relatively easy, and although I have a few ideas on how we can improve this concept going forward, it's pretty trivial to setup.&lt;/li&gt;

  &lt;li&gt;Adjusting the animation Easing via the &lt;strong&gt;KeySpline&lt;/strong&gt; editor can attract various results on both Up/Down. It pays to think more about how this will affect the End User firstly, but also the fundamental question you will need to answer going forward &amp;quot;Is this going to annoy them?&amp;quot; if the answer is yes, look to shorten the animation duration or adjust the Easing.

    &lt;br /&gt;

    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_13.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_thumb_5.png" width="205" border="0" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;The Outcome.&lt;/h1&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_17.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="328" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_thumb_7.png" width="450" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;This took me less then 30mins to complete. You will also note that I used only basic elements found within XAML to setup the wire frames. I did this as this illustrates that an Interactive Persona can setup the various pieces required to ensure the animation and basic events are ready for the next step in the workflow.&amp;#160; &lt;br /&gt;

  &lt;br /&gt;This means that you could have someone sitting designing the textures and detailed composition of the artwork in their nominated Art Tool. At the same time you could have an Engineer writing the actual &lt;strong&gt;NxsRibbonMenu&lt;/strong&gt; so that it mimics the &lt;a href="http://en.wikipedia.org/wiki/Office_Fluent_Ribbon#Ribbon" target="_blank"&gt;Office Ribbon concept&lt;/a&gt;.&amp;#160; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_15.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="226" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/SilverlightCreateaPullDownMenuusingAnim_10C0F/image_thumb_6.png" width="450" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;
  &lt;br /&gt;Once all three have completed their individual contribution to the GUI, they are then able to meet for a &amp;quot;Happy meeting&amp;quot; where they basically look at how they are going integrate the pieces into the GUI.

  &lt;br /&gt;

  &lt;br /&gt;In this case, the Interactive Persona is able to swap out the rectangle placeholders and apply specific bitmap textures or whatever it is that is required to execute on the visual finish.

  &lt;br /&gt;

  &lt;br /&gt;Once that's completed, the same persona is also then able to swap out the dummy &lt;strong&gt;NxsRibbonMenu&lt;/strong&gt; place holder and implant the real Control, with it's own black boxed composition.&lt;/p&gt;

&lt;p&gt;This could highlight that using Expression Blend, Visual Studio and Silverlight that three individual personas are quite able to build, design and animate independent of one another. It does however also indicate that there needs to be a Interactive Architect in the room to ensure all the various placeholders and external pieces fit into their respective places within the overall Application composition.&lt;/p&gt;

&lt;h1&gt;Special Notes&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Nexus is a home grown Silverlight framework being written by a few friends / co-workers of mine (we decided to collaborate on an idea to test some best practices out). This framework isn't likely to be publicly available but should it do so, I'll let you folks know at that appropriate point in time.&lt;/li&gt;

  &lt;li&gt;All visual assets are copyright to me. Basically if I see you stealing my art, I'll hunt you down as don't be that guy/gal whom does that. Ask though should you wish to use it, as I'm pretty open.&lt;/li&gt;

  &lt;li&gt;This was fun and that's what this whole RIA conversation is about, having fun.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8666034" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Expression+Blend/default.aspx">Expression Blend</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/XAML/default.aspx">XAML</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Art/default.aspx">Art</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/RIA+Handbook/default.aspx">RIA Handbook</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Design/default.aspx">Design</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Frameworks/default.aspx">Frameworks</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Nexus/default.aspx">Nexus</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>POC #1 - Project Harmony (pt1) (Silverlight &amp; Flash)</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/11/15/poc-1-project-harmony-pt1-silverlight-flash.aspx</link><pubDate>Thu, 15 Nov 2007 11:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6248634</guid><dc:creator>scbarnes</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/6248634.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=6248634</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=6248634</wfw:comment><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="76" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb.png" width="429" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I've been enjoying the overall experience of what Silverlight has to offer since I started with Microsoft back in January 07. That being said, I've often been an internal &amp;quot;goto&amp;quot; person at times for some Flash advice on behalf of Microsoft customers around the world.&lt;/p&gt;  &lt;p&gt;In light of this, recently I also encountered a situation where a customer was looking to use both Silverlight and Flash together, something which I kind of gave a confused look at? (ie .. not because I wanted them to pick ours etc, but more to the point what was the root of the problem).&lt;/p&gt;  &lt;p&gt;The problem was simply that they had deadline to meet, they wanted to retain the video in Windows Media format but were looking to use the GUI inside Flash as a base. Fair enough, this isn't a &lt;a href="http://en.wikipedia.org/wiki/Zero-sum" target="_blank"&gt;Zero Sum Game&lt;/a&gt; and we play well with others.&lt;/p&gt;  &lt;p&gt;This isn't the first I've seen similar stories around this, but mostly its from Design shops around the world whom are keen to embrace Silverlight and Flash (fingers in both barrels) but are kind of skittish to start with (i.e. the assumption is really you have to pick a team, red vs blue).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="334" alt="Screenshot of Project Harmony" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_1.png" width="434" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Thus, I decided to put together this proof of concept, titled &amp;quot;&lt;strong&gt;&lt;font color="#ff0000"&gt;Harmony&lt;/font&gt;&lt;/strong&gt;&amp;quot;. The project is quite extensive and I'll spend the next month dissecting it and talking about different cross-sections of how you as a designer &amp;amp; developer are able to produce compelling enriching experiences with Silverlight and that you can execute on your creative vision. The rest is simply semantics and bits/bolts.&lt;/p&gt;  &lt;p&gt;In this first iteration of my &lt;strong&gt;Project &amp;quot;Harmony&amp;quot;&lt;/strong&gt; I wanted to test to see how well the performance would be in the event one was to use 90% Silverlight and 10% flash. In that overlay Flash on top of Silverlight and see what happens.&lt;/p&gt;  &lt;p&gt;The results speak for themselves, suffice to say that I really put in a lot of gratuitous animations in Silverlight to really try and break the performance overall.&lt;/p&gt;  &lt;p&gt;You can view for yourself here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.demo.members.winisp.net/poc1/" href="http://www.demo.members.winisp.net/poc1/"&gt;http://www.demo.members.winisp.net/poc1/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;(Note: Link Requires &lt;a href="http://www.silverlight.net/getstarted" target="_blank"&gt;Silverlight 1.1&lt;/a&gt; and Flash 9.x)&lt;/p&gt;  &lt;h3&gt;My Objectives for this first iteration was:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;       &lt;h4&gt;Objectives (v1.0)&lt;/h4&gt;     &lt;/strong&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Determine to see if Flash&amp;#xA0; (Transparent windowless) degrades in performance in the event it sits on top of Silverlight.&lt;/li&gt;      &lt;li&gt;Determine if PNG overlays impact the performance of the video whilst mixed with Flash.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;strong&gt;       &lt;h4&gt;Conclusion (v1.0)&lt;/h4&gt;     &lt;/strong&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;I did see some performance degrading on both technologies, but that is mostly due to both making use of alpha transparency (I'm yet to meet a runtime of any brand that can withstand alpha transparency)&lt;/li&gt;      &lt;li&gt;Working inside Flash &amp;amp; then crossing over to Visual Studio / Expression Blend is not for the feint hearted (I kept tripping up in C# vs AS3.0 scripting syntax hooks hehe - nothing against both technologies but its more of a mind map thing).&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;strong&gt;       &lt;h4&gt;Highlights (v1.0)&lt;/h4&gt;     &lt;/strong&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Using PNG's a designer is capable of doing some interesting things to a graphical interface. In this case&amp;#xA0; used a bullet that appears to not only be embedded into the TV Screen but also shatters it.       &lt;br /&gt;        &lt;br /&gt;I also added the &amp;quot;bullets&amp;quot; in the top right corner as PNG overlay to also test how 2xOverlays inside the Video would perform.        &lt;br /&gt;        &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_16.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="80" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_7.png" width="433" border="0" /&gt;&lt;/a&gt;        &lt;br /&gt;&amp;#xA0;&lt;/li&gt;      &lt;li&gt;Using Video Reflection within Silverlight, one is able to really bring home a gloss finish by giving it a &amp;quot;glass&amp;quot; effect (as we all know there isn't enough glass effects online       &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_18.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="201" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_8.png" width="244" border="0" /&gt;&lt;/a&gt;         &lt;br /&gt;&amp;#xA0;&lt;/li&gt;      &lt;li&gt;Using an infinite loop within Silverlight, I was able to create a &amp;quot;ambiance&amp;quot; feel to the UI by making two sets of images fade in/out underneath the Flash area and the Silverlight&amp;#xA0; Video. This again, was to really see how the performance would go with a Silverlight animation underneath Flash.       &lt;br /&gt;        &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_10.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="103" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_4.png" width="433" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="115" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_3.png" width="167" align="right" border="0" /&gt;&lt;/a&gt;Using Adobe Photoshop for the bitmap artwork, I stumbled upon a technique whereby if you take a photo, duplicate its layer and then apply &amp;quot;gussian blur&amp;quot; with 50% transparency it kind of gives this glow/ambiance effect commonly seen in most games today. &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;Silverlight (Video aside of course) handles its progressive loading of assets in a unique way, I'm yet to put my finger on it but I must look into this more as I expected the GUI to take much longer to load (as there aren't any preloaders in this design).       &lt;br /&gt;        &lt;br /&gt;&amp;#xA0;&lt;/li&gt;      &lt;li&gt;The Flash Slider (ie works like iTunes) was done reasonably quickly, and the code has already been ported to Silverlight suffice to say, it looks seamlessly integrated within the GUI and unless you don't have Silverlight or Flash installed, it would argueably be forgiven as being part of one technology not 2.       &lt;br /&gt;        &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_6.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="80" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_2.png" width="433" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;It's a small experiment at first, mainly to test the waters and see what holds together initially. &lt;/p&gt;  &lt;p&gt;The walk away message here is simple, this isn't a &lt;a href="http://en.wikipedia.org/wiki/Zero-sum" target="_blank"&gt;Zero Sum Game&lt;/a&gt; firstly and I want to stress that the most. The other impact is that if you're keen to try Silverlight but aren't quite ready for that big leap, it's ok you can use both without penalties implied. &lt;/p&gt;  &lt;p&gt;The last but most important of all, is prove your concepts initially. In that if you're looking to switch from using Flash (for whatever reason) and aren't bold enough to do the lock stock and barrel or aren't allowed to, that's ok. Establish some objectives initially, build a Proof of Concept (POC) and chip away at the idea, as you will no doubt learn both technologies limitations faster than any book can really teach you.&lt;/p&gt;  &lt;p&gt;The secret of a truly successful RIA in my opinion is knowing the technologies limitations.&lt;/p&gt;  &lt;p&gt;The next POC (pt2) I'll talk more about the JavaScript Bridge and how I was able to make the Thumbnail Slide load up the Video Playlist etc. I'm also putting together some Video Casts on not only how I made this but also will upload the code once I get it locked into &lt;a href="http://www.codeplex.com" target="_blank"&gt;Codeplex.com&lt;/a&gt; (open source). All code &amp;amp; design is hand-made by myself only.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;(&lt;strong&gt;NOTE&lt;/strong&gt;: This is a crude, raw POC and progress bars etc for both technologies aren't important for this initial purpose. They are coming, and I'll talk more about that later. Again, this is a POC so don't lock this down as some end to end final production grade solution).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;(&lt;strong&gt;NOTE&lt;/strong&gt;: I used &lt;a href="http://www.whatistheorangebox.com/" target="_blank"&gt;Teamfortress 2&lt;/a&gt; Artwork, because it's my favorite game at the moment, I have personal history with it and well, the Soldier video is by far the funniest game trailer I've seen in quite some time. Valve Software are legends in my book - My Steam ID is &amp;quot;[te] Skittlez&amp;quot;)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Next: &lt;strong&gt;&lt;em&gt;The &amp;quot;HOW&amp;quot; (Code Dump / VideoCast).&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Related Post: &lt;a title="Writing Proof of Concept RIA&amp;#x27;s" href="http://blogs.msdn.com/msmossyblog/archive/2007/11/11/writing-proof-of-concepts-ria-s.aspx"&gt;Writing Proof of Concept RIA's&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6248634" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Flash/default.aspx">Flash</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Adobe/default.aspx">Adobe</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Mashup/default.aspx">Mashup</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Going+Flex+to+Silverlight/default.aspx">Going Flex to Silverlight</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/UXE/default.aspx">UXE</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/RIA+Producer/default.aspx">RIA Producer</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Art/default.aspx">Art</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Skinning/default.aspx">Skinning</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/RIA+Handbook/default.aspx">RIA Handbook</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Rich+Internet+Application/default.aspx">Rich Internet Application</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Rich+Interactive+Application/default.aspx">Rich Interactive Application</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/POC/default.aspx">POC</category></item><item><title>Silverlight: Keep it simple stupid.</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/10/23/silverlight-keep-it-simple-stupid.aspx</link><pubDate>Mon, 22 Oct 2007 16:00:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5598609</guid><dc:creator>scbarnes</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/5598609.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=5598609</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=5598609</wfw:comment><description>&lt;p&gt;A while back I &lt;a href="http://blogs.msdn.com/msmossyblog/archive/2007/10/03/how-to-using-ajaxcontroltoolkit-to-animate-silverlight.aspx" target="_blank"&gt;posted about how I used our AJAX Control Toolkit to animate with Silverlight&lt;/a&gt;. I stated that the end reason for this approach was simply due to lack of animation capabilities within Silverlight 1.0.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/Synergist/" target="_blank"&gt;Michael Scherotter&lt;/a&gt; being the brilliant Silverlight coder, decided to prove that theory wrong (heh - not so much, probably more to acid test my b.s factor). He came back with an approach that was simple and yet humiliating (for me) at the same time (I'm so embarrassed).&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Handle_MouseLeftButtonDown(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, System.Windows.Input.MouseEventArgs e)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt; {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt; &lt;span class="kwrd"&gt;switch&lt;/span&gt; (m_state)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt; {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; &lt;span class="kwrd"&gt;case&lt;/span&gt; ShadeState.down:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt; m_state = ShadeState.goingUp;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt; UpHandleStart.Value = m_upHandleStart;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt; UpShadeStart.Value = m_upShadeStart;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt; Up.SpeedRatio = 1.0;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt; Up.Seek(&lt;span class="kwrd"&gt;new&lt;/span&gt; TimeSpan(0));&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 11: &lt;/span&gt; Up.Begin();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 12: &lt;/span&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 13: &lt;/span&gt;&amp;#xA0;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 14: &lt;/span&gt; &lt;span class="kwrd"&gt;case&lt;/span&gt; ShadeState.goingDown:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 15: &lt;/span&gt; m_state = ShadeState.goingUp;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 16: &lt;/span&gt; Down.Pause();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 17: &lt;/span&gt; UpHandleStart.Value = HandleTranslation.Y;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 18: &lt;/span&gt; UpShadeStart.Value = Shade.Height;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 19: &lt;/span&gt; Up.SpeedRatio = 2.0;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 20: &lt;/span&gt; Up.Begin();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 21: &lt;/span&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 22: &lt;/span&gt;&amp;#xA0;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 23: &lt;/span&gt; &lt;span class="kwrd"&gt;case&lt;/span&gt; ShadeState.goingUp:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 24: &lt;/span&gt; m_state = ShadeState.goingDown;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 25: &lt;/span&gt; Up.Pause();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 26: &lt;/span&gt; DownHandleStart.Value = HandleTranslation.Y;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 27: &lt;/span&gt; DownShadeStart.Value = Shade.Height;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 28: &lt;/span&gt; Down.SpeedRatio = 2.0;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 29: &lt;/span&gt; Down.Begin();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 30: &lt;/span&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 31: &lt;/span&gt;&amp;#xA0;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 32: &lt;/span&gt; &lt;span class="kwrd"&gt;case&lt;/span&gt; ShadeState.up:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 33: &lt;/span&gt; m_state = ShadeState.goingDown;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 34: &lt;/span&gt; DownHandleStart.Value = m_downHandleStart;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 35: &lt;/span&gt; DownShadeStart.Value = m_downShadeStart;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 36: &lt;/span&gt; Down.Seek(&lt;span class="kwrd"&gt;new&lt;/span&gt; TimeSpan(0));&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 37: &lt;/span&gt; Down.SpeedRatio = 1.0;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 38: &lt;/span&gt; Down.Begin();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 39: &lt;/span&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 40: &lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Essentially what he's done is wire up the animation(s) to mouse events (i.e. when the user clicks, make sure you fire this methods). He's then put together 4 states so to speak and based on where things in time are at, he adjusts and forces the animation to react accordingly.&lt;/p&gt;

&lt;p&gt;Simple! &lt;/p&gt;

&lt;p&gt;This problem reminds me of a game I once wrote in Flash. It was a XMAS game where Santa would kick presents into chimneys based on where the power bar was at (i.e. user needs to guess the right amount of power). I wrote the game in such a way that it used gravity, physics etc&amp;#xA0; and took forever. It took a Flash Designer on my team to show me that all that was need was a few motion paths and when the power bar got within certain ranges, it would fire off the right animation path (ie 50-60% meant gotoAndPlay(3)).&lt;/p&gt;

&lt;p&gt;Amazing how one can write 115 lines of code for &amp;quot;Hello World&amp;quot; when all you need is 2 lines.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5598609" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Animation/default.aspx">Animation</category></item><item><title>How To: Using AjaxControlToolkit to animate Silverlight.</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/10/03/how-to-using-ajaxcontroltoolkit-to-animate-silverlight.aspx</link><pubDate>Wed, 03 Oct 2007 10:47:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5256824</guid><dc:creator>scbarnes</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/5256824.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=5256824</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=5256824</wfw:comment><description>&lt;p&gt;In my Silverlight travels, I was thinking on how one is able to animate a &amp;quot;PullDown&amp;quot; menu, in that it comes down and then goes back up upon triggered events.&lt;/p&gt;  &lt;h4&gt;Approach A.&lt;/h4&gt;  &lt;p&gt;I decided to approach this using simplistic rules, where I'd create two animations inside Expression Blend using the KeyFrame Recorder.&amp;#xA0; I'd simply move the &amp;quot;Canvas&amp;quot; in question to where I want it to rest, and then within a 1 second interval, animate it upwards. I'd call this &amp;quot;&lt;strong&gt;PLMoveUp&lt;/strong&gt;&amp;quot;. I'd then take the exact concept and reverse it through a separate KeyFrame Resource (KeyFrame Resources are basically XAML code that await you to trigger their animation sequence via play/stop methods) called &amp;quot;&lt;strong&gt;PLMoveDown&lt;/strong&gt;&amp;quot;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowToUsingAjaxControlToolkittoanimateSi_FA13/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="174" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowToUsingAjaxControlToolkittoanimateSi_FA13/image_thumb.png" width="516" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This works, don't get me wrong, but sadly this approach is flawed. As how do you know where the current phase in the Storyboard is at? there aren't any &amp;quot;onStoryBoardStep&amp;quot; style events to subscribe to, resulting in &amp;quot;assuming&amp;quot; the animations end naturally. This means that if a user were to click on a button repeatedly you'd kind of get this flicker look (bad experience).&lt;/p&gt;  &lt;h4&gt;Approach B.&lt;/h4&gt;  &lt;p&gt;Instead of having two Canvas.Resource Storyboards, you consolidate into one. Then using the Silverlight API, you would utilse the power of Storyboard.AutoReverse and Storyboard.Seek(amt).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowToUsingAjaxControlToolkittoanimateSi_FA13/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="83" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowToUsingAjaxControlToolkittoanimateSi_FA13/image_thumb_2.png" width="523" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This works, but again, you've got to do a lot of work to poll where the animation is at, and that requires an outside &amp;quot;timer&amp;quot;. In that in order to poll the current point in time of an animation, you'd create a &amp;quot;timer&amp;quot; that would constantly ping/pong the Storyboard for an update. Yet you'd need to further assign an x:Name attribute to one of the SplineDoubleKeyFrames for this as well, as you'll want to extract the KeyTime.Seconds amount in order to determine what the latest value is currently sitting at.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowToUsingAjaxControlToolkittoanimateSi_FA13/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowToUsingAjaxControlToolkittoanimateSi_FA13/image_thumb_3.png" width="597" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Overall, bad.&lt;/p&gt;  &lt;h4&gt;Approach C.&lt;/h4&gt;  &lt;p&gt;Using the ASP.NET &lt;strong&gt;AjaxControlToolkit&lt;/strong&gt;, I was able to leverage the existing animation libraries to do my bidding for me. &lt;/p&gt;  &lt;p&gt;First I created a project using the &lt;strong&gt;ASP.NET AJAX Futures Web application (.NET Framework 3.5)&lt;/strong&gt; template.&lt;/p&gt;  &lt;p&gt;I then added a Project to this Solution, using the JavaScript Silverlight Project (I'm not going to use the managed code (C#) approach to Silverlight, instead I'm choosing to use JavaScript + Silverlight).&lt;/p&gt;  &lt;p&gt;I setup my GUI assets, using Microsoft Expression Blend. Positioned them to where I want them, and began then saved the project.&lt;/p&gt;  &lt;p&gt;Then inside Visual Studio 2008, I added a &amp;quot;Add Silverlight Link..&amp;quot; via the &lt;strong&gt;Solution Explorer&lt;/strong&gt;. Connected the two together.&lt;/p&gt;  &lt;p&gt;Now, I must confess it's at this point where I had to figure out how to bring in the AjaxControlToolkit. As I've never really had a need to use it up until today. I downloaded the 3.5 Framework version of it and installed it (Basically follow the Install Videos to the letter and you should be fine).&lt;/p&gt;  &lt;p&gt;Now comes the code.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt; &lt;span class="rem"&gt;&amp;lt;!-- -----------------------------------------------------------------------------------&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;&lt;span class="rem"&gt; SILVERLIGHT CONTROL&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt;&lt;span class="rem"&gt; ----------------------------------------------------------------------------------- --&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SilverlightHost&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Xaml&lt;/span&gt; &lt;span class="attr"&gt;XamlUrl&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;~/Page.xaml&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SilverlightControl&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Windowless&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1000&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;750&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;br /&gt;Using the Xaml tag, i created a pointer to my Page.xaml file (which has my assets housed within). Note the name &amp;quot;&lt;strong&gt;SilverlightControl&lt;/strong&gt;&amp;quot; (important).&lt;/p&gt;

&lt;p&gt;In my UI I have a &lt;strong&gt;PullDownMenu&lt;/strong&gt;, which I want to now animate up and down.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowToUsingAjaxControlToolkittoanimateSi_FA13/image_12.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="292" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowToUsingAjaxControlToolkittoanimateSi_FA13/image_thumb_5.png" width="475" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now comes the code:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt; &amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt; Sys.Application.add_init(appInitHandler);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt; appInitHandler() {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt; }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt; &lt;span class="rem"&gt;// Silverlight is Ready, now proceed...&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt; appOnLoad() {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt; &lt;span class="rem"&gt;//$create(Demo.Person,null,null,null,null);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; animator = &lt;span class="kwrd"&gt;new&lt;/span&gt; AjaxControlToolkit.Animation.FadeAnimation($get(&lt;span class="str"&gt;&amp;quot;Overlay&amp;quot;&lt;/span&gt;), 0.5, 20, &lt;span class="str"&gt;&amp;quot;FadeOut&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; customanim = &lt;span class="kwrd"&gt;new&lt;/span&gt; AjaxControlToolkit.Animation.ScriptAction(&lt;span class="str"&gt;&amp;quot;overlay&amp;quot;&lt;/span&gt;, 0.5, 40, &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 11: &lt;/span&gt; animator.play(); &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 12: &lt;/span&gt; customanim.onStep = onCustomStep;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 13: &lt;/span&gt; customanim.play();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 14: &lt;/span&gt; }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 15: &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 16: &lt;/span&gt; &lt;span class="rem"&gt;// Custom Animation Sequence &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 17: &lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt; onCustomStep(percentage) {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 18: &lt;/span&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; o = $get(&lt;span class="str"&gt;&amp;quot;SilverlightControl&amp;quot;&lt;/span&gt;).content.FindName(&lt;span class="str"&gt;&amp;quot;pulldown&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 19: &lt;/span&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; amt = Math.round(456*percentage/100);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 20: &lt;/span&gt; o.SetValue(&lt;span class="str"&gt;&amp;quot;Canvas.Top&amp;quot;&lt;/span&gt;, amt + -456);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 21: &lt;/span&gt; }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 22: &lt;/span&gt; &amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;It's that Simple! I also had a &amp;lt;DIV&amp;gt; tag called &amp;quot;overlay&amp;quot; which represents a screenout overaly.&lt;/p&gt;

&lt;p&gt;I need my hosting provider on &lt;a href="http://www.beyondTheBrowser.NET"&gt;http://www.beyondTheBrowser.NET&lt;/a&gt; to move me over to the .NET 3.5 hosting plan in order to show you, but essentially using the&lt;strong&gt; &lt;a href="http://asp.net/AJAX/AjaxControlToolkit/Samples/Walkthrough/AnimationReference.aspx#ScriptAction" target="_blank"&gt;AjaxControlToolkit.Animation.ScriptAction&lt;/a&gt;&lt;/strong&gt; library, I'm able to empower it to control the Silverlight Animation sequence.&lt;/p&gt;

&lt;p&gt;If you're confused? don't worry, I'll be &lt;strong&gt;videocasting&lt;/strong&gt; this later this month.&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:B3E14793-948F-49af-A347-D19C374A7C4F:5bd54441-a13a-4b60-8ec8-bf365b62d825" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;
&lt;script type="text/javascript"&gt;&lt;!--
digg_url = 'http://digg.com/programming/How_To_Using_AjaxControlToolkit_to_animate_Silverlight';
digg_title = 'How To: Using AjaxControlToolkit to animate Silverlight.';
digg_bodytext = 'In my Silverlight travels, I was thinking on how one is able to animate a "PullDown" menu, in that it comes down and then goes back up upon triggered events.';
//--&gt;&lt;/script&gt;
&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5256824" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Animation/default.aspx">Animation</category></item><item><title>Adobe vs Microsoft, the comic.</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/09/05/adobe-vs-microsoft-the-comic.aspx</link><pubDate>Wed, 05 Sep 2007 15:29:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4763306</guid><dc:creator>scbarnes</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/4763306.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=4763306</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=4763306</wfw:comment><description>&lt;p&gt;&lt;img style="margin: 10px" src="http://animation.nectarine.com.au/images/wotp_day2.jpg" align="right"&gt; I'm always amused online when I see the usual Adobe vs Microsoft rant, it always ends up in someone fighting with the author or rogue commenter's shooting shots from the side, echoing the same points.&lt;/p&gt; &lt;p&gt;There is hope though in this battle royale, as you see there is a company that I'll happily evangelize anytime they ask, and they are called &lt;a href="http://www.nectarine.com.au" target="_blank"&gt;Nectarine&lt;/a&gt;. Nectarine are famous in the Adobe circles, as these guys not only know their skills around some of the products, but they are hands down the most down to earth people I've met and what annoys me more, is they have talent in the area of animation.&lt;/p&gt; &lt;p&gt;Their latest work was done for &lt;a href="http://www.WebOnThePiste.com" target="_blank"&gt;WebOnThePiste.com&lt;/a&gt;&amp;nbsp;(WOTP)&amp;nbsp;a conference I attended couple of weeks ago in New Zealand, where they did the keynote introductions. You can watch them over on the WOTP site.&lt;/p&gt; &lt;p&gt;If I were to explain their cartoons, I'd say it's 1-part Geek, 1-Part Passion, 1-Part Fawlty towers, 2-Parts Monty Python and 3-Parts Madness (can't do the math on that, but suffice to say, funny).&lt;/p&gt; &lt;p&gt;I want these guys to do a comic strip / animation, to sit back and take the sting out of all the online politics and simply make us all laugh at how silly the brand wars can be. I proposed such idea to &lt;a href="mailto:Minty@Nectarine"&gt;Minty@Nectarine&lt;/a&gt; and I think he's onboard.. but.. I want all readers of this blog to post support in such an idea.&lt;/p&gt; &lt;p&gt;Check out their work from years gone by as well. &lt;/p&gt; &lt;p&gt;&lt;a title="http://animation.nectarine.com.au/" href="http://animation.nectarine.com.au/"&gt;http://animation.nectarine.com.au/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I salute Nectarine (not because their animations had me in it either).&lt;/p&gt; &lt;p&gt;Show your support to this idea by signing my comments to petition them to do it! :P&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4763306" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Adobe/default.aspx">Adobe</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Web+On+The+Piste/default.aspx">Web On The Piste</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Nectarine/default.aspx">Nectarine</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Animation/default.aspx">Animation</category></item></channel></rss>