<?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 : Expression Blend</title><link>http://blogs.msdn.com/msmossyblog/archive/tags/Expression+Blend/default.aspx</link><description>Tags: Expression Blend</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>How to: Make Innerglows with Expression Blend.</title><link>http://blogs.msdn.com/msmossyblog/archive/2008/09/15/how-to-make-innerglows-with-expression-blend.aspx</link><pubDate>Sun, 14 Sep 2008 22:25:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8951848</guid><dc:creator>scbarnes</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/8951848.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=8951848</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=8951848</wfw:comment><description>&lt;p&gt;I'm knee deep in a WPF project i'm writing for my team. I had the need today to have an innerglow, and noticed that we seem to have forgotten this little BitmapEffect of goodness (which I'll be promptly hassling Jon tomorrow for in the next revision).&lt;/p&gt;  &lt;p&gt;That being said, as stubborn as I am I decided to try my hand at producing my own InnerGlow effect. It was actually very simple procedure to replicate inside Expression Blend.&lt;/p&gt;  &lt;h1&gt;Step 1.&lt;/h1&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 10px; border-left: 0px; border-bottom: 0px" height="159" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_24.png" width="166" align="left" border="0" /&gt; Define your shape. In this case I went with a rounded Rectangle, but you can use any shape you see fit and firstly you need to figure out your base shape.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Note:       &lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;Now it's important here to note, that you need to think of this as being &amp;quot;Pancakes&amp;quot; in terms of the design composition.&lt;/p&gt;  &lt;p&gt;Don't worry to much about pixel perfect precision inside Vector either.&amp;#160; A illustrator friend of mine once gave me a basic rule to live with when it comes to Vector art:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;You can hide a lot of imperfections, as given you can zoom endlessly you get to the point were the naked eye can't see it and move on..&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Couldn't agree more.&lt;/p&gt;  &lt;h1&gt;Step 2.&lt;/h1&gt;  &lt;p&gt;Simply copy the shape (CTRL+C) and hit Paste keys (CTRL+V). It should paste exactly on top of the previous shape and retain the exact x/y co-ordinates.&lt;/p&gt;  &lt;p&gt;Rename your layer to something suites you, I myself called it &lt;strong&gt;IcnInnerGlow&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="121" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_16.png" width="273" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;Step 3.&lt;/h1&gt;  &lt;p&gt;Selecting the layer you just copied, you now want to add a BitmapEffect called &amp;quot;Outerglow&amp;quot;. This can be found via your Properties area, under the group called &lt;strong&gt;Appearance. &lt;/strong&gt;You will need to click on the expander for this group in order to see the below.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="121" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_19.png" width="305" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_21.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="206" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_thumb_7.png" width="305" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You should see something like this:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px; border-left: 0px; border-bottom: 0px" height="159" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_27.png" width="166" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Not really inspiring is it? &lt;/p&gt;  &lt;h1&gt;Step 4.&lt;/h1&gt;  &lt;p&gt;You now need to knockout the &lt;strong&gt;Fill&lt;/strong&gt; and bump up the Border. So in this case, go to your &lt;strong&gt;Fill&lt;/strong&gt; and click on the &lt;strong&gt;No Brush&lt;/strong&gt; Tab.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="206" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_30.png" width="305" border="0" /&gt; &lt;/p&gt;  &lt;p&gt; You will also need to ensure the Border's Brush is set to a color or setting that you feel comfortable with. In this case, I chose a solid color and ensured the Opacity was 53%.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="206" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_33.png" width="305" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;The results should now look like this.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="159" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_36.png" width="166" border="0" /&gt; &lt;/p&gt;  &lt;h1&gt;Step 5&lt;/h1&gt;  &lt;p&gt;Now comes the real magic. You select your layer, and again hit CTRL+C and CTRL+V (duplicating your layer basically).&lt;/p&gt;  &lt;p&gt;With this new layer (it should increase the glow effect, make a note of that!) you now want to make this a clipping path. In that everything inside this shape is what you only want to make visible. The rest is something we want to discard.&lt;/p&gt;  &lt;p&gt;To do this, right-click on the newly duplicated layer, Choose Path, then Make Clipping Path.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="206" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_39.png" width="379" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;A new Modal window will now appear, asking which path you want to attach this clipping path to (think masking in Flash). Choose your &amp;quot;InnerGlow&amp;quot; shape, and you should now have the following result:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="159" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_42.png" width="166" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Notice no bleeding beyond the shape's actual borders? Now you have a uniform InnerGlow that matches your shape. It's now up to you what you want to do from here on out, but overall this is a quick and fairly friction free way of achieving an InnerGlow using the basic BitmapEffects in place.&lt;/p&gt;  &lt;p&gt;I personally, adjusted the color to white, added another BitmapEffect (Blur) and tweaked the settings in a way that I ended up with the following visual effect.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="159" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_45.png" width="166" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Doesn't look like much does it? well keep in mind I'm Zoomed In here, when I zoom back out to 100%, this is the visual look I pulled off.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="128" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/HowtoMakeInnerglowswithExpressionBlend_AD63/image_48.png" width="150" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Now to add some Gloss to the buttons..as we all know, there isn't enough &amp;quot;Gloss&amp;quot; online today :)&lt;/p&gt;  &lt;h1&gt;Summary.&lt;/h1&gt;  &lt;p&gt;Expression Blend isn't meant to be a Adobe Photoshop replacement, it's meant to essentially act as a bridge between the Designer Tools and Developer Tools. That being said, it has a fair amount of hidden power under the hood (when dealing with WPF). I've found that I can achieve a lot of the visual effects I've commonly used in Photoshop via Expression Blend (yes its weird I know). It requires more hand-crafting but overall visually once I've put it into place, I can re-use across a lot of controls throughout my WPF application.&lt;/p&gt;  &lt;p&gt;I think at times the Vector UI's look absolutely crap and its dying of gradient brush overkill, so I'm hoping to show folks a few tricks here and there to produce visually appealing art.&lt;/p&gt;  &lt;p&gt;Here's the best part of all. If you like the above, then cut and paste this XAML code into your application, and you're off to the races.&lt;/p&gt;  &lt;p&gt;Yet another upside to using XAML, sharing art is as easy as pasting XML.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre style="border-right: #cecece 1px solid; padding-right: 5px; border-top: #cecece 1px solid; padding-left: 5px; min-height: 40px; padding-bottom: 5px; overflow: auto; border-left: #cecece 1px solid; width: 430px; padding-top: 5px; border-bottom: #cecece 1px solid; background-color: #fbfbfb"&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        	&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Stroke&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;#87757575&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeDashCap&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Square&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeEndLineCap&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Flat&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeLineJoin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Miter&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeThickness&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0.5&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;RadiusX&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;3&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;RadiusY&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;3&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;icnBase&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;2,2,2,0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;HorizontalAlignment&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;32&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Height&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;32&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Grid&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;Column&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Grid&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;ColumnSpan&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        		&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle.BitmapEffect&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        			&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;DropShadowBitmapEffect&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Opacity&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0.835&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ShadowDepth&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Softness&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0.305&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        		&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle.BitmapEffect&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        		&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle.Fill&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        			&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;LinearGradientBrush&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StartPoint&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0.538462,0.98077&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;EndPoint&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0.538462,-0.576924&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        				&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;GradientStop&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Color&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;#FF232323&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Offset&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        				&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;GradientStop&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Color&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;#FF5D5B5B&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Offset&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        			&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        		&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle.Fill&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        	&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        	&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Stroke&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;#87757575&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeDashCap&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Square&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeEndLineCap&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Flat&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeLineJoin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Miter&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeThickness&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0.5&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;RadiusX&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;3&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;RadiusY&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;3&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;icnBase_Copy&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;2,2,2,0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;HorizontalAlignment&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;32&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Height&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;32&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Fill&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;{x:Null}&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Clip&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;M0.25,3.25 C0.25,1.5931458 1.5931458,0.25 3.25,0.25 L28.75,0.25 C30.406854,0.25 31.75,1.5931458 31.75,3.25 L31.75,28.75 C31.75,30.406854 30.406854,31.75 28.75,31.75 L3.25,31.75 C1.5931458,31.75 0.25,30.406854 0.25,28.75 z&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;d&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;IsHidden&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;True&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        		&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle.BitmapEffect&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        			&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;OuterGlowBitmapEffect&lt;/span&gt; &lt;span style="color: #ff0000"&gt;GlowSize&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;2&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;GlowColor&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;#FFF9F9F9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Opacity&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0.415&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        		&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle.BitmapEffect&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        	&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        	&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Stroke&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;#87757575&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeDashCap&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Square&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeEndLineCap&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Flat&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeLineJoin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Miter&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;StrokeThickness&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0.5&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;RadiusX&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;3&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;RadiusY&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;3&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;icnBase_Copy1&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;2,2,2,0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;HorizontalAlignment&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Stretch&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;32&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Height&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;32&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Fill&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;{x:Null}&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Clip&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;M0.25,3.25 C0.25,1.5931458 1.5931458,0.25 3.25,0.25 L28.75,0.25 C30.406854,0.25 31.75,1.5931458 31.75,3.25 L31.75,28.75 C31.75,30.406854 30.406854,31.75 28.75,31.75 L3.25,31.75 C1.5931458,31.75 0.25,30.406854 0.25,28.75 z&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        		&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle.BitmapEffect&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        			&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;BitmapEffectGroup&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        				
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffff00"&gt;										&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;OuterGlowBitmapEffect&lt;/span&gt; &lt;span style="color: #ff0000"&gt;GlowSize&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;2&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;GlowColor&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;#FFF9F9F9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Opacity&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;0.5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        				
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        			&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;BitmapEffectGroup&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #ffffff"&gt;                        		&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle.BitmapEffect&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: #fbfbfb"&gt;                        	&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8951848" width="1" height="1"&gt;</description><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/Design/default.aspx">Design</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Expression+Studio/default.aspx">Expression Studio</category></item><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>Voice Activated Commands in Blend.</title><link>http://blogs.msdn.com/msmossyblog/archive/2008/05/14/voice-activated-commands-in-blend.aspx</link><pubDate>Wed, 14 May 2008 03:31:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8502283</guid><dc:creator>scbarnes</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/8502283.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=8502283</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=8502283</wfw:comment><description>&lt;p&gt;Most folks whom know me would agree I am quite lazy at times. This being true, I've discovered a product which will help me out to become even lazier.&lt;/p&gt;  &lt;p&gt;Voice Activated Commands is a product which retails for $18 USD and what it enables you to do is type in a text like &amp;quot;mossyblog&amp;quot; and then assign it to a shortcut.&lt;/p&gt;  &lt;p&gt;The real reason I got this, was that when I'm on a plane or in a cramped environment, the mouse options at times is a pain in the butt, that and I can never really remember most Keyboard Functions off by heart. Words I can.&lt;/p&gt;  &lt;p&gt;You can setup VAC with any program, and Microsoft Blend is one of them. I use this application for Microsoft Blend, Adobe Photoshop and Hexagon.&lt;/p&gt;  &lt;p&gt;I've found it quite accurate and it surprised me, I guess last time I used a software that had voice command was many years ago with a product called &amp;quot;Dragon Dictate&amp;quot;. Things have come a long way since then.&lt;/p&gt;  &lt;p&gt;More Info: &lt;a title="http://www.dwvac.com/" href="http://www.dwvac.com/"&gt;http://www.dwvac.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/VoiceActivatedCommandsinBlend_940D/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/VoiceActivatedCommandsinBlend_940D/image_thumb.png" width="450" height="457" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8502283" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Expression+Blend/default.aspx">Expression Blend</category></item><item><title>RIA, building your control framework.</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/08/13/ria-building-your-control-framework.aspx</link><pubDate>Mon, 13 Aug 2007 09:38:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4364101</guid><dc:creator>scbarnes</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/4364101.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=4364101</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=4364101</wfw:comment><description>&lt;p&gt;Silverlight 1.0 is around the corner, and it won't have controls assigned to it upon official release. Yet, this is something very important to the success of Silverlight going forward, as without a control framework there is really no point right?&lt;/p&gt; &lt;p&gt;This is where Silverlight 1.1 will come through strong, and win over some folks with its upcoming new pieces to the first iteration puzzle. Yet, already 3rd Party vendors are producing controls today and automatically folks whom have been waiting impatiently for controls in Silverlight are likely to flock to these vendors.&lt;/p&gt; &lt;p&gt;Is this bad? not really, people want to build today, not tomorrow and so it's understandable. Yet, you can also build your own framework today should you wish to. The primitives in Silverlight have been in place for quite some time, and they will be available for 1.0 (with some extra benefits thrown in 1.1 of course).&lt;/p&gt; &lt;p&gt;The key ingredients to a framework are simply the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Text Input&lt;/li&gt; &lt;li&gt;Mouse Events&lt;/li&gt; &lt;li&gt;Support for External Media / Graphic elements&lt;/li&gt; &lt;li&gt;Animation / Threaded timed looping.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Armed with these, you could produce an entire framework ranging from a button all the way up to a tabbed layout. In fact, I've seen some folks produce&lt;strong&gt; Accordion Panels&lt;/strong&gt; already. Yet, their is a lot to take on and namely it's most difficult piece to overcoming complexity is how do you not only make the framework work, but also for developers &amp;amp; designers at the same time?&lt;/p&gt; &lt;p&gt;Here are some considerations you should undertake if you decide to build a control / application framework tomorrow in Silverlight or Windows Presentation Foundation (WPF).&lt;/p&gt; &lt;h3&gt;Part 1 - Skinning&lt;/h3&gt; &lt;p&gt;Skinning and styling are somewhat confused with one another at times. In that changing a Font Color for a button label is not skinning. Adding your own custom texture to the surface of the button is skinning. It's can be both an easy and complex task to achieve, as when you think about a Button for example, it initially has 4 states associated to it.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/RIAbuildingyourcontrolframework_E9DA/buttonstates.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="60" alt="buttonstates" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/RIAbuildingyourcontrolframework_E9DA/buttonstates_thumb.jpg" width="286" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Each state represents how the button will be displayed. Typically the default state shown when a user first see's a button is that of either "Normal" or "Disabled" depending on the context of use. This is basic skinning 101 style stuff, and the approach of a &lt;a href="http://blogs.msdn.com/msmossyblog/archive/2007/08/07/ria-just-whom-really-builds-them.aspx" target="_blank"&gt;RIA Producer&lt;/a&gt; is to look at ways of injecting their own style of button without having to bust open lines of code to do so. Ideally the best option would be to see the button state in a tree format, then when you click on the "Normal" node, you are asked a bunch of questions around how you would like to apply skinning techniques to produce an expected result. This can either be done as part of an XML Editor of your own (which in turn spits out say XAML) or it can be done via a design tool (Expression Design / Blend ). &lt;/p&gt; &lt;p&gt;This is basic skinning, yet the&amp;nbsp;more creative souls you work with, the more&amp;nbsp;control they wish to rule over the skins. An example would be&amp;nbsp;a design in which I want a Modal window to&amp;nbsp;display. &lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/RIAbuildingyourcontrolframework_E9DA/scrn1.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 10px; border-left: 0px; border-bottom: 0px" height="187" alt="scrn1" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/RIAbuildingyourcontrolframework_E9DA/scrn1_thumb.jpg" width="240" align="right" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In the Diagram&amp;nbsp;&amp;nbsp;to the Right, there are&amp;nbsp;two pieces that&amp;nbsp;are to be displayed inside a RIA (Rich Interactive Application)&amp;nbsp;application (wrote many moons ago in Adobe Flex).&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The first piece, represents the outer shell, in that this was to be the "overall" window in which I would dock my graphical interface into.&lt;/p&gt; &lt;p&gt;The second piece (smaller window) represented how my Modal/Non-Modal windows would be displayed. &lt;/p&gt; &lt;p&gt;Each of these pieces had a variety of display states, and the objective for me was to change the colors depending on how the user interacted with the application in question. In that they were not only context aware but also stretched according to screen real-estate.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/RIAbuildingyourcontrolframework_E9DA/gui_01.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="117" alt="gui_01" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/RIAbuildingyourcontrolframework_E9DA/gui_01_thumb.jpg" width="150" border="0"&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/RIAbuildingyourcontrolframework_E9DA/gui_02.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="117" alt="gui_02" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/RIAbuildingyourcontrolframework_E9DA/gui_02_thumb.jpg" width="150" border="0"&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/RIAbuildingyourcontrolframework_E9DA/gui_03.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="117" alt="gui_03" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/RIAbuildingyourcontrolframework_E9DA/gui_03_thumb.jpg" width="150" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;As you can imagine the complexity of skinning just went up a few points, and doing this inside Adobe Flex at the time was quite hard (in fact I had to re-write a lot of the framework to adhere to specific skinning principals of my own). Yet, all I was doing was inserting an array of skin states to the equation? &lt;/p&gt; &lt;p&gt;It comes back to Skinning is something which is quite fluid and needs to be looked at from all sorts of angles. You're dealing with both a designer - and - a developer in one hit, so you need to provide turn-keys if you will to empower them in choosing multiple states, with multiple stretching techniques that can be bolted on via an array of modes - which in turn are flipped on/off through different event contexts.&lt;/p&gt; &lt;p&gt;In looking at the above graphic, you'll also note that there is a lot of static gray in the design? Should this change per state change or should this stay static. We could easily argue that the colored gradients are realistically the changing pieces and therefore can be adjusted by swapping in respective PNG files (alpha transparency remaining per color context). This the smart approach, and probably the least expensive (given there will need to be an entire update to the overall UI should one chose to repaint the gray bits every time).&lt;/p&gt; &lt;p&gt;Overall, the point is there are many variables at play and to approach skinning through a "4-state" update sequence for example, is quite immature and not realistically helpful to the RIA Producer of tomorrow.&lt;/p&gt; &lt;p&gt;The way forward is simple, there needs to be a &lt;strong&gt;GUIStateManager Class,&lt;/strong&gt; in which has nodes. Think of these nodes as you would a tree control. Each node has a cluster of elements associated to it, yet each node can be shared or duplicated (duplication is much easier but can be expensive for memory). A Designer needs to assign these nodes to a control / layout of their respective choosing (in my case, a Window). The trick is you need to think of ways in which you can empower your developers &amp;amp; designers of tomorrow in making this happen, as it's not good enough to build a prescribed skinned control framework like many others have done in the past.&lt;/p&gt; &lt;p&gt;As this defeats the whole purpose of why Silverlight and WPF exist, and using Expression Design + Expression Blend there are strong hints to a more streamlined approach to building a complex hierarchy of skin states, whilst providing flexibility in choosing how each state should be displayed per control.&lt;/p&gt; &lt;p&gt;You can view a more structured example of the Window via:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.mossyblog.com/archives/614.cfm" href="http://www.mossyblog.com/archives/614.cfm"&gt;http://www.mossyblog.com/archives/614.cfm&lt;/a&gt;&amp;nbsp;&lt;br&gt;(My Originating blog post back in my Adobe Flex days) &lt;/p&gt; &lt;p&gt;&lt;a title="http://www.mossyblog.com/SynergyFLEX/v2_0_1/SynergyFLEX.html" href="http://www.mossyblog.com/SynergyFLEX/v2_0_1/SynergyFLEX.html"&gt;http://www.mossyblog.com/SynergyFLEX/v2_0_1/SynergyFLEX.html&lt;/a&gt;&lt;br&gt;(See the above GUI inside Adobe FLEX, scaling according to your screen resolution)&lt;/p&gt; &lt;p&gt;Next... &lt;strong&gt;Part 2 - Stretching...&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4364101" 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/default.aspx">RIA</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Expression+Design/default.aspx">Expression Design</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/Skinning/default.aspx">Skinning</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Control+Framework/default.aspx">Control Framework</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/RIA+Handbook/default.aspx">RIA Handbook</category></item><item><title>Microsoft UX.Artu.Tv</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/08/13/microsoft-ux-artu-tv.aspx</link><pubDate>Mon, 13 Aug 2007 08:08:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4363371</guid><dc:creator>scbarnes</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/4363371.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=4363371</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=4363371</wfw:comment><description>&lt;p&gt;&lt;a href="http://ux.artu.tv/" target="_blank"&gt;Arturo Toledo&lt;/a&gt;, Product Manager for UX Platform &amp;amp; Tools (Silverlight, WPF, Expression...)&amp;nbsp;has spun up his own blog found over at &lt;a title="http://www.ux.artu.tv/" href="http://www.ux.artu.tv/"&gt;http://www.ux.artu.tv/&lt;/a&gt;. Arturo is a classic artistic soul and he has some interesting insights once you get to know him - hint: subscribe to his blog as you will see one of the inner working UX minds behind the scenes &amp;nbsp;in Microsoft.&lt;/p&gt; &lt;p&gt;He also has a list of updated features in&lt;strong&gt; Expression Blend 2 - August Preview&lt;/strong&gt;. He should know as chances are he's the one of the few overlooking them.&lt;/p&gt; &lt;p&gt;One standout feature for me is:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Make User Control&lt;/strong&gt;&lt;br&gt;Expression Blend 2 August Preview contains an early look at new functionality that lets you re-factor existing content into a control that can be reused (instantiated). Currently, only selected elements—and their referenced resources—can be re-factored into the new control. Any referenced animations are currently lost, but the current plans for next release are to preserve these as well. You also need to build the project to be able to see and instantiate the new control.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Other UX related bloggers are: &lt;ul&gt; &lt;li&gt;&lt;a href="http://albertocerriteno.blogspot.com/"&gt;Alberto Cerriteno&lt;/a&gt; &lt;li&gt;&lt;a href="http://scarynoises.com/blog/"&gt;Brad Becker&lt;/a&gt; &lt;li&gt;&lt;a href="http://blog.nibblestutorials.net/"&gt;Celso Gomes (Nibbles)&lt;/a&gt; &lt;li&gt;&lt;a href="http://chrisbernard.blogs.com/design_thinking_digest/"&gt;Chris Bernard&lt;/a&gt; &lt;li&gt;&lt;a href="http://keyux.spaces.live.com/blog/"&gt;Forest Key&lt;/a&gt; &lt;li&gt;&lt;a href="http://glennvilppu.blogspot.com/"&gt;Glenn Vilppu&lt;/a&gt; &lt;li&gt;&lt;a href="http://manodesign.spaces.live.com/"&gt;Manuel Clement&lt;/a&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/expressate/"&gt;Mauricio Angulo&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.designerslove.net/"&gt;Nathan Dunlap&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.richardbanks.com/work/?p=169"&gt;Richard Banks&lt;/a&gt; &lt;li&gt;&lt;a href="http://ux-strategy.com/"&gt;Will Tschumy&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/shanemo" target="_blank"&gt;Shane Morris&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/karstenj/" target="_blank"&gt;Karsten Januszewski&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4363371" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Evangelists/default.aspx">Evangelists</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/UXE/default.aspx">UXE</category></item><item><title>RIA is a belief, Silverlight is the execution.</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/08/03/ria-is-a-belief-silverlight-is-the-execution.aspx</link><pubDate>Fri, 03 Aug 2007 04:26:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4196710</guid><dc:creator>scbarnes</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/4196710.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=4196710</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=4196710</wfw:comment><description>&lt;p&gt;I interact a lot around discussions in the Rich Interactive/Internet Application (RIA) space. I read as much as I can on it and keep tabs on what I find interesting around theories associated to RIA. I also engage folks whom never have even heard the acronym RIA and it's interesting conversation to have as how do you explain it without going deep into a detailed technology discussion.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;What does RIA represent really.&lt;/strong&gt;&lt;br&gt;It's effectively an idea, on how to get maximum user experience through a browser payload initially. In that we all can agree that we'd love to balance our general ledgers via the browser as it's an easy footprint to leverage whilst at the same time we can get a sense of depth via such a small footprint. &lt;/p&gt; &lt;p&gt;HTML combined with JavaScript (aka AJAX) is doing a lot of interesting things, but it effectively hits a barrier at some point and it could come down to simple GUI (Graphic User Interface) positioning of elements that or involvement of other forms of media (animation, movie, audio, remote data connection points). RIA on the other hand overall is about clawing our away out of this realm of limitation and into the next natural existence, by aggregating as many of the media elements and the twists and turns that are associated with them into a rich interactive experience, which can empower end-users to solve real world business grade solutions (that or simply provide an existence to goof around in).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;How does Silverlight Play a role then?&lt;/strong&gt;&lt;br&gt;Silverlight has and will always be the missing piece in the overall Microsoft Platform stack. It's been missing for years and whilst we have made substantial bold movement in the Windows Form&amp;nbsp;Project&amp;nbsp;space&amp;nbsp;and at the same time really pumped a lot of goodness into the Web Form Project space, we still have this missing piece in the middle. It's usually filled by Flash but in reality what does that do to the overall development practices buried deep within our customer base?&lt;/p&gt; &lt;p&gt;It means you may have to learn an alterative technology that has similar syntax to C# / XAML but is obviously different. It also means that you're not really getting an end to end tool driven solution (Visual Studio is a fantastic productive tool, so one has to agree that if we can keep in the one space and tweak/pull code to suite life is good right?). &lt;/p&gt; &lt;p&gt;Enter Silverlight's existence, in that our bet at Microsoft is to enable folks to move upwards and downwards in the three tiers of platform experience (ASP/AJAX | Silverlight | WPF). Each has their own righteous approach to execution but the underlying win for the average .NET punter is that you get to re-use your skill set and understanding of Microsoft's approach throughout. In that if you were a to study C# and XAML tomorrow, this effectively becomes your passport up and down the stack right?&lt;/p&gt; &lt;p&gt;Furthermore, it's a natural progression in enabling customers around the world to enhance their existence online both through browsers but also soon via other client surfaces using an enriching experience. That's the overall bet anyway. Is it going to happen tomorrow? nope, it's a marathon not a sprint and simply put focus on up skilling now as that will be your safest bet.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Well, what is Microsoft's vision overall around RIA then (Silverlight + VS2008 + Expression?)&lt;br&gt;&lt;/strong&gt;Once you've grasped the context of what RIA represents you're probably going to either want to build or give it a miss. If you chose the earlier, you're now looking down the barrel of a whole new world in which to approach. You're going to have to weigh up both your developer &amp;amp; designer capabilities, along side associated logistics (servers, bandwidth etc) associated to the cost in implementation.&lt;/p&gt; &lt;p&gt;It's a lot of variables trust me (a lot of years playing in this space telling you hehe)&lt;/p&gt; &lt;p&gt;The key ingredient that we believe is worth the investment in Silverlight is that you're basically buying one socket but opening up into other realms of possibility. In that down the road the overall eco-system that surrounds Silverlight is growing to a rate that I've never personally seen.&lt;/p&gt; &lt;p&gt;For example, Visual Studio 2008 has a lot of new features and productivity gains associated to it and Silverlight is buried deep within. You also then have Expression Studio to match, so in a nutshell you have both ends of a gradient (developer vs designer) meeting in the middle via these two suite of tools. On top of this, you then have an entire platform stack to pick from, and given some of the improvements associated with Windows 2008, this is heating up to solid solution (eg: IIS 7.0 is quite an exciting piece). It gets better though, as we are making some strategic movements associated with Live.com cloud, and one thing I've came to a crashing conclusion is that folks internally are really looking to push the Microsoft service cloud further and deeper then it is today.&lt;/p&gt; &lt;p&gt;Overall you have an entire ecosystem, many brands and i mean many! waiting for you to pickup and engage. Silverlight is effectively one of many points of entry and it's journey is to be the middle guy, the one that is bound by obvious security restraints but at the same time hints at strong end-user experience over the wire (Internet). Looking to do more in client surface reach as well!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Are&amp;nbsp;Microsoft competing with Flash? &lt;br&gt;&lt;/strong&gt;Honestly, no. I think there is a lot of overlap and intersection points between Silverlight and Flash but if you step back and look at the entire product spectrum you'll see to isolate the argument down to feature vs feature in Flash battle, really undervalues you the proposition put forward around Microsoft's bet in Rich Interactive Applications. Silverlight has a roadmap that differs in my opinion from Flash, and realistically it both can be fused together or if you prefer to pick one then so be it.. choice is a brilliant thing to have.&lt;/p&gt; &lt;p&gt;Microsoft is simply looking to complete the circle of User Experience. Any questions? &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4196710" 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/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/AJAX/default.aspx">AJAX</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/DHTML/default.aspx">DHTML</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Expression+Design/default.aspx">Expression Design</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category></item><item><title>Some minor Silverlight assumptions/queries.</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/06/08/some-minor-silverlight-assumptions-queries.aspx</link><pubDate>Fri, 08 Jun 2007 14:17:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3159931</guid><dc:creator>scbarnes</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/3159931.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=3159931</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=3159931</wfw:comment><description>&lt;p&gt;It's been an interesting couple of days for me, as I've meet some developers in both business meeting setting and via social setting (aka &lt;a href="http://webjam.com.au/" target="_blank"&gt;WebJam&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;In my chats with these developers, they all seem very keen to learn more about Silverlight but have hesitations on it that range from "Isn't it bleeding edge?" to "It looks good but I'm not a .NET developer".&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;I'm not a .NET developer, so I guess Silverlight isn't for me.&lt;/strong&gt;&lt;br&gt;Wrong, it can be, you can use Silverlight with HTML as if you would with Flash and HTML. Having zero .NET experience won't hamper you in anyway from building applications in future with Silverlight. You can do a lot with Silverlight today + HTML + AJAX. Microsoft wasn't kidding around with it being a natural progression from AJAX To the next step. You can control the entire Silverlight SDK from JavaScript (no .NET assembly required). So "&lt;em&gt;Silverlight bots, transform and roll out!&lt;/em&gt;"&lt;br&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;What does Silverlight do differently to Flash&lt;br&gt;&lt;/strong&gt;Lots, none and some. Wrong question, what does Silverlight do for you going forward and if you are a .NET developer it compliments your skill set (removing the need to learn new tooling &amp;amp; languages together. Expression Studio isn't that bad of an effort to be honest, as it took me 2 days of playing and I got it).&lt;br&gt;&lt;br&gt;If you are a budding Flash Developer and are looking for a reason to take it on as an extra piece to your portfolio, do so with that in mind. It's another hammer for your tool kit, another piece of clay to sculpt with and so on. It approaches things differently to Adobe Flash, but that is because the roadmap beyond its release has different visions of where RIA is likely to go thus Microsoft's approach. Rich Web, Rich Client &amp;amp; Rich Device is your mantra.&lt;br&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;How do I combine ASP.NET AJAX with Silverlight then?&lt;/strong&gt;&lt;br&gt;That's easy, you create a Project Solution in &lt;a href="http://go.microsoft.com/fwlink/?LinkID=89146&amp;amp;clcid=0x409" target="_blank"&gt;Visual Studio Orcas&lt;/a&gt;, you nominate &lt;a href="http://go.microsoft.com/fwlink/?LinkID=89147&amp;amp;clcid=0x409" target="_blank"&gt;ASP.NET Futures&lt;/a&gt;&amp;nbsp;(with &lt;a href="http://blogs.msdn.com/publicsector/archive/2007/06/07/new-asp-net-ajax-control-toolkit-version-released.aspx" target="_blank"&gt;AJAX Toolkit installed&lt;/a&gt;)&amp;nbsp;as your chosen template. You then create a Silverlight Project within the same solution.&lt;br&gt;&lt;br&gt;Now comes the really hard part.&lt;br&gt;&lt;br&gt;You then right click on the ASP.NET AJAX Futures project and hit the "Add Silverlight Link" to this project.&lt;br&gt;&lt;br&gt;Congratulations you've just linked the two projects together and every time you make changes to your Silverlight project, it will reflect into your ASP.NET AJAX Futures project. "Look mah, no hands".&lt;br&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;What would you tell me that's cool about Silverlight?&lt;/strong&gt;&lt;br&gt;Honestly, so far I've found (even after today) the Brush Fills to be the sexiest thing in this round of releases. I like it for it's simplicity and allow me to demonstrate&lt;/li&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle.Fill&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Image&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Source&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"myimage.jpg"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle.Fill&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Rectangle&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/ul&gt;
&lt;p&gt;I'll post more of these leading up to ReMIX as it amazes me some of the questions being asked (hey you don't know what you don't know, no harm, no foul) and if these are all that are stopping folks from having a go, then consider it greenlight time hehe.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3159931" 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/Visual+Studio+2005/default.aspx">Visual Studio 2005</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/Expression+Blend/default.aspx">Expression Blend</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/XAML/default.aspx">XAML</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/DHTML/default.aspx">DHTML</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Expression+Design/default.aspx">Expression Design</category></item><item><title>Vista's doing well, which means WPF = Good.</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/04/28/vista-s-doing-well-which-means-wpf-good.aspx</link><pubDate>Fri, 27 Apr 2007 21:37:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2301885</guid><dc:creator>scbarnes</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/2301885.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=2301885</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=2301885</wfw:comment><description>&lt;img height="300" alt="" src="http://graphics8.nytimes.com/images/2007/04/27/business/27soft.600.jpg" width="600" border="0"&gt;  &lt;div class="credit"&gt;&lt;em&gt;&lt;font size="1"&gt;Paul Sakuma/Associated Press - Image Link to &lt;a href="http://www.nytimes.com/2007/04/27/technology/27soft.html?ex=1335412800&amp;amp;en=48607badebe39291&amp;amp;ei=5124&amp;amp;partner=permalink&amp;amp;exprod=permalink" target="_blank"&gt;New York Times&lt;/a&gt;&lt;/font&gt;&lt;/em&gt;&lt;/div&gt; &lt;p&gt;I see a lot of hype, street talk around Windows Vista and how it's doing world-wide. It usually ends up in a Apple conversation and it gets noisy from there.&lt;/p&gt; &lt;p&gt;At any rate, Microsoft announced yesterday that we are essentially growing the Windows Vista &amp;amp; Office market well. You can read more if you want the specifics below, but what does all this mean for developers?&lt;/p&gt; &lt;p&gt;In context, it means that Windows Presentation Foundation (WPF) applications are shaping up to be a realistic discussion around going beyond the browser experience with approaches like (XBAP) for example. As you don't download .NET 3.0 runtime, it's free inside the operating system and some applications I've seen inside WPF have super small payloads attached to them and do significantly a lot.&lt;/p&gt; &lt;p&gt;A classic example in the WPF space is Expression Blend itself, as when you remove the Sample Source Code Examples, you're left with approx under 20mb in size. I'd argue the actual Help file takes up a large piece of that as well. Overall, that's pretty damn exciting as not only does Expression Blend use WPF pieces to then create WPF (so dog fooding) &lt;/p&gt; &lt;p&gt;There is room to move here folks and with success stories like New York Times reader being profiled out there, it offers a compelling argument going forward in terms of adopting Microsoft User Experience offerings. &lt;/p&gt; &lt;p&gt;It doesn't stop there, SideBar Gadgets is probably one of the coolest features in Windows Vista as you can do some very creative and interesting things with it. You can use this in LOB applications to snapshot pieces of the application and so on. &lt;/p&gt; &lt;p&gt;Bottom line, now is the time to get your mind around WPF, what it means to you, what you can do with it and start&amp;nbsp;thinking about adding it to your development&amp;nbsp;roadmap going forward.&amp;nbsp;&lt;/p&gt; &lt;p&gt;[ Continue to &lt;a href="http://www.nytimes.com/2007/04/27/technology/27soft.html?ex=1335412800&amp;amp;en=48607badebe39291&amp;amp;ei=5124&amp;amp;partner=permalink&amp;amp;exprod=permalink" target="_blank"&gt;NYT article&lt;/a&gt; on how well it's doing&amp;nbsp; - that or read it inside &lt;a href="http://www.nytimes.com/products/timesselect/overview.html?incamp=ts:toolbar_trial" target="_blank"&gt;NYT Reader&lt;/a&gt; itself! ]&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2301885" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/.NET+3.0/default.aspx">.NET 3.0</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Expression+Blend/default.aspx">Expression Blend</category></item><item><title>I love electric Rain Standout.</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/04/23/i-love-electric-rain-standout.aspx</link><pubDate>Mon, 23 Apr 2007 04:47:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2239459</guid><dc:creator>scbarnes</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/2239459.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=2239459</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=2239459</wfw:comment><description>&lt;p&gt;In my role, Powerpoint Presentations is usually a must and while I don't mind all the new bells and whistles in Office 2007 Powerpoint, it's still not as good as if I would build in say Flash Professional (like I've done in the past).&lt;/p&gt; &lt;p&gt;Never fear, for Electric Rain have come to the resource and put together a Rich Media presentation tool which empower geek's like me to whack some funky presentations with minimal effort but with a rich experience as my output - and - it plays well with &lt;strong&gt;&lt;a href="http://www.expressionblend.com/" target="_blank"&gt;Expression Blend&lt;/a&gt;&lt;/strong&gt;! HOW COOL IS THAT!&lt;/p&gt; &lt;p&gt;Now I just need to work on the presentation scripts themselves as I have more to learn in that space (Give me a year)&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.erain.com/products/standout/ExpressionVideo.html" href="http://www.erain.com/products/standout/ExpressionVideo.html"&gt;http://www.erain.com/products/standout/ExpressionVideo.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Very cool!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2239459" width="1" height="1"&gt;</description><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/Electric+Rain/default.aspx">Electric Rain</category></item></channel></rss>