<?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 : Skinning</title><link>http://blogs.msdn.com/msmossyblog/archive/tags/Skinning/default.aspx</link><description>Tags: Skinning</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>POC #1 - Project Harmony (pt1) (Silverlight &amp; Flash)</title><link>http://blogs.msdn.com/msmossyblog/archive/2007/11/15/poc-1-project-harmony-pt1-silverlight-flash.aspx</link><pubDate>Thu, 15 Nov 2007 11:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6248634</guid><dc:creator>scbarnes</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/msmossyblog/comments/6248634.aspx</comments><wfw:commentRss>http://blogs.msdn.com/msmossyblog/commentrss.aspx?PostID=6248634</wfw:commentRss><wfw:comment>http://blogs.msdn.com/msmossyblog/rsscomments.aspx?PostID=6248634</wfw:comment><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="76" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb.png" width="429" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I've been enjoying the overall experience of what Silverlight has to offer since I started with Microsoft back in January 07. That being said, I've often been an internal &amp;quot;goto&amp;quot; person at times for some Flash advice on behalf of Microsoft customers around the world.&lt;/p&gt;  &lt;p&gt;In light of this, recently I also encountered a situation where a customer was looking to use both Silverlight and Flash together, something which I kind of gave a confused look at? (ie .. not because I wanted them to pick ours etc, but more to the point what was the root of the problem).&lt;/p&gt;  &lt;p&gt;The problem was simply that they had deadline to meet, they wanted to retain the video in Windows Media format but were looking to use the GUI inside Flash as a base. Fair enough, this isn't a &lt;a href="http://en.wikipedia.org/wiki/Zero-sum" target="_blank"&gt;Zero Sum Game&lt;/a&gt; and we play well with others.&lt;/p&gt;  &lt;p&gt;This isn't the first I've seen similar stories around this, but mostly its from Design shops around the world whom are keen to embrace Silverlight and Flash (fingers in both barrels) but are kind of skittish to start with (i.e. the assumption is really you have to pick a team, red vs blue).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="334" alt="Screenshot of Project Harmony" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_1.png" width="434" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Thus, I decided to put together this proof of concept, titled &amp;quot;&lt;strong&gt;&lt;font color="#ff0000"&gt;Harmony&lt;/font&gt;&lt;/strong&gt;&amp;quot;. The project is quite extensive and I'll spend the next month dissecting it and talking about different cross-sections of how you as a designer &amp;amp; developer are able to produce compelling enriching experiences with Silverlight and that you can execute on your creative vision. The rest is simply semantics and bits/bolts.&lt;/p&gt;  &lt;p&gt;In this first iteration of my &lt;strong&gt;Project &amp;quot;Harmony&amp;quot;&lt;/strong&gt; I wanted to test to see how well the performance would be in the event one was to use 90% Silverlight and 10% flash. In that overlay Flash on top of Silverlight and see what happens.&lt;/p&gt;  &lt;p&gt;The results speak for themselves, suffice to say that I really put in a lot of gratuitous animations in Silverlight to really try and break the performance overall.&lt;/p&gt;  &lt;p&gt;You can view for yourself here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.demo.members.winisp.net/poc1/" href="http://www.demo.members.winisp.net/poc1/"&gt;http://www.demo.members.winisp.net/poc1/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;(Note: Link Requires &lt;a href="http://www.silverlight.net/getstarted" target="_blank"&gt;Silverlight 1.1&lt;/a&gt; and Flash 9.x)&lt;/p&gt;  &lt;h3&gt;My Objectives for this first iteration was:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;       &lt;h4&gt;Objectives (v1.0)&lt;/h4&gt;     &lt;/strong&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Determine to see if Flash&amp;#xA0; (Transparent windowless) degrades in performance in the event it sits on top of Silverlight.&lt;/li&gt;      &lt;li&gt;Determine if PNG overlays impact the performance of the video whilst mixed with Flash.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;strong&gt;       &lt;h4&gt;Conclusion (v1.0)&lt;/h4&gt;     &lt;/strong&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;I did see some performance degrading on both technologies, but that is mostly due to both making use of alpha transparency (I'm yet to meet a runtime of any brand that can withstand alpha transparency)&lt;/li&gt;      &lt;li&gt;Working inside Flash &amp;amp; then crossing over to Visual Studio / Expression Blend is not for the feint hearted (I kept tripping up in C# vs AS3.0 scripting syntax hooks hehe - nothing against both technologies but its more of a mind map thing).&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;strong&gt;       &lt;h4&gt;Highlights (v1.0)&lt;/h4&gt;     &lt;/strong&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Using PNG's a designer is capable of doing some interesting things to a graphical interface. In this case&amp;#xA0; used a bullet that appears to not only be embedded into the TV Screen but also shatters it.       &lt;br /&gt;        &lt;br /&gt;I also added the &amp;quot;bullets&amp;quot; in the top right corner as PNG overlay to also test how 2xOverlays inside the Video would perform.        &lt;br /&gt;        &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_16.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="80" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_7.png" width="433" border="0" /&gt;&lt;/a&gt;        &lt;br /&gt;&amp;#xA0;&lt;/li&gt;      &lt;li&gt;Using Video Reflection within Silverlight, one is able to really bring home a gloss finish by giving it a &amp;quot;glass&amp;quot; effect (as we all know there isn't enough glass effects online       &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_18.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="201" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_8.png" width="244" border="0" /&gt;&lt;/a&gt;         &lt;br /&gt;&amp;#xA0;&lt;/li&gt;      &lt;li&gt;Using an infinite loop within Silverlight, I was able to create a &amp;quot;ambiance&amp;quot; feel to the UI by making two sets of images fade in/out underneath the Flash area and the Silverlight&amp;#xA0; Video. This again, was to really see how the performance would go with a Silverlight animation underneath Flash.       &lt;br /&gt;        &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_10.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="103" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_4.png" width="433" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="115" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_3.png" width="167" align="right" border="0" /&gt;&lt;/a&gt;Using Adobe Photoshop for the bitmap artwork, I stumbled upon a technique whereby if you take a photo, duplicate its layer and then apply &amp;quot;gussian blur&amp;quot; with 50% transparency it kind of gives this glow/ambiance effect commonly seen in most games today. &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;Silverlight (Video aside of course) handles its progressive loading of assets in a unique way, I'm yet to put my finger on it but I must look into this more as I expected the GUI to take much longer to load (as there aren't any preloaders in this design).       &lt;br /&gt;        &lt;br /&gt;&amp;#xA0;&lt;/li&gt;      &lt;li&gt;The Flash Slider (ie works like iTunes) was done reasonably quickly, and the code has already been ported to Silverlight suffice to say, it looks seamlessly integrated within the GUI and unless you don't have Silverlight or Flash installed, it would argueably be forgiven as being part of one technology not 2.       &lt;br /&gt;        &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_6.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="80" alt="image" src="http://blogs.msdn.com/blogfiles/msmossyblog/WindowsLiveWriter/POC1ProjectHarmonypt1SilverlightFlash_10191/image_thumb_2.png" width="433" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;It's a small experiment at first, mainly to test the waters and see what holds together initially. &lt;/p&gt;  &lt;p&gt;The walk away message here is simple, this isn't a &lt;a href="http://en.wikipedia.org/wiki/Zero-sum" target="_blank"&gt;Zero Sum Game&lt;/a&gt; firstly and I want to stress that the most. The other impact is that if you're keen to try Silverlight but aren't quite ready for that big leap, it's ok you can use both without penalties implied. &lt;/p&gt;  &lt;p&gt;The last but most important of all, is prove your concepts initially. In that if you're looking to switch from using Flash (for whatever reason) and aren't bold enough to do the lock stock and barrel or aren't allowed to, that's ok. Establish some objectives initially, build a Proof of Concept (POC) and chip away at the idea, as you will no doubt learn both technologies limitations faster than any book can really teach you.&lt;/p&gt;  &lt;p&gt;The secret of a truly successful RIA in my opinion is knowing the technologies limitations.&lt;/p&gt;  &lt;p&gt;The next POC (pt2) I'll talk more about the JavaScript Bridge and how I was able to make the Thumbnail Slide load up the Video Playlist etc. I'm also putting together some Video Casts on not only how I made this but also will upload the code once I get it locked into &lt;a href="http://www.codeplex.com" target="_blank"&gt;Codeplex.com&lt;/a&gt; (open source). All code &amp;amp; design is hand-made by myself only.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;(&lt;strong&gt;NOTE&lt;/strong&gt;: This is a crude, raw POC and progress bars etc for both technologies aren't important for this initial purpose. They are coming, and I'll talk more about that later. Again, this is a POC so don't lock this down as some end to end final production grade solution).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;(&lt;strong&gt;NOTE&lt;/strong&gt;: I used &lt;a href="http://www.whatistheorangebox.com/" target="_blank"&gt;Teamfortress 2&lt;/a&gt; Artwork, because it's my favorite game at the moment, I have personal history with it and well, the Soldier video is by far the funniest game trailer I've seen in quite some time. Valve Software are legends in my book - My Steam ID is &amp;quot;[te] Skittlez&amp;quot;)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Next: &lt;strong&gt;&lt;em&gt;The &amp;quot;HOW&amp;quot; (Code Dump / VideoCast).&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Related Post: &lt;a title="Writing Proof of Concept RIA&amp;#x27;s" href="http://blogs.msdn.com/msmossyblog/archive/2007/11/11/writing-proof-of-concepts-ria-s.aspx"&gt;Writing Proof of Concept RIA's&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6248634" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Flash/default.aspx">Flash</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Adobe/default.aspx">Adobe</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Mashup/default.aspx">Mashup</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Going+Flex+to+Silverlight/default.aspx">Going Flex to Silverlight</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/UXE/default.aspx">UXE</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/RIA+Producer/default.aspx">RIA Producer</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Art/default.aspx">Art</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Skinning/default.aspx">Skinning</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/RIA+Handbook/default.aspx">RIA Handbook</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Rich+Internet+Application/default.aspx">Rich Internet Application</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/Rich+Interactive+Application/default.aspx">Rich Interactive Application</category><category domain="http://blogs.msdn.com/msmossyblog/archive/tags/POC/default.aspx">POC</category></item><item><title>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></channel></rss>