<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.wintellect.com/CS/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>Jeff Prosise's Blog</title><link>http://www.wintellect.com/CS/blogs/jprosise/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>Silverlight 4's New INavigationContentLoader Interface</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2010/02/08/silverlight-4-s-new-inavigationcontentloader-interface.aspx</link><pubDate>Mon, 08 Feb 2010 13:37:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:12063</guid><dc:creator>jprosise</dc:creator><slash:comments>2</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/12063.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=12063</wfw:commentRss><description>&lt;P&gt;One of the extensibility points added to the run-time in Silverlight 4 is the new INavigationContentLoader interface, which allows applications that use Silverlight's navigation framework to take control of page loading. In Silverlight 3, navigation URIs had to target XAML files containing Silverlight pages. In Silverlight 4, a navigation URI can target anything—a class name, a Web service that provides page content dynamically, or a XAML file contained in a remote XAP, for example—as long as an INavigationContentLoader implementation is present to support it.&lt;/P&gt;
&lt;P&gt;David Poll has blogged extensively about INavigationContentLoader and about the different scenarios in which it can be used. Here, for example, is a great post on using a custom content loader to &lt;A title="On-demand loading of assemblies with Silverlight Navigation" href="http://www.davidpoll.com/2010/02/01/on-demand-loading-of-assemblies-with-silverlight-navigation-revisited-for-silverlight-4-beta/" target=_blank&gt;load pages from XAPs that are downloaded on demand&lt;/A&gt;. Here's another that demonstrates how to use a custom content loader to &lt;A title="Opening up Silverlight 4 Navigation: Authentication/Authorization in an INavigationContentLoader" href="http://www.davidpoll.com/2010/01/01/opening-up-silverlight-4-navigation-authenticationauthorization-in-an-inavigationcontentloader/" target=_blank&gt;authorize access to a page&lt;/A&gt; before navigating to it. It seems there is no end to the purposes that INavigationContentLoader might serve.&lt;/P&gt;
&lt;P&gt;To demonstrate the bare-bones basics of INavigationContentLoader, I implemented one that serves a simple purpose: it appends ".xaml" to the file names of the pages targeted by navigation URIs. Rather than declare your Frame control and URI mappings this way:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Frame&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Main"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Source&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Home"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Frame.UriMapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;map&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UriMapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;map&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UriMapping&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Uri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;=""&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; MappedUri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="/Index.xaml" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;map&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UriMapping&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Uri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Home"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; MappedUri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="/Index.xaml" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;map&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UriMapping&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Uri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Detail/{id}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; MappedUri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="/Detail.xaml?id={id}" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;map&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UriMapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Frame.UriMapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Frame&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;With my CustomContentLoader class, you do it this way instead:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Frame&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Main"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Source&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Home"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Frame.UriMapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;map&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UriMapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;map&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UriMapping&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Uri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;=""&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; MappedUri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="/Index" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;map&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UriMapping&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Uri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Home"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; MappedUri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="/Index" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;map&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UriMapping&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Uri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Detail/{id}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; MappedUri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="/Detail?id={id}" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;map&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UriMapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Frame.UriMapper&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Frame.ContentLoader&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;local&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;CustomContentLoader&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt; /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Frame.ContentLoader&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Frame&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;Note the new ContentLoader property on the Frame control, which allows you to replace Silverlight's default content loader with a custom content loader. The default content loader is an instance of PageResourceContentLoader, which loads pages from local XAML files. My CustomContentLoader wraps an instance of PageResourceContentLoader and appends ".xaml" to target URIs before delegating to PageResourceContentLoader to do the actual loading. Here's the source code:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; &lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;CustomContentLoader&lt;/SPAN&gt; : &lt;SPAN style="COLOR:#2b91af;"&gt;INavigationContentLoader&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;PageResourceContentLoader&lt;/SPAN&gt; _loader = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;PageResourceContentLoader&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;IAsyncResult&lt;/SPAN&gt; BeginLoad(&lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt; targetUri, &lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt; currentUri,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;AsyncCallback&lt;/SPAN&gt; userCallback, &lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; asyncState)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; _loader.BeginLoad(AddFileNameExtension(targetUri),&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;currentUri, userCallback, asyncState);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;bool&lt;/SPAN&gt; CanLoad(&lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt; targetUri, &lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt; currentUri)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; _loader.CanLoad(AddFileNameExtension(targetUri), currentUri);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; CancelLoad(&lt;SPAN style="COLOR:#2b91af;"&gt;IAsyncResult&lt;/SPAN&gt; asyncResult)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_loader.CancelLoad(asyncResult);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;LoadResult&lt;/SPAN&gt; EndLoad(&lt;SPAN style="COLOR:#2b91af;"&gt;IAsyncResult&lt;/SPAN&gt; asyncResult)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; _loader.EndLoad(asyncResult);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt; AddFileNameExtension(&lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt; uri)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt; index = uri.OriginalString.IndexOf(&lt;SPAN style="COLOR:#a31515;"&gt;'?'&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt; (index == -&lt;SPAN style="COLOR:brown;"&gt;1&lt;/SPAN&gt;) &lt;SPAN style="COLOR:green;"&gt;// No query string; append extension&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt;(uri.OriginalString + &lt;SPAN style="COLOR:#a31515;"&gt;".xaml"&lt;/SPAN&gt;, &lt;SPAN style="COLOR:#2b91af;"&gt;UriKind&lt;/SPAN&gt;.Relative);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;else&lt;/SPAN&gt; &lt;SPAN style="COLOR:green;"&gt;// Insert extension before query string&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt;(uri.OriginalString.Insert(index, &lt;SPAN style="COLOR:#a31515;"&gt;".xaml"&lt;/SPAN&gt;), &lt;SPAN style="COLOR:#2b91af;"&gt;UriKind&lt;/SPAN&gt;.Relative);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;Note the asynchronous design of INavigationContentLoader.&amp;nbsp;When you implement it, you often have to implement IAsyncResult, too. I didn't have to in CustomContentLoader because I used the IAsyncResult returned by PageResourceContentLoader. While the asynchronous design complicates matters when writing a synchronous loader, it's&amp;nbsp;perfect for content loaders that load pages using Silverlight's asynchronous networking stack.&lt;/P&gt;
&lt;P&gt;This is a trivial example, but it still demonstrates the power of INavigationContentLoader. The upshot is that in Silverlight 4, navigation URIs no longer have to target local XAML files, but can be virtualized instead. Look for this to come in handy not only for application developers, but for future versions of Silverlight as well.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=12063" width="1" height="1"&gt;</description></item><item><title>Silverlight 4's New Notification Windows</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2010/01/09/silverlight-4-s-new-notification-windows.aspx</link><pubDate>Sat, 09 Jan 2010 13:44:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11461</guid><dc:creator>jprosise</dc:creator><slash:comments>2</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/11461.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=11461</wfw:commentRss><description>&lt;P&gt;Silverlight 4 includes a slew of features designed to make out-of-browser applications richer. One of those features is notification windows, also known as “toast” windows. This feature is available to all OOBs, regardless of whether they are trusted. It is not available to applications that run inside the browser.&lt;/P&gt;
&lt;P&gt;A notification window is one that pops up in the lower right corner of the screen, similar to the ones that Outlook uses to notify users about incoming e-mails. (On the Macintosh, notification windows appear at the top of the screen rather than the bottom.) Notification windows are normally used to let the user know something important has happened. A classic use for them is to inform the user that an updated version of an out-of-browser application is available when the OOB is launched from the desktop or Start menu:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:330px;HEIGHT:126px;" title="Notification window" alt="Notification window" src="http://www.wintellect.com/CS/photos/prosise/images/11460/original.aspx" width=330 height=126&gt;&lt;/P&gt;
&lt;P&gt;This notification window was created by first declaring a user control named UpdateNotification that contained the following content:&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="LayoutRoot"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Border&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="Frame"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="300"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="100"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Background&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="LightYellow"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Orientation&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="Vertical"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Border&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="290"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="24"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; CornerRadius&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="4"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="2,4,2,4"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Border.Background&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;LinearGradientBrush&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; StartPoint&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="0.5,0.0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;EndPoint&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="0.5,1.0"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;GradientStop&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Offset&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="0.2"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Color&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="#FF1C68A0" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;GradientStop&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Offset&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="1.0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Color&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="#FF54A7E2" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;LinearGradientBrush&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Border.Background&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Border.Effect&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;DropShadowEffect&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; BlurRadius&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="4"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; ShadowDepth&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="4"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;Opacity&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="0.4" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Border.Effect&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="Update Available"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; FontSize&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="12"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FontWeight&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="Bold"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="White"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="4" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Border&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Orientation&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="Horizontal"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Image&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Source&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="Images/Update.png"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="32"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="34"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;Stretch&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="Fill"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="4"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="Top" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="240"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="An updated version..."&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;FontSize&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="11"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="#FF202020"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; TextWrapping&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="Wrap"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;="4" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Border&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;Then it was displayed by creating an instance of System.Windows.NotificationWindow, instantiating the user control and assigning it to the NotificationWindow’s Content property, and calling NotificationWindow.Show:&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#2b91af;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;NotificationWindow&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; win = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;NotificationWindow&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#2b91af;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;UpdateNotification&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; un = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;UpdateNotification&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;win.Width = un.Width;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;win.Height = un.Height;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;win.Content = un;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;win.Show(&lt;SPAN style="COLOR:brown;"&gt;10000&lt;/SPAN&gt;);&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;The parameter passed to NotificationWindow.Show is a time-out parameter that specifies how long the notification window will be displayed—in this case, 10 seconds. If desired, you can call NotificationWindow.Close to close the notification window early—for example, in response to a mouse click.&lt;/P&gt;
&lt;P&gt;Another new feature available only to OOBs is the ability to interact with host windows. In Silverlight 3, out-of-browser applications had limited control over their environment. It was not possible, for example, for an OOB to resize the window in which it was hosted.&lt;/P&gt;
&lt;P&gt;This changes in Silverlight 4 with the addition of the System.Windows.Window class and the new Application.MainWindow property. An out-of-browser application can get a reference to its window through the MainWindow property, and it can use Window properties and methods to interrogate and even modify the host window. The following code snippet resizes the host window programmatically:&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#2b91af;FONT-SIZE:10pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;Window&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt; win = &lt;SPAN style="COLOR:#2b91af;"&gt;Application&lt;/SPAN&gt;.Current.MainWindow;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;win.Width = &lt;SPAN style="COLOR:brown;"&gt;1024&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;"&gt;win.Height = &lt;SPAN style="COLOR:brown;"&gt;768&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;The Window class also features properties named Left and Top for repositioning host windows, WindowState for minimizing, maximizing, and restoring host windows, and TopMost for controlling the host window’s topmost state. And it includes an Activate method for bringing a host window to the foreground and assigning it the focus.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11461" width="1" height="1"&gt;</description></item><item><title>Silverlight 4's New Managed Extensibility Framework</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2010/01/04/silverlight-4-s-new-managed-extensibility-framework.aspx</link><pubDate>Mon, 04 Jan 2010 14:46:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11236</guid><dc:creator>jprosise</dc:creator><slash:comments>8</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/11236.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=11236</wfw:commentRss><description>&lt;P&gt;One of the less-talked-about features of Silverlight 4 is the new Managed Extensibility Framework, or MEF.&amp;nbsp;MEF has been evolving on CodePlex for a while now. It's slated to be integrated into .NET 4.0 and Silverlight 4, and as such is something with which developers should be familiar.&lt;/P&gt;
&lt;P&gt;As its name implies, MEF is a framework for building extensible applications. It provides infrastructure for loose coupling between components and can be used&amp;nbsp;to create&amp;nbsp;composable applications—apps that pull together "parts" from various locations to compose an aggregate to present to the user. One of the key concepts in MEF is that of the catalog, which tells MEF where to&amp;nbsp;look for parts that make up an application. An application can import parts from the catalog with [Import] attributes, and parts themselves can use [Export] attributes to expose themselves to importers. That's the&amp;nbsp;big picture, and of course it ignores&amp;nbsp;hundreds of little details, but understanding these core concepts is a big help in understanding MEF as a whole.&lt;/P&gt;
&lt;P&gt;To demonstrate how Silverlight developers might use MEF in a somewhat real-world scenario, I built a sample application named MEFDemo, which you can &lt;A title="MEFDemo source code" href="http://www.wintellect.com/downloads/MEFDemo.zip"&gt;download from Wintellect's Web site&lt;/A&gt;. MEFDemo is an extensible&amp;nbsp;Silverlight 4 image editor. You load photos into it through an OpenFileDialog, and then you click buttons to apply filters of various types to the photos. Here's MEFDemo showing a photo I snapped in the Vatican a few years ago:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:481px;HEIGHT:480px;" title="MEFDemo before filtering" alt="MEFDemo before filtering" src="http://www.wintellect.com/CS/photos/prosise/images/11234/481x480.aspx" width=481 height=480&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;And here's how it looked after I clicked the Blur button a few times&amp;nbsp;and then embossed the image:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:481px;HEIGHT:480px;" title="MEFDemo after filtering" alt="MEFDemo after filtering" src="http://www.wintellect.com/CS/photos/prosise/images/11235/481x480.aspx" width=481 height=480&gt;&lt;/P&gt;
&lt;P&gt;Out of the box, MEFDemo offers three image filters: a grayscale filter, a blur filter, and an embossing filter. Because the filters are MEF plug-ins, you can easily write filters of your own and plug them into the application.&lt;/P&gt;
&lt;P&gt;One of the filters—the grayscale filter—is embedded in the main application. It's found in GrayscaleFilter.cs and it implements an interface named IImageFilter:&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;GrayscaleFilter&lt;/SPAN&gt;&lt;FONT color=#000000&gt; : &lt;/FONT&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;IImageFilter&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt;&lt;FONT color=#000000&gt; Label&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;get&lt;/SPAN&gt;&lt;FONT color=#000000&gt; { &lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:#a31515;"&gt;"Grayscale"&lt;/SPAN&gt;&lt;FONT color=#000000&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt;&lt;FONT color=#000000&gt; Execute(&lt;/FONT&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;WriteableBitmap&lt;/SPAN&gt;&lt;FONT color=#000000&gt; bitmap)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:12pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:12pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;IImageFilter is defined a separate project named ImageFilterContract and is decorated with an [InheritedExport] attribute, which means all types that implement the interface should be exported by MEF:&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;[&lt;SPAN style="COLOR:#2b91af;"&gt;InheritedExport&lt;/SPAN&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;SPAN style="COLOR:blue;"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;IImageFilter&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Execute(&lt;SPAN style="COLOR:#2b91af;"&gt;WriteableBitmap&lt;/SPAN&gt; bitmap);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt; Label { &lt;SPAN style="COLOR:blue;"&gt;get&lt;/SPAN&gt;; }&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:12pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;The other two filters are exported from a separate project named ConvolutionFilters. Because the project type is Silverlight Application, not Silverlight Class Library, building the solution places two XAP files in the Web site's ClientBin folder: MEFDemo.xap, which contains the main application, and ConvolutionFilters.xap, which contains BlurFilter and EmbossFilter. These filters, too, implement IImageFilter and are automatically exported from the XAP as a result of the [InheritedExport] attribute.&lt;/P&gt;
&lt;P&gt;In MEF terminology, the exported image filters are "parts." Which begs the question: how and where do the parts get imported?&lt;/P&gt;
&lt;P&gt;Look in MainPage.xaml.cs and you'll find the following property declaration:&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;[&lt;SPAN style="COLOR:#2b91af;"&gt;ImportMany&lt;/SPAN&gt;(AllowRecomposition = &lt;SPAN style="COLOR:blue;"&gt;true&lt;/SPAN&gt;)]&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:12pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;ObservableCollection&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR:#2b91af;"&gt;IImageFilter&lt;/SPAN&gt;&amp;gt; Filters { &lt;SPAN style="COLOR:blue;"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR:blue;"&gt;set&lt;/SPAN&gt;; }&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:12pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;The [ImportMany] attribute tells MEF to look for all exported parts that implement IImageFilter and to populate the ObservableCollection with references to those parts.&amp;nbsp;In MainPage's constructor, a single line of code binds the ObservableCollection to an ItemsControl to&amp;nbsp;produce buttons representing the imported image filters. The ItemsControl uses the following item template to create the buttons:&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;ItemsControl.ItemTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;DataTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt; Label&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;="96"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;="32"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;="0,12,12,12"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt; Tag&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt; Click&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;="OnExecuteFilter" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;DataTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:12pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;ItemsControl.ItemTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:12pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;The text on the face of each button comes from the associated image filter's Label property, and&amp;nbsp;the Tag property holds an IImageFilter&amp;nbsp;reference to the&amp;nbsp;filter itself. When a button is clicked, it's a simple matter to retrieve the IImageFilter reference and use it to invoke the filter:&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#2b91af;FONT-SIZE:9pt;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#2b91af;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;IImageFilter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt; filter = (sender &lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;as&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;Button&lt;/SPAN&gt;&lt;FONT color=#000000&gt;).Tag &lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;as&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;IImageFilter&lt;/SPAN&gt;&lt;FONT color=#000000&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;filter.Execute(_bitmap);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;With MEF, we can export parts and we can import parts.&amp;nbsp;But&amp;nbsp;how does MEF know where to look for&amp;nbsp;parts to satisfy our imports? The answer is found in MainPage's constructor:&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:green;FONT-SIZE:9pt;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:green;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;// Create a catalog and add this XAP to it&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#2b91af;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;PackageCatalog&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt; catalog = &lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;PackageCatalog&lt;/SPAN&gt;&lt;FONT color=#000000&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;catalog.AddPackage(&lt;/FONT&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;Package&lt;/SPAN&gt;&lt;FONT color=#000000&gt;.Current);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:green;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;// Download additional XAPs and add them to the catalog&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#2b91af;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;Package&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;.DownloadPackageAsync(&lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;SPAN style="COLOR:#a31515;"&gt;"ConvolutionFilters.xap"&lt;/SPAN&gt;&lt;FONT color=#000000&gt;, &lt;/FONT&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;UriKind&lt;/SPAN&gt;&lt;FONT color=#000000&gt;.Relative),&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:12pt;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (s, p) =&amp;gt; catalog.AddPackage(p));&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:green;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;// Pass the catalog to the MEF and compose the parts&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:FR;mso-bidi-font-family:'Times New Roman';"&gt;var&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:FR;mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt; container = &lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;CompositionContainer&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(catalog);&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:12pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:FR;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;BACKGROUND:#dbe5f1;mso-layout-grid-align:none;mso-background-themecolor:accent1;mso-background-themetint:51;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-bidi-font-family:'Times New Roman';"&gt;&lt;FONT color=#000000&gt;container.ComposeParts(&lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;&lt;FONT color=#000000&gt;);&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;The first line creates a package catalog. The second&amp;nbsp;line adds the current package (MEFDemo.xap) to the catalog, which allows MEF to find the GrayscaleFilter class exported&amp;nbsp;from MEFDemo.xap. The third line&amp;nbsp;initiates an asynchronous download of ConvolutionFilters.xap and adds&amp;nbsp;it to the catalog when the download completes. This allows MEF to find the BlurFilter and EmbossFilter classes in&amp;nbsp;that XAP. Adding image filters to the application is as simple as&amp;nbsp;placing additional XAP files containing the filters in ClientBin and adding one line of code per XAP to download the&amp;nbsp;package and add it to the catalog. Once filters are exported and added to the catalog, buttons representing them&amp;nbsp;will automatically show up in the UI.&lt;/P&gt;
&lt;P&gt;This example demonstrates the basics of MEF, but it could go even further. For example, MEF allows you to attach metadata to parts, and to read that metadata without instantiating the parts. Rather than use a Label property to expose text for buttons, image filters could use metadata instead. Glenn Block of Microsoft discusses metadata and lazy loading of imported types in &lt;A title="MEF metadata and lazy loading" href="http://blogs.msdn.com/gblock/archive/2009/12/05/building-hello-mef-part-ii-metadata-and-why-being-lazy-is-a-good-thing.aspx" target=_blank&gt;Building Hello MEF Part II&lt;/A&gt;. Glenn's blog is a great source of information on MEF, as is&lt;A title="Jeremy Likness's blog" href="http://www.wintellect.com/CS/blogs/jlikness/default.aspx" target=_blank&gt; Jeremy Likness's blog&lt;/A&gt;, which is currently exploring the integration of MEF and Prism. In addition, Mike Taulty has posted a great series of &lt;A title="Silverlight MEF video tutorials" href="http://channel9.msdn.com/tags/learnMEFSL4/" target=_blank&gt;video tutorials on Silverlight MEF&lt;/A&gt; on Channel 9.&lt;/P&gt;
&lt;P&gt;MEF makes composability a first-class citizen in Silverlight, and it's going to be interesting to see how much of an impact it has on Silverlight design and development. One thing's for sure: there has never been a more exciting time to be a Silverlight programmer!&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11236" width="1" height="1"&gt;</description></item><item><title>Silverlight 4's New HTML Hosting Support</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/12/22/silverlight-4-s-new-html-hosting-support.aspx</link><pubDate>Tue, 22 Dec 2009 17:12:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11027</guid><dc:creator>jprosise</dc:creator><slash:comments>9</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/11027.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=11027</wfw:commentRss><description>&lt;P&gt;Another of the new capabilities that Silverlight 4 brings to the platform is the ability to host HTML content inside a Silverlight control. This support isn't limited to static HTML content; the content can be interactive and can include script. It can even be Flash content or content that includes other Silverlight controls.&lt;/P&gt;
&lt;P&gt;To host HTML content in Silverlight, you can use either a WebBrowser control or an HtmlBrush. One way to display HTML content is to fire up a WebBrowser control and point it to a URL:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;WebBrowser&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;="WebBrowserControl"&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt; Source&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;="http://www.bing.com" /&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Another way to do it is to call NavigateToString and pass a string of content to the WebBrowser control:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;WebBrowserControl.NavigateToString(&lt;SPAN style="COLOR:#a31515;"&gt;"&amp;lt;h1&amp;gt;Hello, Silverlight&amp;lt;/h1&amp;gt;"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;HTML hosting is not available to in-browser apps (it applies to out-of-browser applications only), and if an OOB lacks elevated permissions, it can only display content that comes from the same domain as the Silverlight application. However, you can use a little trick&amp;nbsp;to display cross-domain content in OOBs that run without elevated permissions—simply pass an IFRAME targeting the remote content to NavigateToString:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;WebBrowserControl.NavigateToString(&lt;SPAN style="COLOR:#a31515;"&gt;"&amp;lt;iframe src=\"http://www.bing.com\" style=\"width: 100%; height: 100%\"&amp;gt;&amp;lt;/iframe&amp;gt;"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;You can render HTML content with HtmlBrush, too. The following XAML snippet paints a Rectangle with content retrieved from Bing:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;WebBrowser&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="WebBrowserControl"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Source&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="http://www.bing.com" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Rectangle&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Rectangle.Fill&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;HtmlBrush&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; SourceName&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="WebBrowserControl" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Rectangle.Fill&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;Rectangle&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;One difference between WebBrowser and HtmlBrush is that the former displays "live" content, while the latter does not. Another difference is that HtmlBrush can have transforms applied to it, while WebBrowser cannot. For snazzy visual effects involving HTML content like the &lt;A title="HTML Puzzle Demo" href="http://www.silverlight.net/community/samples/silverlight-4-beta/html-puzzle/" target=_blank&gt;HTML puzzle demoed at the PDC&lt;/A&gt;, you'll probably find yourself using HtmlBrush. To display live, interactive content, you'll find WebBrowser more useful instead.&lt;/P&gt;
&lt;P&gt;One of the really cool things about the WebBrowser control is that&amp;nbsp;you&amp;nbsp;can&amp;nbsp;use its InvokeScript&amp;nbsp;method to&amp;nbsp;call JavaScript functions&amp;nbsp;in content&amp;nbsp;hosted by the&amp;nbsp;control. Conversely, JavaScript hosted&amp;nbsp;inside&amp;nbsp;a WebBrowser control can&amp;nbsp;use window.external.Notify to raise ScriptNotify events that can be handled in C#.&lt;/P&gt;
&lt;P&gt;To demonstrate why this might be useful (and how it works), I built a sample application that plays YouTube video using &lt;A title="YouTube Player Reference" href="http://code.google.com/apis/youtube/js_api_reference.html" target=_blank&gt;YouTube's API player&lt;/A&gt; and that uses the player's JavaScript API to drive the video playback from C#. The application runs as an OOB and requires elevated permissions:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:473px;HEIGHT:375px;" title="Silverlight YouTube Application" alt="Silverlight YouTube Application" src="http://www.wintellect.com/CS/photos/prosise/images/11011/473x375.aspx" width=473 height=375&gt;&lt;/P&gt;
&lt;P&gt;The video that plays in the application is one I uploaded to YouTube; it shows one of my RC jets getting a workout at a recent jet meet near Atlanta, GA. You can &lt;A title="WebBrowserDemo source code" href="http://www.wintellect.com/downloads/WebBrowserDemo.zip"&gt;download the app&lt;/A&gt; and install it on your PC to try it out. Don't forget that it has to run outside the browser.&lt;/P&gt;
&lt;P&gt;The application uses a WebBrowser control to host the YouTube player. The content is stored in a text file packaged as a loose file inside the XAP file. It's extracted from the XAP with Application.GetResourceStream and passed to the WebBrowser control via NavigateToString:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:green;FONT-SIZE:9pt;"&gt;// Read the HTML content from the XAP&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#2b91af;FONT-SIZE:9pt;"&gt;StreamResourceInfo&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; sri = &lt;SPAN style="COLOR:#2b91af;"&gt;Application&lt;/SPAN&gt;.GetResourceStream&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(&lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt;(&lt;SPAN style="COLOR:#a31515;"&gt;"YouTubePlayer.txt"&lt;/SPAN&gt;, &lt;SPAN style="COLOR:#2b91af;"&gt;UriKind&lt;/SPAN&gt;.Relative));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#2b91af;FONT-SIZE:9pt;"&gt;StreamReader&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; reader = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;StreamReader&lt;/SPAN&gt;(sri.Stream);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; content = reader.ReadToEnd();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:green;FONT-SIZE:9pt;"&gt;// Feed the content to the WebBrowser control&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;Player.NavigateToString(content);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The content itself includes a mix of HTML and JavaScript (mostly JavaScript). The script instantiates the YouTube player, forwards certain events from the&amp;nbsp;player to&amp;nbsp;the application&amp;nbsp;so they can be handled in C#, and provides a thin&amp;nbsp;JavaScript API layer that the application calls via InvokeScript&amp;nbsp;to control playback of the video. For example, when the user clicks the Play, Pause,&amp;nbsp;and Stop buttons, the application uses InvokeScript to call script funtions named play, pause, stop, and cue:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; OnPlay(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;RoutedEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Player.InvokeScript(&lt;SPAN style="COLOR:#a31515;"&gt;"play"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; OnPause(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;RoutedEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Player.InvokeScript(&lt;SPAN style="COLOR:#a31515;"&gt;"pause"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; OnStop(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;RoutedEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Player.InvokeScript(&lt;SPAN style="COLOR:#a31515;"&gt;"stop"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Player.InvokeScript(&lt;SPAN style="COLOR:#a31515;"&gt;"cue"&lt;/SPAN&gt;, &lt;SPAN style="COLOR:#a31515;"&gt;"df6x4U0u7iQ"&lt;/SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Similarly, when the state of the player changes—for example, when video playback begins or ends—script inside the control&amp;nbsp;uses window.external.Notify to&amp;nbsp;fire a ScriptNotify&amp;nbsp;event in&amp;nbsp;C# and activate a handler that updates the&amp;nbsp;visual states of the buttons:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;function&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; onYouTubePlayerStateChange(state) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:darkgreen;"&gt;// Ask the Silverlight control to update the YouTube video player&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;var&lt;/SPAN&gt; state = document.getElementById(&lt;SPAN style="COLOR:maroon;"&gt;"apiplayer"&lt;/SPAN&gt;).getPlayerState();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;window.external.Notify(&lt;SPAN style="COLOR:maroon;"&gt;'Update:'&lt;/SPAN&gt; + state.toString());&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The end result is an application that demonstrates key features of the WebBrowser control and does something interesting, too. Merry Christmas and Happy Holidays!&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11027" width="1" height="1"&gt;</description></item><item><title>Silverlight's Big Image Problem (and What You Can Do About It)</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/12/17/silverlight-s-big-image-problem-and-what-you-can-do-about-it.aspx</link><pubDate>Thu, 17 Dec 2009 17:46:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:10907</guid><dc:creator>jprosise</dc:creator><slash:comments>9</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/10907.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=10907</wfw:commentRss><description>&lt;P&gt;Quick: Can you spot the problem with these three lines of code?&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#2b91af;FONT-SIZE:9pt;"&gt;BitmapImage&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; bi = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;BitmapImage&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;bi.SetSource(stream);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;TheImage.Source = bi;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;These statements create an image from a stream of PNG or JPG image bits&amp;nbsp;and display the image by assigning it to a XAML Image object named TheImage. It's boilerplate code used to&amp;nbsp;display images read from the local file system or obtained from a service. And while there's nothing inherently wrong with the code itself, you'll want to think carefully before including it in any Silverlight application.&lt;/P&gt;
&lt;P&gt;I call it "Silverlight's Big Image Problem." Not the kind of&amp;nbsp;image problem&amp;nbsp;a movie star might suffer, but an inherent memory-consumption problem&amp;nbsp;when dealing with large bitmap images in Silverlight.&lt;/P&gt;
&lt;P&gt;The problem&amp;nbsp;manifests itself when you handle large images in large numbers. The &lt;A title="My Pictures Viewer" href="http://www.wintellect.com/CS/blogs/jprosise/archive/2009/12/16/silverlight-4-s-new-local-file-system-support.aspx" target=_blank&gt;My Pictures Viewer&lt;/A&gt; that I blogged about yesterday is a case in point. When a user&amp;nbsp;running the application selects a folder containing one or more image files, the viewer displays clickable thumbnail versions of the images. The problem is that because Silverlight's BitmapImage class consumes&amp;nbsp;massive amounts of memory (up to 40 or 50 MB &lt;EM&gt;per image&lt;/EM&gt; for a typical&amp;nbsp;2 to&amp;nbsp;3 MB digital photo),&amp;nbsp;you simply can't have too many instances extant at once. But to create a thumbnail, you first need&amp;nbsp;a BitmapImage that wraps the entire image. You might create&amp;nbsp;a thumbnail by assigning the BitmapImage to an Image object that measures just 100 by 100 pixels, but if the original image measures 4,000 by 4,000 pixels, it's the latter figure you pay the price for.&lt;/P&gt;
&lt;P&gt;To demonstrate, I wrote a simple test harness that you can easily duplicate yourself. I began with an app that&amp;nbsp;pops up&amp;nbsp;an OpenFileDialog and lets the user select an image file from his or her hard disk. Once the image file is selected, the application generates a thumbnail version of the image and adds it to the scene. Then it generates another thumbnail, and then another, and so on and so forth until Silverlight throws an out-of-memory exception. Here is the helper method that I initially used to generate the thumbnails:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt; CreateThumbnailImage(&lt;SPAN style="COLOR:#2b91af;"&gt;Stream&lt;/SPAN&gt; stream, &lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt; width)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;BitmapImage&lt;/SPAN&gt; bi = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;BitmapImage&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;bi.SetSource(stream);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;double&lt;/SPAN&gt; cx = width;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;double&lt;/SPAN&gt; cy = bi.PixelHeight * (cx / bi.PixelWidth);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt; image = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;image.Width = cx;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;image.Height = cy;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;image.Source = bi;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; image;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;And here's what happened when I ran the application and selected a 3,648 x 2,736 JPG&amp;nbsp;with a file size of 2.1 MB:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:466px;HEIGHT:375px;" title="Out of Memory" alt="Out of Memory" src="http://www.wintellect.com/CS/photos/prosise/images/10908/466x375.aspx" width=466 height=375&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So get this. The application created&amp;nbsp;26 thumbnails, each measuring a mere&amp;nbsp;100&amp;nbsp;x 75 pixels. But attempting to&amp;nbsp;create a&amp;nbsp;27th&amp;nbsp;thumbnail produced an out-of-memory exception. When the exception occurred, Task Manager showed that the process's working&amp;nbsp;set size had grown from 30 MB to&amp;nbsp;nearly 1.5 GB! It seems crazy on the surface, because a full-color 100 x 75 image should only require about 30K of memory. But it makes a lot more sense when you realize that underlying each thumbnail is a gigantic BitmapImage that retains the full fidelity of the 3,648 x 2,736&amp;nbsp;original.&lt;/P&gt;
&lt;P&gt;The obvious question is what do you do about it? Is there a way to efficiently create thumbnail images from streams of image bits in Silverlight? It's a question that pops up time and again in discussion forums and on message boards. And the short answer is yes, there is a way. But the answer probably isn't the one you expect.&lt;/P&gt;
&lt;P&gt;Developers commonly attempt a solution along these lines:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt; CreateThumbnailImage(&lt;SPAN style="COLOR:#2b91af;"&gt;Stream&lt;/SPAN&gt; stream, &lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt; width)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;BitmapImage&lt;/SPAN&gt; bi = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;BitmapImage&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;bi.SetSource(stream);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;double&lt;/SPAN&gt; cx = width;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;double&lt;/SPAN&gt; cy = bi.PixelHeight * (cx / bi.PixelWidth);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt; image = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;image.Source = bi;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;WriteableBitmap&lt;/SPAN&gt; wb = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;WriteableBitmap&lt;/SPAN&gt;((&lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt;)cx, (&lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt;)cy);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;ScaleTransform&lt;/SPAN&gt; transform = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;ScaleTransform&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;transform.ScaleX = cx / bi.PixelWidth;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;transform.ScaleY = cy / bi.PixelHeight;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;wb.Render(image, transform);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;wb.Invalidate();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt; thumbnail = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;thumbnail.Width = cx;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;thumbnail.Height = cy;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;thumbnail.Source = wb;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; thumbnail;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The basic idea is that&amp;nbsp;instead of creating a thumbnail by assigning a large BitmapImage to a small Image, you use WriteableBitmap.Render with a ScaleTransform to create a thumbnail, and then assign the&amp;nbsp;WriteableBitmap to an Image. Meanwhile, the BitmapImage and the Image it was temporarily assigned to—the one passed to WriteableBitmap.Render—go out of scope and are eventually picked up by the garbage collector.&lt;/P&gt;
&lt;P&gt;It works well in theory, but not so&amp;nbsp;well in practice, thanks to an undocumented behavior of WriteableBitmap. In fact, when I plugged the revised CreateThumbnailImage method into my test harness, the application ran out of memory just as quickly as before.&lt;/P&gt;
&lt;P&gt;The problem, it turns out, is that when you call WriteableBitmap.Render, WriteableBitmap apparently retains a reference to the XAML object passed in the first parameter. (I was stumped, too, until Jeffrey Richter and I did a little detective work and discovered what was happening under the hood. Jeffrey's my go-to guy for CLR issues, and I'm not sure I would have ever figured this out without him asking the right questions and suggesting solutions.) When CreateThumbnailImage returns an Image holding a reference to a WriteableBitmap, and the WriteableBitmap holds a reference to an Image, and the Image holds a reference to a BitmapImage, none of these objects gets garbage-collected. It seems that WriteableBitmap does nothing to solve the problem, especially given that there's no public method or property you can use to force the WriteableBitmap to release the reference.&lt;/P&gt;
&lt;P&gt;But all is not lost. You can make a &lt;EM&gt;copy&lt;/EM&gt; of the WriteableBitmap and assign it to the Image you return. And since you didn't call Render on the copy, it doesn't hold a reference to an Image that prevents the garbage collector from cleaning up the BitmapImage. Here is the fixed and final version of CreateThumbnailImage—this time, one that accomplishes what we set out to do:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt; CreateThumbnailImage(&lt;SPAN style="COLOR:#2b91af;"&gt;Stream&lt;/SPAN&gt; stream, &lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt; width)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;BitmapImage&lt;/SPAN&gt; bi = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;BitmapImage&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;bi.SetSource(stream);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;double&lt;/SPAN&gt; cx = width;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;double&lt;/SPAN&gt; cy = bi.PixelHeight * (cx / bi.PixelWidth);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt; image = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;image.Source = bi;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;WriteableBitmap&lt;/SPAN&gt; wb1 = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;WriteableBitmap&lt;/SPAN&gt;((&lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt;)cx, (&lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt;)cy);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;ScaleTransform&lt;/SPAN&gt; transform = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;ScaleTransform&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;transform.ScaleX = cx / bi.PixelWidth;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;transform.ScaleY = cy / bi.PixelHeight;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;wb1.Render(image, transform);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;wb1.Invalidate();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;WriteableBitmap&lt;/SPAN&gt; wb2 = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;WriteableBitmap&lt;/SPAN&gt;((&lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt;)cx, (&lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt;)cy);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;for&lt;/SPAN&gt; (&lt;SPAN style="COLOR:blue;"&gt;int&lt;/SPAN&gt; i = &lt;SPAN style="COLOR:brown;"&gt;0&lt;/SPAN&gt;; i &amp;lt; wb2.Pixels.Length; i++)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;wb2.Pixels[i] = wb1.Pixels[i];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;wb2.Invalidate();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt; thumbnail = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Image&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;thumbnail.Width = cx;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;thumbnail.Height = cy;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;thumbnail.Source = wb2;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; thumbnail;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When I plugged this implementation into my test harness,&amp;nbsp;it successfully created hundreds of thumbnails (and could have created hundreds, perhaps thousands, more) without significantly increasing the working set size—and without throwing out-of-memory exceptions.&lt;/P&gt;
&lt;P&gt;The moral is that you should be very careful about how you use BitmapImage in Silverlight. Even one of them can swell the working set size dramatically, but a couple dozen of them wrapping digital photographs is more than most PCs can handle. With a little care, however, you can scale down the impact of BitmapImage so that memory consumption is proportional to the sizes of the images you're displaying rather than the sizes of the original, unreduced&amp;nbsp;images. And that, in the end, is a handy arrow to have in your arsenal.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=10907" width="1" height="1"&gt;</description></item><item><title>Silverlight 4's New Local File System Support</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/12/16/silverlight-4-s-new-local-file-system-support.aspx</link><pubDate>Wed, 16 Dec 2009 19:56:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:10896</guid><dc:creator>jprosise</dc:creator><slash:comments>3</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/10896.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=10896</wfw:commentRss><description>&lt;P&gt;In my &lt;A title="Silverlight 4's New COM Automation Support" href="http://www.wintellect.com/CS/blogs/jprosise/archive/2009/12/14/silverlight-4-s-new-com-automation-support.aspx" target=_blank&gt;last blog post&lt;/A&gt;, I wrote about Silverlight 4 applications that run outside the browser with elevated permissions and their ability to&amp;nbsp;leverage COM automation servers on the host PC. Another privilege that applications with elevated permissions—also known as "trusted apps"—enjoy is the ability to access parts of the local file system without prompting the user with an OpenFileDialog or SaveFileDialog. This feature opens the door to types of applications that simply weren't possible with Silverlight 3.&lt;/P&gt;
&lt;P&gt;File access is limited to certain locations on the hard disk: primarily the "My" folders such as My Documents, My Pictures, and My Music. But within those constraints, file system access works pretty much the same in Silverlight as it does in .NET. You generally begin by calling Environment.GetFolderPath to acquire a path to the folder you wish to access.&amp;nbsp;The following code snippet enumerates the files in My Documents and stuffs the file names into a ListBox named FileList:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt; path = &lt;SPAN style="COLOR:#2b91af;"&gt;Environment&lt;/SPAN&gt;.GetFolderPath(&lt;SPAN style="COLOR:#2b91af;"&gt;Environment&lt;/SPAN&gt;.&lt;SPAN style="COLOR:#2b91af;"&gt;SpecialFolder&lt;/SPAN&gt;.MyDocuments);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;"&gt;foreach&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt; (&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt; file &lt;SPAN style="COLOR:blue;"&gt;in&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Directory&lt;/SPAN&gt;.EnumerateFiles(path))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FileList.Items.Add(file.Substring(file.LastIndexOf(&lt;SPAN style="COLOR:#a31515;"&gt;'\\'&lt;/SPAN&gt;) + &lt;SPAN style="COLOR:brown;"&gt;1&lt;/SPAN&gt;));&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Of course, you're not limited to enumerating files. You can open files, create files, and delete files, and you can do the same with directories. Plus, there's no limit on the amount of data you can write to the hard disk since the user&amp;nbsp;okayed the&amp;nbsp;elevated permissions when the application was installed.&lt;/P&gt;
&lt;P&gt;To demonstrate Silverlight file access in action, I wrote the My Pictures Viewer&amp;nbsp;pictured below. When started, it populates a TreeView control with all the folders&amp;nbsp;and subfolders in your My Pictures directory. You can expand and collapse branches of the tree, and when you select a folder, the right half of the window is populated with thumbnail images of all the PNGs and JPGs in that directory. You can then click a thumbnail to see a close-up of the picture in a child window. Click the picture (or the X in the child window's upper right corner) to close the child window&amp;nbsp;and continue&amp;nbsp;photo browsing.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:491px;HEIGHT:375px;" title="My Pictures Viewer" alt="My Pictures Viewer" src="http://www.wintellect.com/CS/photos/prosise/images/10894/491x375.aspx" width=491 height=375&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can &lt;A title="My Pictures Viewer source code" href="http://www.wintellect.com/downloads/fileaccessdemo.zip"&gt;download the source code&lt;/A&gt; and try it for yourself. Run the application once in your browser and right-click it to install it as an out-of-browser application. Once&amp;nbsp;the viewer is&amp;nbsp;running outside the browser, you can begin browsing pictures.&lt;/P&gt;
&lt;P&gt;The code to populate the TreeView with folder names looks like this:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;Application&lt;/SPAN&gt;.Current.HasElevatedPermissions)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt; path = &lt;SPAN style="COLOR:#2b91af;"&gt;Environment&lt;/SPAN&gt;.GetFolderPath(&lt;SPAN style="COLOR:#2b91af;"&gt;Environment&lt;/SPAN&gt;.&lt;SPAN style="COLOR:#2b91af;"&gt;SpecialFolder&lt;/SPAN&gt;.MyPictures);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;foreach&lt;/SPAN&gt; (&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt; dir &lt;SPAN style="COLOR:blue;"&gt;in&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Directory&lt;/SPAN&gt;.EnumerateDirectories(path))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;TreeViewItem&lt;/SPAN&gt; item = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;TreeViewItem&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;item.Header = dir.Substring(dir.LastIndexOf(&lt;SPAN style="COLOR:#a31515;"&gt;'\\'&lt;/SPAN&gt;) + &lt;SPAN style="COLOR:brown;"&gt;1&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;DirectoryTree.Items.Add(item);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ProcessFolder(dir, item.Items);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ProcessFolder is a recursive method that's implemented this way:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; ProcessFolder(&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt; path, &lt;SPAN style="COLOR:#2b91af;"&gt;ItemCollection&lt;/SPAN&gt; items)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;foreach&lt;/SPAN&gt; (&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt; dir &lt;SPAN style="COLOR:blue;"&gt;in&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Directory&lt;/SPAN&gt;.EnumerateDirectories(path))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;TreeViewItem&lt;/SPAN&gt; item = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;TreeViewItem&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;item.Header = dir.Substring(dir.LastIndexOf(&lt;SPAN style="COLOR:#a31515;"&gt;'\\'&lt;/SPAN&gt;) + &lt;SPAN style="COLOR:brown;"&gt;1&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;items.Add(item);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ProcessFolder(dir, item.Items);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Perhaps the most interesting part of the&amp;nbsp;source code is how it generates thumbnail images. It uses a BitmapImage to decode each image file. Then it assigns the BitmapImage to an Image object, uses WriteableBitmap.Render with a ScaleTransform to generate a thumbnail, and then, strangely enough, makes a copy of the WriteableBitmap in another WriteableBitmap. The second WriteableBitmap is the one that's ultimately assigned to an Image object to display the thumbnail on the screen.&lt;/P&gt;
&lt;P&gt;At first glance, this may appear gratuitous. Why not just assign the BitmapImage created from the image file directly to the Image that displays the thumbnail on the screen? Furthermore, why go to the trouble of making a copy of the WriteableBitmap? The short answer is that I did it this way to avoid out-of-memory exceptions, which are all too common in Silverlight applications that display digital photos. In fact, I'm planning a follow-up&amp;nbsp;blog post that covers this in detail. Stay tuned.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=10896" width="1" height="1"&gt;</description></item><item><title>Silverlight 4's New COM Automation Support</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/12/14/silverlight-4-s-new-com-automation-support.aspx</link><pubDate>Mon, 14 Dec 2009 16:47:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:10864</guid><dc:creator>jprosise</dc:creator><slash:comments>7</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/10864.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=10864</wfw:commentRss><description>&lt;P&gt;One of Silverlight 4's most compelling new features is support for out-of-browser applications with elevated permissions. An app running with elevated permissions can perform actions that a normal sandboxed application can not. For example, it can access the local file system, and on Windows boxes, it can interact with COM automation servers. This latter feature—also new to Silverlight 4—is the subject of this blog post.&lt;/P&gt;
&lt;P&gt;Silverlight 4's &lt;A title="ComAutomationFactory class" href="http://msdn.microsoft.com/en-us/library/system.windows.interop.comautomationfactory(VS.96).aspx" target=_blank&gt;ComAutomationFactory&lt;/A&gt; class provides an API for instantiating COM automation objects and for determining whether COM automation is available. (It's not available if the app is running without elevated permissions, or if it's running on a Macintosh.) And C# 4.0's new &lt;A title="C# dynamic keyword" href="http://blogs.msdn.com/cburrows/archive/2008/10/27/c-dynamic.aspx" target=_blank&gt;dynamic&lt;/A&gt; keyword provides a means for interacting with automation objects, which by definition are late-bound (meaning they expose features to clients using&amp;nbsp;an IDispatch interface).&lt;/P&gt;
&lt;P&gt;One practical example of what you can do with Silverlight's COM automation support is sending an e-mail message via Outlook. The following sample does just that:&lt;/P&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;"&gt;dynamic&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt; outlook = &lt;SPAN style="COLOR:#2b91af;"&gt;ComAutomationFactory&lt;/SPAN&gt;.CreateObject(&lt;SPAN style="COLOR:#a31515;"&gt;"Outlook.Application"&lt;/SPAN&gt;);&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;"&gt;dynamic&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt; mail = outlook.CreateItem(&lt;SPAN style="COLOR:brown;"&gt;0&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;mail.Recipients.Add(&lt;SPAN style="COLOR:#a31515;"&gt;"webmaster@contoso.com"&lt;/SPAN&gt;);&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;mail.Subject = &lt;SPAN style="COLOR:#a31515;"&gt;"Hello, Silverlight"&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;mail.Body = &lt;SPAN style="COLOR:#a31515;"&gt;"This message was sent from Silverlight 4"&lt;/SPAN&gt;;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;mail.Save();&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;mail.Send();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;The code is exceedingly simple and it works just fine if Outlook is installed on the client and the user OKs the prompt from Outlook warning that an external application is attempting to use it. For added robustness, you should catch the System.Exception thrown from ComAutomationFactory.CreateObject if object creation fails. That's exactly what will happen if Outlook isn't installed on the host PC.&lt;/P&gt;
&lt;P&gt;For fun, I wrote a &lt;A title="SpeechDemo Source Code" href="http://www.wintellect.com/downloads/speechdemo.zip"&gt;downloadable demo&lt;/A&gt; that uses Microsoft's speech automation server to verbalize error messages. (I definitely wouldn't recommend using this in a production application because it is quite annoying, but it's just novel enough to get a few laughs from your friends.) Here's how the application looks when it's running:&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:500px;HEIGHT:283px;" title="SpeechDemo Application" alt="SpeechDemo Application" src="http://www.wintellect.com/CS/photos/prosise/images/10863/500x283.aspx" width=500 height=283&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you click a button while the application is running inside the browser or outside the browser but without elevated permissions, the error message encapsulated in the ensuing exception is displayed in a message box. However, if you do the same with the application running with elevated permissions outside the browser, a friendly voice reads the error message out loud. Nothing calls attention to a null reference exception like a female voice informing you "Object reference not set to an instance of&amp;nbsp;an object." For added fun, you could append "I'm sorry, Dave; I'm afraid I can't do that" to every error message.&lt;/P&gt;
&lt;P&gt;When the application starts up, it attempts to instantiate the speech server and assign a reference to a local field:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;ComAutomationFactory&lt;/SPAN&gt;.IsAvailable)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;try&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;_speech = &lt;SPAN style="COLOR:#2b91af;"&gt;ComAutomationFactory&lt;/SPAN&gt;.CreateObject(&lt;SPAN style="COLOR:#a31515;"&gt;"Sapi.SpVoice"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;catch&lt;/SPAN&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;Exception&lt;/SPAN&gt;) { }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then, when an exception is thrown, it forwards the exception to a helper method named NotifyException, which verbalizes the error message if possible or displays it in a message box if not:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-ansi-language:FR;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-ansi-language:FR;"&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; NotifyException(&lt;SPAN style="COLOR:#2b91af;"&gt;Exception&lt;/SPAN&gt; ex)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt; (_speech != &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_speech.Speak(ex.Message);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;else&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;MessageBox&lt;/SPAN&gt;.Show(ex.Message);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;If you install the application locally and OK its request for elevated permissions, you should hear (rather than see) the error messages. How's that for an error UI? :-)&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=10864" width="1" height="1"&gt;</description></item><item><title>Silverlight 4's New Commanding Support</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/12/01/silverlight-4-s-new-command-support.aspx</link><pubDate>Tue, 01 Dec 2009 02:33:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:10582</guid><dc:creator>jprosise</dc:creator><slash:comments>5</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/10582.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=10582</wfw:commentRss><description>&lt;P&gt;One of the exciting new features in the Silverlight 4 beta is a pair of properties added to the ButtonBase and Hyperlink classes named Command and CommandParameter. These properties represent the first real support in Silverlight for commanding, which is primarily beneficial to to Model-View-ViewModel (MVVM) applications. MVVM has long been popular among WPF developers and is rapidly gaining popularity with Silverlight developers. And now, thanks to commanding, Silverlight comes a little closer to supporting pure MVVM implementations without help from auxiliary frameworks such as Prism.&lt;/P&gt;
&lt;P&gt;To demonstrate Silverlight 4's new commanding infrastructure, I took a sample that I originally wrote to show how to consume RSS in Silverlight. You type an RSS URL into a TextBox and click&amp;nbsp;the "View"&amp;nbsp;button. The app uses a WebClient to fetch the RSS feed,&amp;nbsp;and then renders the feed items into a ListBox using data binding:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:520px;HEIGHT:480px;" title=CommandDemo alt=CommandDemo src="http://www.wintellect.com/CS/photos/prosise/images/10581/520x480.aspx" width=520 height=480&gt;&lt;/P&gt;
&lt;P&gt;I then rewrote the app as an MVVM app and took advantage of commanding to move all the logic that used to appear in the code-behind to the view-model. You can &lt;A title="CommandDemo Source Code" href="http://www.wintellect.com/downloads/CommandDemo.zip"&gt;download the source code&lt;/A&gt; to see how it works. Here are some of the highlights.&lt;/P&gt;
&lt;P&gt;First, my model is implemented in the RssModel class. RssModel exposes a method named GetRssFeedAsync that&amp;nbsp;the view-model&amp;nbsp;can use to fetch a live&amp;nbsp;RSS feed. It also implements a couple of events: an RssLoadComplete event that's fired following a successful RSS download, and an RssLoadError event that's fired if an RSS download fails. These methods and events are part of an interface named&amp;nbsp;IRssProvider, which you could mock in a unit-testing scenario to provide RSS content from a local source rather than a network source.&lt;/P&gt;
&lt;P&gt;Second, my view-model is implemented in a class named RssViewModel. Part of the intent of the view-model is to provide properties that the view can bind to to populate controls with data. To that end, RssViewModel exposes a string property named&amp;nbsp;RssUri which can be bound to the TextBox in the view, and an ObservableCollection property named RssFeed that can be bound to the ListBox. It also implements a read-only&amp;nbsp;ICommand property named GetRssFeed that returns an instance of a class named GetRssFeedCommand. This is where commanding enters the picture in Silverlight 4.&lt;/P&gt;
&lt;P&gt;Open the code-behind file for the view (RssView.xaml.cs) and you'll&amp;nbsp;see that it contains no code other than a constructor that calls InitializeComponent. In Silverlight 3,&amp;nbsp;I would have had to include a handler for the button's Click command that calls into the view-model to fetch the RSS feed and stuff the RSS items into the RssFeed property. Thanks to the new commanding infrastructure in Silverlight 4, I was able to&amp;nbsp;accomplish this declaratively. First, the view declares an instance of the view-model:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;UserControl.Resources&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;local&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;RssViewModel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;="RssViewModel" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;UserControl.Resources&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Then it binds the view-model to the DataContext property of the Grid that&amp;nbsp;contains the TextBox, ListBox, and Button:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;="LayoutRoot"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; Background&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;="#FFF4B3FA"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; DataContext&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;StaticResource&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; RssViewModel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;}"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The TextBox's Text property and the ListBox's ItemsSource property are bound to the view-model's RssUri and RssFeed properties:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;TextBox&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; RssUri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; Mode&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;=TwoWay}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;... /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;ListBox&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; ItemsSource&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; RssFeed&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;... &amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;More importantly, the Button is bound to the view-model this way:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; Command&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; GetRssFeed&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; CommandParameter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; RssUri&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;... /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Observe that the Button declaration doesn't contain a Click attribute; in other words, the Click event isn't bound to an event handler in the code-behind. Instead, when the button is clicked, it invokes the command exposed through the view-model's GetRssFeed property. That command is implemented this way:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt; &lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;GetRssFeedCommand&lt;/SPAN&gt; : &lt;SPAN style="COLOR:#2b91af;"&gt;ICommand&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;IRssProvider&lt;/SPAN&gt; _model;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;ObservableCollection&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR:#2b91af;"&gt;SyndicationItem&lt;/SPAN&gt;&amp;gt; _feed;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; GetRssFeedCommand(&lt;SPAN style="COLOR:#2b91af;"&gt;ObservableCollection&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR:#2b91af;"&gt;SyndicationItem&lt;/SPAN&gt;&amp;gt; feed, &lt;SPAN style="COLOR:#2b91af;"&gt;IRssProvider&lt;/SPAN&gt; model)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_feed = feed;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_model = model;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;event&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;EventHandler&lt;/SPAN&gt; CanExecuteChanged;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;bool&lt;/SPAN&gt; CanExecute(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; parameter)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;true&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Execute(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; parameter)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_model.RssLoadComplete += &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;EventHandler&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR:#2b91af;"&gt;RssEventArgs&lt;/SPAN&gt;&amp;gt;(OnRssLoadComplete);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_model.GetRssFeedAsync(&lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt;((&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt;)parameter, &lt;SPAN style="COLOR:#2b91af;"&gt;UriKind&lt;/SPAN&gt;.Absolute));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; OnRssLoadComplete(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;RssEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt; (_feed != &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;) &lt;SPAN style="COLOR:green;"&gt;// Just to be sure&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_feed.Clear();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;using&lt;/SPAN&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;XmlReader&lt;/SPAN&gt; reader = &lt;SPAN style="COLOR:#2b91af;"&gt;XmlReader&lt;/SPAN&gt;.Create(e.Result))&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;SyndicationFeed&lt;/SPAN&gt; feed = &lt;SPAN style="COLOR:#2b91af;"&gt;SyndicationFeed&lt;/SPAN&gt;.Load(reader);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;foreach&lt;/SPAN&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;SyndicationItem&lt;/SPAN&gt; item &lt;SPAN style="COLOR:blue;"&gt;in&lt;/SPAN&gt; feed.Items)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_feed.Add(item);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;FONT-SIZE:10pt;mso-bidi-language:TH;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;At run-time, invoking the command causes its Execute method to be called, and the command responds by using the model to fetch the RSS feed and parsing the&amp;nbsp;feed items into the view-model's RssFeed property. Thanks to the data binding between that property and the ListBox, and because RssFeed is an ObservableCollection, the items promptly appear in the ListBox.&lt;/P&gt;
&lt;P&gt;The binding between the Button and the view-model's GetRssFeed property is possible because of the Command property added to the Button class (actually, to ButtonBase) in Silverlight 4. In addition, Button now contains a CommandParameter property that can be used to pass a parameter to the command. In this example, CommandParameter is bound to the view-model's RssUri property, which ensures that the URL typed by the user is available to the command when the command is invoked.&lt;/P&gt;
&lt;P&gt;The upshot of all this is that Command and CommandParameter enabled me to&amp;nbsp;build a pure MVVM implementation that wasn't possible in Silverlight 3 without outside help. It's not the final word in commanding—after all, Silverlight still lacks commanding support in other controls such as ListBox—but it's a step in the right direction. And it's indicative of the fact that the Silverlight team is listening to developers, because commanding, along with printing and support for webcams and other devices,&amp;nbsp;is one of the features that developers&amp;nbsp;lobbied for the most.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=10582" width="1" height="1"&gt;</description></item><item><title>Silverlight 4's New Drag-and-Drop Support</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/11/26/silverlight-4-s-new-drag-and-drop-support.aspx</link><pubDate>Thu, 26 Nov 2009 16:26:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:10497</guid><dc:creator>jprosise</dc:creator><slash:comments>4</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/10497.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=10497</wfw:commentRss><description>&lt;P&gt;Another new feature of Silverlight 4&amp;nbsp;that will enable developers to build richer UIs is drag-and-drop file support. In Silverlight 3, you had to pop up an OpenFileDialog to allow the user to select files from the local file system and make them available to a Silverlight application. In Silverlight 4, OpenFileDialog still works, but there is an alternative: let the user drag files from the operating system shell and drop them into a Silverlight application. The app can then consume the files in much the same way that it consumes files offered through OpenFileDialog.&lt;/P&gt;
&lt;P&gt;To demonstrate the mechanics of Silverlight drop targeting, I built a sample that lets you open image files using drag-and-drop. Here's what the app looked like after I grabbed a bunch of JPEGs from My Pictures and dropped them into the running application:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:494px;HEIGHT:375px;" title=DragDropDemo alt=DragDropDemo src="http://www.wintellect.com/CS/photos/prosise/images/10501/460x375.aspx" width=494 height=375&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;At startup,&amp;nbsp;the application&amp;nbsp;registers a handler for the new Drop event attached to the UIElement class, making the LayoutRoot Grid a drop target:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:green;FONT-SIZE:9pt;"&gt;// Register a handler for Drop events&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;LayoutRoot.Drop += &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;DragEventHandler&lt;/SPAN&gt;(LayoutRoot_Drop);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;When one or more files are dropped into the Grid, LayoutRoot_Drop inserts the FileInfo objects representing the dropped files into a System.Collections.Generic.Queue:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:green;FONT-SIZE:9pt;"&gt;// Queue the FileInfo objects representing dropped files&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; (e.Data != &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;FileInfo&lt;/SPAN&gt;[] files = e.Data.GetData(&lt;SPAN style="COLOR:#2b91af;"&gt;DataFormats&lt;/SPAN&gt;.FileDrop) &lt;SPAN style="COLOR:blue;"&gt;as&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;FileInfo&lt;/SPAN&gt;[];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;foreach&lt;/SPAN&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;FileInfo&lt;/SPAN&gt; fi &lt;SPAN style="COLOR:blue;"&gt;in&lt;/SPAN&gt; files)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_files.Enqueue(fi);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Later, a CompositionTarget.Rendering event handler dequeues the FileInfo objects and processes them one at a time (one FileInfo object per CompositionTarget.Rendering event), turning them into XAML Image objects with Borders around them:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; (_files.Count != &lt;SPAN style="COLOR:brown;"&gt;0&lt;/SPAN&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;// Create a photo&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;FileInfo&lt;/SPAN&gt; fi = _files.Dequeue();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CreatePhoto(fi);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The reason for using CompositionTarget.Rendering is that images have to be decoded and created on the application's UI thread. By processing one FileInfo object and returning, the event handler hands control back to Silverlight so the rendering engine can render the photo that was just added to the scene.&lt;/P&gt;
&lt;P&gt;To enable applications to support drag-and-drop,&amp;nbsp;Silverlight 4 adds four new events named DragEnter, DragOver, Drop, and DragLeave to the UIElement class. Therefore, any visual element can be a drop target. In non-Silverlight applications, you can use the IDataObject passed to these event handlers to determine what type of data is being offered. In Silverlight, however, you can only query the IDataObject in handlers for Drop events. Still, you could use the other events to perform drop-target highlighting or other UI-related chores when a cursor carrying a payload enters a drop target.&lt;/P&gt;
&lt;P&gt;Another facet of the drag-and-drop story is the new UIElement.AllowDrop property. In order for an object to accept drops, this property must be set to true. That's why my sample application declares the LayoutRoot grid this way:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="LayoutRoot"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; AllowDrop&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="True"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;You can &lt;A title="dragDropDemo Source Code" href="http://www.wintellect.com/downloads/dragdropdemo.zip"&gt;download the source code&lt;/A&gt; and try it for yourself.&amp;nbsp;Have fun dropping files!&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=10497" width="1" height="1"&gt;</description></item><item><title>Silverlight 4's New Clipboard Support</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/11/25/silverlight-4-s-new-clipboard-support.aspx</link><pubDate>Wed, 25 Nov 2009 15:58:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:10455</guid><dc:creator>jprosise</dc:creator><slash:comments>2</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/10455.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=10455</wfw:commentRss><description>&lt;P&gt;Among the many new features coming in Silverlight 4 is clipboard support. A new class named System.Windows.Clipboard provides three static methods for accessing the system clipboard:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;GetText&lt;/EM&gt;, which retrieves text from the clipboard&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;SetText&lt;/EM&gt;, which places text&amp;nbsp;on the clipboard&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;ContainsText&lt;/EM&gt;, which&amp;nbsp;indicates whether the clipboard currently contains text&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In the Silverlight 4 beta, only Unicode text can be retrieved from the clipboard or added to it. Microsoft hasn't said whether the final release will support additional clipboard formats, but one can always hope.&lt;/P&gt;
&lt;P&gt;To demonstrate, I built a sample app that features a Paste button for pasting text from the clipboard into a TextBlock. It uses a DispatcherTimer to enable or disable the Paste button once&amp;nbsp;a second based on the clipboard's contents (specifically, whether or not the clipboard currently contains Unicode text). Here's the XAML:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="LayoutRoot"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Grid.Background&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;LinearGradientBrush&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; StartPoint&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0.5,0.0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; EndPoint&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0.5,1.0"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;GradientStop&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Offset&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0.0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Color&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Black" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;GradientStop&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Offset&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="1.0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Color&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="#FF404040" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;LinearGradientBrush&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Grid.Background&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Orientation&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Vertical"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="PasteButton"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="100"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="50"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="32"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Content&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Paste"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; IsEnabled&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="False"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Click&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Button_Click" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Output"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="White"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; FontSize&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="20"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;TextWrapping&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Wrap"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; HorizontalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Center"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Center"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="32,0,32,32" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;And here's the code-behind:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; &lt;SPAN style="COLOR:blue;"&gt;partial&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;MainPage&lt;/SPAN&gt; : &lt;SPAN style="COLOR:#2b91af;"&gt;UserControl&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;DispatcherTimer&lt;/SPAN&gt; _timer;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; MainPage()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;InitializeComponent();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_timer = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;DispatcherTimer&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_timer.Interval = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;TimeSpan&lt;/SPAN&gt;(&lt;SPAN style="COLOR:brown;"&gt;0&lt;/SPAN&gt;, &lt;SPAN style="COLOR:brown;"&gt;0&lt;/SPAN&gt;, &lt;SPAN style="COLOR:brown;"&gt;1&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;_timer.Tick += &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;EventHandler&lt;/SPAN&gt;(_timer_Tick);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_timer.Start();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; _timer_Tick(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;EventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PasteButton.IsEnabled = &lt;SPAN style="COLOR:#2b91af;"&gt;Clipboard&lt;/SPAN&gt;.ContainsText();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Button_Click(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;RoutedEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;try&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Output.Text = &lt;SPAN style="COLOR:#2b91af;"&gt;Clipboard&lt;/SPAN&gt;.GetText();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;catch&lt;/SPAN&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;SecurityException&lt;/SPAN&gt; ex)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;MessageBox&lt;/SPAN&gt;.Show(ex.Message);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;If the application is running in the browser or if it's running outside the browser without elevated permissions, clicking the&amp;nbsp;Paste button produces the following confirmation dialog:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:411px;HEIGHT:197px;" title="Clipboard Permission" alt="Clipboard Permission" src="http://www.wintellect.com/CS/photos/prosise/images/10453/original.aspx" width=411 height=197&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If the user answers yes, the application is permitted to access the clipboard. Here's the result when I pasted in the text of the Gettysburg Address:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:447px;HEIGHT:375px;" title="Gettysburg Address" alt="Gettysburg Address" src="http://www.wintellect.com/CS/photos/prosise/images/10454/447x375.aspx" width=447 height=375&gt;&lt;/P&gt;
&lt;P&gt;If the user denies the application clipboard access, then GetText produces a SecurityException. That's why I wrapped the call to GetText in a try/catch block—just in case. On a positive note, if the user answers yes when asked if the application can access the clipboard, the answer is cached for the duration of the session and the prompt&amp;nbsp;isn't displayed&amp;nbsp;again.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=10455" width="1" height="1"&gt;</description></item><item><title>Silverlight 4's Improved Element Data Binding</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/11/25/silverlight-4-s-improved-element-data-binding.aspx</link><pubDate>Wed, 25 Nov 2009 15:03:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:10449</guid><dc:creator>jprosise</dc:creator><slash:comments>3</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/10449.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=10449</wfw:commentRss><description>&lt;P&gt;Earlier this year, I wrote about Silverlight 3's new &lt;A title="Element Data Binding in Silverlight 3" href="http://www.wintellect.com/CS/blogs/jprosise/archive/2009/03/27/silverlight-3-s-new-element-data-binding.aspx" target=_blank&gt;element data binding feature&lt;/A&gt;, which enables XAML elements to be bound together declaratively. I also bemoaned the fact that the target of an element-to-element data binding had to be a Framework-element derivative. Good news! Silverlight 4 fixes this by extending element data binding to DependencyObject derivatives.&lt;/P&gt;
&lt;P&gt;My Silverlight 3 element data binding sample was built from the following XAML:&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="LayoutRoot"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Background&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="White"&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Border&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Border.Projection&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;PlaneProjection&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="Projector" /&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Border.Projection&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;user&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;PenguinUserControl&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; /&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Border&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Orientation&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="Vertical"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="Top"&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Slider&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Minimum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Maximum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="360"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; RotationX&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; ElementName&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;=Projector,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Mode&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;=TwoWay}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="400"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="Top"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="0,20,0,0" /&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Slider&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Minimum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Maximum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="360"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; RotationY&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; ElementName&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;=Projector,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Mode&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;=TwoWay}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="400"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="Top"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="0,20,0,0" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Slider&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Minimum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Maximum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="360"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; RotationZ&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; ElementName&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;=Projector,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Mode&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;=TwoWay}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="400"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="Top"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;="0,20,0,0" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;The result was a penguin that could be rotated about the X, Y, and Z axes using Sliders:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:400px;HEIGHT:375px;" title="Element Data Binding" alt="Element Data Binding" src="http://www.wintellect.com/CS/photos/prosise/images/7765/400x375.aspx" width=400 height=375&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When I wrote this demo, I wanted to attach the&amp;nbsp;{Binding} expressions&amp;nbsp;to the PlaneProjection, not the Slider controls. But Silverlight 3 didn't allow this because PlaneProjection isn't a FrameworkElement. My recourse was to apply the bindings to the Sliders themselves and to use 2-way bindings to&amp;nbsp;sync the Sliders' Value properties with the PlaneProjection's RotationX, RotationY, and RotationZ properties.&lt;/P&gt;
&lt;P&gt;Such shenanigans are no longer necessary in Silverlight 4, which supports the following syntax:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="LayoutRoot"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Background&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="White"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;user&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;PenguinUserControl&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;user&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;PenguinUserControl.Projection&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;PlaneProjection&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;RotationX&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; ElementName&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;=SliderX}"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;RotationY&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; ElementName&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;=SliderY}"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;RotationZ&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; ElementName&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;=SliderZ}" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;user&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;PenguinUserControl.Projection&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;user&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;PenguinUserControl&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;mso-ansi-language:FR;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Orientation&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Vertical"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Top"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Slider&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="SliderX"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Minimum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Maximum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="360"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="400"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Top"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0,20,0,0" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Slider&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="SliderY"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Minimum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Maximum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="360"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="400"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Top"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0,20,0,0" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Slider&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="SliderZ"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Minimum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Maximum&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="360"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="400"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Top"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0,20,0,0" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also note that you can now apply a PlaneProjection directly to a user control. Silverlight 3 didn't support this, which explains why in the Silverlight 3 version of this demo, I enclosed the user control in a Border and applied the PlaneProjection to the Border. This is yet another new feature of Silverlight 4 that further narrows the gap between Silverlight and WPF.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=10449" width="1" height="1"&gt;</description></item><item><title>Silverlight 4's New Implicit Styles</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/11/25/silverlight-4-s-new-implicit-styles.aspx</link><pubDate>Wed, 25 Nov 2009 14:25:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:10448</guid><dc:creator>jprosise</dc:creator><slash:comments>2</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/10448.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=10448</wfw:commentRss><description>&lt;P&gt;Silverlight 4 introduces a boatload of big-ticket features such as printing support, webcam and microphone support, and support for elevated trust in out-of-browser applications. It's also chock full of minor improvements that fly lower under the radar. One of my favorite features in this category is support for implicit styles.&lt;/P&gt;
&lt;P&gt;In Silverlight 3, there was no built-in way to define a style and have it automatically applied to all controls of a specified type. Sure, you could use the Silverlight Toolkit's implicit style manager to apply default styles, but the fact remained that the run-time itself lacked support for the same.&lt;/P&gt;
&lt;P&gt;In Silverlight 4, you can define an implicit style by omitting the x:Key attribute from the &amp;lt;Style&amp;gt; element. Unless otherwise specified, that style will be applied to all elements of the type specified by the style's TargetType. Here's an example. The following XAML declares three buttons and styles them with an implicit style that rotates them 15 degrees:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UserControl.Resources&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; TargetType&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Button"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Property&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="RenderTransformOrigin"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0.5,0.5" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Property&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="RenderTransform"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;RotateTransform&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Angle&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="15" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UserControl.Resources&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="LayoutRoot"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Background&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="White"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Orientation&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Horizontal"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; HorizontalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Center"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="120"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="60"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Button1"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="8" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="120"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="60"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Button2"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="8" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="120"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="60"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Button3"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="8"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;Here's the result:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:412px;HEIGHT:102px;" title="Implicit Styles (1)" alt="Implicit Styles (1)" src="http://www.wintellect.com/CS/photos/prosise/images/10446/original.aspx" width=412 height=102&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Of course, you might want to use implicit styles but exclude certain controls from being implicitly styled. You can do that by setting a control's Style property to x:Null:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UserControl.Resources&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; TargetType&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Button"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Property&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="RenderTransformOrigin"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="0.5,0.5" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Property&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="RenderTransform"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;RotateTransform&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Angle&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="15" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;UserControl.Resources&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="LayoutRoot"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Background&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="White"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Orientation&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Horizontal"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; HorizontalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Center"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="120"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="60"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Button1"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="8" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="120"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="60"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Button2"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="8" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="120"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="60"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="Button3"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="8"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:red;FONT-SIZE:9pt;"&gt; Style&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;x&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Null&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;}" /&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:#a31515;FONT-SIZE:9pt;"&gt;Grid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;COLOR:blue;FONT-SIZE:9pt;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;And here is the resulting UI:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:411px;HEIGHT:100px;" title="Implicit Styles (2)" alt="Implicit Styles (2)" src="http://www.wintellect.com/CS/photos/prosise/images/10447/original.aspx" width=411 height=100&gt;&lt;/P&gt;
&lt;P&gt;Implicit styles are a welcome addition to Silverlight 4, and I'm confident that developers will find this feature to be as useful in Silverlight as they&amp;nbsp;have already found it to be in WPF.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=10448" width="1" height="1"&gt;</description></item><item><title>Silverlight 3's New Application Extension Services</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/11/06/silverlight-3-s-new-application-extension-services.aspx</link><pubDate>Fri, 06 Nov 2009 14:04:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:9958</guid><dc:creator>jprosise</dc:creator><slash:comments>7</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/9958.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=9958</wfw:commentRss><description>&lt;P&gt;Another feature of Silverlight 3 that has flown under the radar since the product's release is &lt;EM&gt;application extension services&lt;/EM&gt;, or &lt;EM&gt;application services&lt;/EM&gt; for short. Application services are client-side services that start when the application starts and end when the application ends. In other words, their lifetime parallels that of the application itself.&amp;nbsp;An application service is an excellent deployment vehicle for features that in Silverlight 2 might&amp;nbsp;have been added to the Application-derived class in App.xaml.cs.&lt;/P&gt;
&lt;P&gt;Writing an application service is a simple matter of building a class that implements Silverlight's IApplicationService interface. That interface has just two methods: StartService and StopService, which are called when the service starts and when it ends. In practice, StartService is called immediately before the Application.Startup event fires, and StopService is called right after the Application.Exit event fires. A skeletal service implementation appears below. Note the&amp;nbsp;static property named Current, which provides a simple means for application code to acquire a reference to a running service instance:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;SimpleService&lt;/SPAN&gt; : &lt;SPAN style="COLOR:#2b91af;"&gt;IApplicationService&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;SimpleService&lt;/SPAN&gt; _current = &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;SimpleService&lt;/SPAN&gt; Current&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;get&lt;/SPAN&gt; { &lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; _current; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;// TODO: Implement other class members here&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; StartService(&lt;SPAN style="COLOR:#2b91af;"&gt;ApplicationServiceContext&lt;/SPAN&gt; context)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_current = &lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; StopService()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_current = &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;}&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Although not shown in the example above, a service can optionally implement the IApplicationLifetimeAware interface, too. This interface adds four methods named Starting, Started, Exiting, and Exited. Calls to these methods bracket calls to StartService and StopService and provide an application service with additional opportunities to perform any necessary initialization or cleanup chores.&lt;/P&gt;
&lt;P&gt;Application services are loaded by declaring instances of them in App.xaml:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;mso-ansi-language:FR;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;mso-ansi-language:FR;"&gt;Application&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;mso-ansi-language:FR;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-no-proof:yes;mso-ansi-language:FR;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;mso-ansi-language:FR;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;mso-ansi-language:FR;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;x&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;x&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;Class&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;="SimpleServiceDemo.App"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;local&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;="clr-namespace:SimpleServiceDemo"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Application.Resources&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Application.Resources&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Application.ApplicationLifetimeObjects&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;local&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;SimpleService&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;Application.ApplicationLifetimeObjects&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-no-proof:yes;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;Application&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;mso-fareast-font-family:Calibri;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-language:EN-US;mso-fareast-theme-font:minor-latin;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;ApplicationLifetimeObjects is a new property added to the Application class in Silverlight 3. You can use it to register application services as shown above, and also to enumerate loaded services at run-time.&lt;/P&gt;
&lt;P&gt;So, the big question: why would you ever&amp;nbsp;write one of these things? To demonstrate, I built an application service named AssemblyLoaderService that provides a useful service to Silverlight applications that rely on external assemblies: asynchronous assembly loading. Rather than swell the size of your XAP file by packing it with extra assemblies, you can register those assemblies with the assembly loader service when the application starts up and allow&amp;nbsp;the service to&amp;nbsp;download them in the background and load them into the app domain. It's an easy way to deploy applications that utilize multiple assemblies without increasing the size of the XAP and&amp;nbsp;delaying the startup of the entire application. Done properly, it also allows you to avoid jumping through some of the hoops I described in an earlier blog post on &lt;A title="Dynamic Assembly Loading" href="http://www.wintellect.com/CS/blogs/jprosise/archive/2008/10/22/cool-silverlight-trick-3.aspx" target=_blank&gt;dynamic assembly loading in Silverlight&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;You can &lt;A title=AssemblyLoaderServiceDemo href="http://www.wintellect.com/downloads/assemblyloaderservicedemo.zip"&gt;download the source code&lt;/A&gt; for AssemblyLoaderService (and a sample app that uses it) from Wintellect's Web site. When you run the application, you'll initially see a blank page. After a short time (&lt;EM&gt;very&lt;/EM&gt; short since you're running against a local Web server), a button will appear. Clicking the button removes the button from the page and replaces it with a dynamically created&amp;nbsp;Calendar control.&lt;/P&gt;
&lt;P&gt;It's what happens on the inside that's interesting. The Calendar class lives in System.Windows.Controls.dll, which isn't part of the core Silverlight run-time. To create a Calendar control, you must include a reference to System.Windows.Controls.dll in your project. Normally, that increases the size of&amp;nbsp;your XAP file.&amp;nbsp;Here it doesn't, because after adding the assembly reference to the project, I changed the assembly's Copy Local setting from true to false. This satisfies the compiler but prevents the assembly from being packaged in the XAP file.&lt;/P&gt;
&lt;P&gt;The following statements in MainPage.xaml.cs initiate an asynchronous download of System.Windows.Controls.dll from the server's ClientBin folder:&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#2b91af;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;AssemblyLoaderService&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt; als = &lt;SPAN style="COLOR:#2b91af;"&gt;AssemblyLoaderService&lt;/SPAN&gt;.Current;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-no-proof:yes;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt; (als != &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;) &lt;SPAN style="COLOR:green;"&gt;// Just to be sure&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;als.AssemblyLoaded +=&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;EventHandler&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR:#2b91af;"&gt;AssemblyLoadedEventArgs&lt;/SPAN&gt;&amp;gt;(OnAssemblyLoaded);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;als.AssemblyLoadedError +=&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;EventHandler&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR:#2b91af;"&gt;AssemblyLoadedErrorEventArgs&lt;/SPAN&gt;&amp;gt;(OnAssemblyLoadedError);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;als.LoadAssemblyAsync(&lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt;(&lt;SPAN style="COLOR:#a31515;"&gt;"System.Windows.Controls.dll"&lt;/SPAN&gt;, &lt;SPAN style="COLOR:#2b91af;"&gt;UriKind&lt;/SPAN&gt;.Relative));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;mso-layout-grid-align:none;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:9pt;mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Before calling the service's LoadAssemblyAsync method to start the download, MainPage registers handlers for the service's AssemblyLoaded and AssemblyLoadedError events, which notify interested parties when an assembly is successfully loaded, or when&amp;nbsp;an error prevents an assembly from being loaded. MainPage's AssemblyLoaded&amp;nbsp;event handler&amp;nbsp;displays the "Create Calendar Control" button&amp;nbsp;to the user, so there's no chance that the application will attempt to create a Calendar control before the required assembly has been loaded into the app domain.&lt;/P&gt;
&lt;P&gt;The service is implemented in the AssemblyLoaderService class. Look through the source code and you'll see that it sometimes uses a DispatcherSynchronizationContext to marshal to the application's UI thread. That's because AssemblyPart.Load throws an exception if called from a background thread, and also because I wanted all events fired by the service to execute on the UI thread. I'll describe all this and more next week in Berlin when I do my "Biggest Little-Known Features in Silverlight" talk at &lt;A title="TechEd Europe" href="http://www.microsoft.com/europe/teched/" target=_blank&gt;TechEd&lt;/A&gt;, so if you're attending the conference, please come by&amp;nbsp;and join the fun!&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=9958" width="1" height="1"&gt;</description></item><item><title>Silverlight 3's New {RelativeSource} Markup Extension</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/11/06/silverlight-3-s-new-relativesource-markup-extension.aspx</link><pubDate>Fri, 06 Nov 2009 03:00:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:9946</guid><dc:creator>jprosise</dc:creator><slash:comments>3</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/9946.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=9946</wfw:commentRss><description>&lt;P&gt;One of the more obscure features introduced in Silverlight 3 is the {RelativeSource} markup extension. It's poorer than its counterpart in WPF because the Silverlight version supports only two modes: Self and TemplatedParent. There are precious few examples&amp;nbsp;out there&amp;nbsp;demonstrating why you'd ever need {RelativeSource} in Silverlight. Here's one example.&lt;/P&gt;
&lt;P&gt;Suppose you're building a custom control named SuperSlider that wraps (and presumably adds functionality to) the built-in Slider control, and that the default control template looks something like this:&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; TargetType&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;="local:SuperSlider"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; Property&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;="Template"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;ControlTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; TargetType&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;="local:SuperSlider"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Slider&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;TemplateBinding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;ControlTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;mso-fareast-language:EN-US;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;mso-fareast-language:EN-US;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;mso-fareast-language:EN-US;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;It looks reasonable, but try&amp;nbsp;setting SuperSlider's Value property and you'll find that the&amp;nbsp;thumb doesn't move. In addition, if the user slides the Slider control's thumb, SuperSlider's Value property doesn't change. Why? Because a TemplateBinding is inherently a 1-way binding. You need a 2-way binding to forge a robust connection between SuperSlider's Value property and the Slider's Value property.&lt;/P&gt;
&lt;P&gt;In Silverlight 2, you had to write code to&amp;nbsp;overcome this. In Silverlight 3, you can do it declaratively&amp;nbsp;by combining {Binding} with {RelativeSource}:&amp;nbsp;&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;"&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; TargetType&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;="local:SuperSlider"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; Property&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;="Template"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;ControlTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; TargetType&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;="local:SuperSlider"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Slider&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; RelativeSource&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;={&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;RelativeSource&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; TemplatedParent&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;},&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; Mode&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;=TwoWay}"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;ControlTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Times New Roman','serif';FONT-SIZE:9pt;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;mso-fareast-language:EN-US;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;mso-fareast-language:EN-US;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:9pt;mso-bidi-language:AR-SA;mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN;mso-fareast-language:EN-US;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;That's one use for {RelativeSource} in Silverlight: creating 2-way template bindings.&amp;nbsp;There are others, and for examples you need look no further than the default control templates for ListBox and a handful of other controls included in Silverlight 3.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=9946" width="1" height="1"&gt;</description></item><item><title>Implementing CoverFlow in Silverlight 3</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/11/05/implementing-coverflow-in-silverlight-3.aspx</link><pubDate>Thu, 05 Nov 2009 15:12:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:9927</guid><dc:creator>jprosise</dc:creator><slash:comments>8</slash:comments><comments>http://www.wintellect.com/CS/blogs/jprosise/comments/9927.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jprosise/commentrss.aspx?PostID=9927</wfw:commentRss><description>&lt;P&gt;Apple's&amp;nbsp;CoverFlow interface&amp;nbsp;has become popular for&amp;nbsp;presenting collections of items in a highly browseable format, especially on mobile devices where real estate is limited.&amp;nbsp;Thanks to the PlaneProjection class introduced in Silverlight 3, CoverFlow interfaces are now possible in Silverlight, too.&lt;/P&gt;
&lt;P&gt;I recently set out to build a control that encapsulates all the features needed to build&amp;nbsp;CoverFlow interfaces in Silverlight. But then a funny thing happened: I found out that someone else had already done it and published the code on &lt;A title="CoverFlow for Silverlight" href="http://silverlightcoverflow.codeplex.com/" target=_blank&gt;CodePlex&lt;/A&gt;. I don't often use code written by others in the samples that I create, but I was so impressed with Darick's open-source CoverFlow&amp;nbsp;control that I made an exception. It includes some nice touches from a UI perspective, including the use of animation easing to decelerate as you come to a stop after flipping through the items, as well as support for data binding, data templates, and more. (The author chose wisely&amp;nbsp;when he decided to derive from ItemsControl!) But more importantly, it works really well, and flipping through even large numbers of items is smooth as glass. That's no small feat given that applying a PlaneProjection to an item&amp;nbsp;in Silverlight 3 prevents that item from being rendered by the GPU.&lt;/P&gt;
&lt;P&gt;I built a demo around the control that lets you flip through my collection of Fantastic Four comic books:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:459px;HEIGHT:375px;" title="CoverFlow Demo" alt="CoverFlow Demo" src="http://www.wintellect.com/CS/photos/prosise/images/9926/459x375.aspx" width=459 height=375&gt;&lt;/P&gt;
&lt;P&gt;You can &lt;A title="CoverFlow Demo" href="http://www.wintellect.com/silverlight/coverflow/" target=_blank&gt;run the demo&lt;/A&gt;&amp;nbsp;from Wintellect's Web site, or you can &lt;A title="CoverFlowDemo source code" href="http://www.wintellect.com/downloads/coverflowdemo.zip"&gt;download the source code&lt;/A&gt; and run it locally.&amp;nbsp;There's not much for me to say about the source code since the CoverFlow control does most of the work. Just for fun, I did add gesture support to the demo so you can flip backward and forward by dragging the mouse left and right. You can uncheck the "Enable gestures" box to disable that feature.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=9927" width="1" height="1"&gt;</description></item></channel></rss>