<?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>Wintellog</title><link>http://www.wintellect.com/CS/blogs/default.aspx</link><description /><dc:language>en-US</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><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>A Fluent RSS Reader for Silverlight Part 1: Proof of Concept</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/02/07/a-fluent-rss-reader-for-silverlight-part-1-proof-of-concept.aspx</link><pubDate>Sun, 07 Feb 2010 12:53:04 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:12051</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>One of the most common examples to help learn a language or framework is an RSS Reader. This is an ideal mini-project because it includes networking, parsing XML, and binding to data elements such as lists. I wanted to provide an example that shows some more interesting solutions that are possible using C# in Silverlight. This is the first part in a series. By the end of this post, we'll have a working reader. What I'll then do is add some more detailed error handling, provide unit tests, tackle...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/02/07/a-fluent-rss-reader-for-silverlight-part-1-proof-of-concept.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=12051" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/rest+services/default.aspx">rest services</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/fluent+interfaces/default.aspx">fluent interfaces</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/cross+domain/default.aspx">cross domain</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/handler/default.aspx">handler</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/rss+reader/default.aspx">rss reader</category></item><item><title>Using Moq with Silverlight for Advanced Unit Tests</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/02/02/using-moq-with-silverlight-for-advanced-unit-tests.aspx</link><pubDate>Tue, 02 Feb 2010 15:10:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11993</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>Moq is a library that assists with running unit tests by providing easily mocked objects that implement interfaces and abstract classes. You can learn more about Moq on their website . There is a distribution for Silverlight, and in this post I'll focus on some ways to use Moq for some more involved testing scenarios. Download the source code for the example project I started with the Simple Dialog Service in Silverlight and extended the example a bit. In the post, I promised that abstracting the...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/02/02/using-moq-with-silverlight-for-advanced-unit-tests.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11993" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/unit+testing/default.aspx">unit testing</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/mocking/default.aspx">mocking</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight+unit+test/default.aspx">silverlight unit test</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/moq/default.aspx">moq</category></item><item><title>Microsoft Online Services: Very Cool (and Cheap!)</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/01/30/microsoft-online-services-very-cool-and-cheap.aspx</link><pubDate>Sat, 30 Jan 2010 23:57:13 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11963</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;This is not a technical post, but one that bumps into business. Yes, occasionally us software developers have to lift our heads up and see that there's more to life than hacking code. This is especially true at small companies, such as Wintellect, were the effort to do business means you can't just hide in your office and forget about everything else. 
&lt;/p&gt;&lt;p&gt;As we had started the company near ten years ago, we made the traditional decision back then of running our own Exchange Server and had set up VPN so those of us outside the Knoxville, TN home base could get to our servers when necessary. The only "cloud" that people talked about in 2000 were those floating puffy things made of water in the sky. Exchange, as everyone knows, worked great but the VPN (as all VPN's are) was a nuisance. However, for the most part everything "was good enough." As Wintellect has grown over the years, I was getting more paranoid about backups and we were really starting to pay some serious money for our infrastructure. I also had a nagging question in the back of my mind if we were set up to handle future growth.
&lt;/p&gt;&lt;p&gt;With employees and contractors scattered around the US and the type of work we do, our infrastructure needs were very similar to that of a company many times our size. As we were working through setting up SharePoint servers and all the rest (especially those backups!), it was obvious that doing it ourselves was going to cost us obscene amounts of money. 
&lt;/p&gt;&lt;p&gt;I started doing some research and it was clear that &lt;a href="http://www.microsoft.com/Online/default.mspx"&gt;Microsoft Online Services&lt;/a&gt; (MOS) was the way to go. We priced out our needs and I got ready to present it to our executive team figuring it was a slam-dunk decision. We were going to be cutting our IT bills by 40%-50% and I could sleep at night that our backups and restores would be rock solid. With the Business Productivity Online Suite (BPOS), we'd get Exchange, SharePoint, Office Communicator, and LiveMeeting for employees and Exchange Online for contractors. The day before I was going to make my proposal, Microsoft handed me a wonderful gift of cutting the price for BPOS by 33% (now $10 per user per month) and Exchange Online by 50% ($5 per user per month). It felt wonderful to plug in the new numbers and say we were going to cut costs by 50%-60%.
&lt;/p&gt;&lt;p&gt;We planned the transition over the end of 2009 and it went extremely well. By the way, we didn't use a MOS partner we did everything on our own. Microsoft provided a great migration tool that seamlessly moved mail from our internal Exchange server to MOS. Since we have people all over the US, I also wrote an extremely detailed document on exactly how individual users were to do the transitions. That helped immensely as we had everyone from super technical to non-technical users we had to transition and we just couldn't walk over to their computer to fix anything. We tested that document with some of the technical users first so that it was bulletproof. Most people were up and running within 10-15 minutes of logging after their mail was moved over to MOS.
&lt;/p&gt;&lt;p&gt;The only problem we had with the transition was with Outlook. Since we were moving from one Exchange Server to another with everyone using their existing user accounts, we found out that Outlook is kind of dumb on how it caches email addresses. Outlook caches those addresses globally and not with the profile. For whatever reason, Outlook caches more than just the email address, so if you had sent a mail to "Bob Smith" it would pick up the "Bob Smith" from our old Exchange server and bounce the mail. Fortunately, all you had to do was delete the cache files according the Knowledgebase article: &lt;a href="http://support.microsoft.com/?kbid=287623"&gt;How to reset the nickname and the automatic completion caches in Outlook&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;MOS is not a direct replacement for having your own servers, as you obviously don't get the same level of control and extensibility. For example, with SharePoint Online, you can't run any custom code today. We were willing to trade off those limitations for three reasons. The first is because Microsoft will automatically update MOS to Exchange 2010 and SharePoint 2010 when released. Secondly, based on what Microsoft announced at the SharePoint Conference, we're going to have more than 90% of Microsoft SharePoint 2010's features this year. Finally, everything on MOS is backed up with a wonderful Service Level Agreement (SLA).
&lt;/p&gt;&lt;p&gt;Another thing I'm hoping to see in the next iteration of MOS is more automation for administration purposes. Today they have PowerShell &lt;a href="http://blogs.technet.com/msonline/archive/2010/01/25/webinar-using-powershell-with-microsoft-online-services.aspx"&gt;scripts&lt;/a&gt; to add users, which are nice, but to add them to Exchange Distribution Lists and SharePoint you have to go into the web-based user interface. It's not too onerous, but it would be nice to be able to completely automate adding users to everything in MOS.
&lt;/p&gt;&lt;p&gt;I thought it'd be worth sharing our experiences with MOS in case others were interested in hearing a real story. If you're running your own Exchange and SharePoint servers, you owe it to your sanity to check out MOS.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11963" width="1" height="1"&gt;</description></item><item><title>Programmatically Accessing the Live Smooth Streaming API</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/29/programmatically-accessing-the-live-smooth-streaming-api.aspx</link><pubDate>Fri, 29 Jan 2010 18:35:04 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11958</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>Live Smooth Streaming is a Microsoft technology that allows you to take a live, encoded, incoming video stream and rebroadcast it using Smooth Streaming technology. This technology multicasts the video stream in segments of varying bandwidths. This can then be played with a Silverlight-based client like the built-in MediaElement or more advanced player like the Silverlight Media Framework . The incoming streams could be from your web cam or third party sources, or even from a file encoded on disk...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/29/programmatically-accessing-the-live-smooth-streaming-api.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11958" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/video/default.aspx">video</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/media/default.aspx">media</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/live+smooth+streaming/default.aspx">live smooth streaming</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/smooth+streaming/default.aspx">smooth streaming</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/encoding/default.aspx">encoding</category></item><item><title>Introduction to Debugging Silverlight Applications with WinDbg</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/24/introduction-to-debugging-silverlight-applications-with-windbg.aspx</link><pubDate>Sun, 24 Jan 2010 14:04:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11938</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>I've had a few users ask me about finding memory leaks and understanding what happens with references in Silverlight. One very powerful tool to use when debugging Silverlight applications is the Windows Debugging Tools. You can download the 32-bit (x86) version side-by-side with the 64-bit (x64) version . Both WPF and Silverlight ship with an extension DLL you can load called SOS. This extension contains many powerful commands . In the video, Silverlight Debugging with WinDbg (30 minutes long), I...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/24/introduction-to-debugging-silverlight-applications-with-windbg.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11938" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/windbg/default.aspx">windbg</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/debugging/default.aspx">debugging</category></item><item><title>Simple Dialog Service in Silverlight</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/23/simple-dialog-service-in-silverlight.aspx</link><pubDate>Sat, 23 Jan 2010 09:34:04 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11891</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>1</slash:comments><description>I noticed on the forums there are a lot of users not comfortable with asynchronous programming who struggle a bit in Silverlight with getting their arms around the concept of a dialog box. In other environments, you can simply shoot out a dialog, wait for the response, and continue. In Silverlight, of course, the action is asynchronous. I would argue it should be this way most of the time. The problem is that many people tend to take the approach of trying to force the process into a synchronous...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/23/simple-dialog-service-in-silverlight.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11891" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/asynchronous/default.aspx">asynchronous</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/dialog/default.aspx">dialog</category></item><item><title>Amazing .NET Reference Visualizations</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/01/22/amazing-net-reference-visualizations.aspx</link><pubDate>Fri, 22 Jan 2010 23:19:39 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11876</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Half the battle when tracking down memory problems in a .NET application is seeing the reference chain so you can see why an object is still in use. You can use SOS and its &lt;a href="http://blogs.msdn.com/delay/archive/2009/03/11/where-s-your-leak-at-using-windbg-sos-and-gcroot-to-diagnose-a-net-memory-leak.aspx"&gt;!gcroot&lt;/a&gt; command to track them down, but that can bring new definitions to tedious. If there were only away to see all the data that !gcroot pumps out graphically…. 
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.lovettsoftware.com/blogengine.net/"&gt;Chris Lovett&lt;/a&gt; had a brilliant idea: why not use the cool new Directed Graph Markup Language (&lt;a href="http://blogs.msdn.com/camerons/archive/2008/12/16/introduction-to-directed-graph-markup-language-dgml.aspx"&gt;DGML&lt;/a&gt;) to show the output of !gcroot? Chris recorded a video to show you how to use his &lt;a href="http://www.lovettsoftware.com/blogengine.net/post/2010/01/15/Visualizing-Runtime-Object-Graphs.aspx"&gt;GCRootToDGML&lt;/a&gt; tool. Being able to see your references opens up all sorts of interesting analysis you can do as to who's holding onto your objects. Not only does DGML make things simple, they are artistic. The last view in Chris' video has a Zen quality to it.
&lt;/p&gt;&lt;p&gt;Now my mind is spinning on all sorts of other analysis tools we can do with DGML.
&lt;/p&gt;&lt;p&gt;Hat tip to &lt;a href="http://blogs.msdn.com/rmbyers/"&gt;Rick Byers&lt;/a&gt; for letting me know about Chris' idea.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11876" width="1" height="1"&gt;</description></item><item><title>My CLR via C# book is at the printer. The source code and Introduction are available now!</title><link>http://www.wintellect.com/CS/blogs/jeffreyr/archive/2010/01/22/my-clr-via-c-book-is-at-the-printer-the-source-code-and-introduction-are-available-now.aspx</link><pubDate>Fri, 22 Jan 2010 16:53:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11875</guid><dc:creator>JeffreyR</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;Hello all, I just wanted to tell everyone that my book, CLR via C# 3rd Edition, went to the printer this week and should be in stores in early February!&lt;BR&gt;The book has been updated for Visual Studio 2010, CLR 4.0 and C# 4.0. &lt;BR&gt;The source code for the book is available now and can be downloaded from here: &lt;A href="http://wintellect.com/Books.aspx"&gt;http://wintellect.com/Books.aspx&lt;/A&gt;&lt;BR&gt;Also, an excerpt from the book's Introduction can be found here: &lt;A href="http://blogs.msdn.com/microsoft_press/archive/2010/01/21/rtm-d-today-clr-via-c-third-edition.aspx"&gt;http://blogs.msdn.com/microsoft_press/archive/2010/01/21/rtm-d-today-clr-via-c-third-edition.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11875" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jeffreyr/archive/tags/jeffrey/default.aspx">jeffrey</category><category domain="http://www.wintellect.com/CS/blogs/jeffreyr/archive/tags/book/default.aspx">book</category><category domain="http://www.wintellect.com/CS/blogs/jeffreyr/archive/tags/clr+via+c_2300_/default.aspx">clr via c#</category><category domain="http://www.wintellect.com/CS/blogs/jeffreyr/archive/tags/richter/default.aspx">richter</category></item><item><title>New Silverlight 3 Version Released (3.0.50106.0)</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/20/new-silverlight-3-version-released-3-0-50106-0.aspx</link><pubDate>Wed, 20 Jan 2010 05:59:04 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11842</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>1</slash:comments><description>A new version of Silverlight 3 has been released. You can download the latest control here . If you are a developer, then you'll want to use the developer installer that is available here . This version fixes some issues related to hardware acceleration in the graphics processing unit (GPU), certain cases that cause Deep Zoom to take on high CPU, and issues with downloads from Silverlight applications. Read Microsoft's Knowledge Base article for this release: Description of the update for Silverlight:...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/20/new-silverlight-3-version-released-3-0-50106-0.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11842" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight+3/default.aspx">silverlight 3</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight+3.0.50106.0/default.aspx">silverlight 3.0.50106.0</category></item><item><title>Wintellect is Headed to Nashville to Boot Scoot with Microsoft’s “A Lap Around PDC Featuring Steve Ballmer”</title><link>http://www.wintellect.com/CS/blogs/bvananda/archive/2010/01/19/wintellect-is-headed-to-nashville-to-boot-scoot-with-microsoft-s-a-lap-around-pdc-featuring-steve-ballmer.aspx</link><pubDate>Tue, 19 Jan 2010 16:19:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11825</guid><dc:creator>bvananda</dc:creator><slash:comments>0</slash:comments><description>&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="COLOR:#1f497d;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Wintellect is headed to boot scoot boogie in Nashville, Tennessee with “A Lap Around PDC Featuring Steve Ballmer.” Plus, our own Jeff Prosise will be presenting on Silverlight 4 as well. This one day event is shaping up nicely and we are excited to be a part of it as it hits the highlights from the &lt;A href="http://microsoftpdc.com/"&gt;PDC09&lt;/A&gt; conference. This &lt;STRONG&gt;FREE&lt;/STRONG&gt; event is almost completely full and will be covering the latest Microsoft technologies and exciting announcements from &lt;A href="http://microsoftpdc.com/"&gt;PDC09&lt;/A&gt; complete with 16 sessions presented by Microsoft, Partners, MVPs and Community Leaders. With a keynote delivered by Microsoft CEO Steve Ballmer, this event promises to be music to your ears. ;) I'm a bit cheesy but it's true!&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="COLOR:#1f497d;"&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="COLOR:#1f497d;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;If you are planning to attend we hope that you will stop by and visit us in the Technology Showcase area. The Wintellect gang will be there, plus Jeff Prosise will be stopping by the booth to answer your pressing questions about Silverlight 4. Additionally, we will be raffling off a Virtual University and Devscovery 2010 pass so be sure to stop by and enter your name into a drawing to win. We hope that you all come prepared to wrangle the future of developer technology!&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="COLOR:#1f497d;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="COLOR:#1f497d;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Stay tunned I will be posting pictures from the event this week!&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11825" width="1" height="1"&gt;</description></item><item><title>Making Your Own 8K Homegrown Inversion of Control Container</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/16/making-your-own-8k-homegrown-inversion-of-control-container.aspx</link><pubDate>Sat, 16 Jan 2010 07:54:03 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11746</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>1</slash:comments><description>If you develop software, chances are you you've worked with Inversion of Control containers and the Dependency Injection pattern. Many frameworks exist to address how to marry concrete implementations to abstract classes and interfaces. A few popular ones on the .NET platform include: Autofac Castle Windsor Managed Extensibility Framework (MEF) Ninject StructureMap Unity Download the Source for this Example There are a few reasons why I decided to play with the concept of building my own dependency...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/16/making-your-own-8k-homegrown-inversion-of-control-container.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11746" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/unity+framework/default.aspx">unity framework</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/inversion+of+control/default.aspx">inversion of control</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/dependency+injection/default.aspx">dependency injection</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/MEF/default.aspx">MEF</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/windsor/default.aspx">windsor</category></item><item><title>Quick Tip: Embedding and Accessing Schemas in .NET</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/12/quick-tip-embedding-and-accessing-schemas-in-net.aspx</link><pubDate>Tue, 12 Jan 2010 11:25:02 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11536</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>I have a project I'm working on that requires the use of some extensive XML manipulation. While XML can be very powerful, XML without a schema is like JavaScript objects: no strong typing and the wild west as far as standards are concerned. A good, solid XML document will have a valid schema to validate against. It's really not that difficult, either. There are several online tools that can help generate a template of the schema from a sample XML document, like this one . Visual Studio provides full...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/12/quick-tip-embedding-and-accessing-schemas-in-net.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11536" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/xml/default.aspx">xml</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/embedded+resources/default.aspx">embedded resources</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/schema/default.aspx">schema</category></item><item><title>Auto-Discoverable Views using Fluent PRISM in Silverlight</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/10/auto-discoverable-views-using-fluent-prism-in-silverlight.aspx</link><pubDate>Mon, 11 Jan 2010 04:20:02 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11508</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>One reason a developer would use a technology like MEF is to, as the name implies, make an application extensible through a process called discovery. Discovery is simply a method for locating classes, types, or other resources in an assembly. MEF uses the Export tag to flag items for discovery, and the composition process then aggregates those items and provides them to the entities requesting them via the Import tag. Download the source code for this example It occurred to me when working with PRISM...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/10/auto-discoverable-views-using-fluent-prism-in-silverlight.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11508" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/composite+application+guidance/default.aspx">composite application guidance</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/composite+wpf/default.aspx">composite wpf</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/prism/default.aspx">prism</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/fluent+interfaces/default.aspx">fluent interfaces</category></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><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>Automated Silverlight Unit Testing Using StatLight</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/09/automated-silverlight-unit-testing-using-statlight.aspx</link><pubDate>Sat, 09 Jan 2010 08:16:03 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11462</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>One concern with the Silverlight Unit Testing Framework is that it runs on a UI thread and requires a browser to function. This makes it difficult to integrate into automated or continuous integration testing. Difficult, but not impossible. A solution is provided by the project called StatLight which not only supports Silverlight testing automation, but actually integrates with several different unit test providers. I am focusing on the Silverlight UT for this post. The program is very flexible and...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/09/automated-silverlight-unit-testing-using-statlight.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11462" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/unit+testing/default.aspx">unit testing</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight+unit+test/default.aspx">silverlight unit test</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/automated+testing/default.aspx">automated testing</category></item><item><title>RING IN THE NEW YEAR WITH OUR FREE TECH FOCUS SERIES</title><link>http://www.wintellect.com/CS/blogs/bvananda/archive/2010/01/08/ring-in-the-new-year-with-our-free-tech-focus-series.aspx</link><pubDate>Fri, 08 Jan 2010 16:31:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11447</guid><dc:creator>bvananda</dc:creator><slash:comments>0</slash:comments><description>&lt;P style="LINE-HEIGHT:120%;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;I hope that everyone had a very happy holiday season! 2010 is underway and I wanted to let each of you know that Wintellect is launching its &lt;B&gt;NEW&lt;/B&gt; Tech Focus segments. The goal of our Tech Focus segments is to provide developers, all of you, with exclusive, free content straight from Wintellect experts that will help you in your day-to-day work. Each Tech Focus segment will be offered in a bi-monthly format and will showcase a specific technology that is a core part our training and consulting services.&amp;nbsp; Tech Focus members will have access to articles, blog posts, live/free webinars, technical tips via social media, discounts, and much more covering topics like - Silverlight, Azure, Debugging/Performance, Threading, WPF, and ASP.NET.&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:120%;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:120%;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Our Silverlight Tech Focus series is underway and Jeff Prosise will be providing Silverlight 4 content this month. To learn more or to register simply click &lt;/FONT&gt;&lt;A href="http://www.wintellect.com/techfocussilverlight/"&gt;&lt;FONT color=#800080 size=3 face=Calibri&gt;here&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;.&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:120%;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT:120%;MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Happy New Year! &lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11447" width="1" height="1"&gt;</description></item><item><title>Silverlight Unit Testing Framework: Asynchronous Testing of Behaviors</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/07/silverlight-unit-testing-framework-asynchronous-testing-of-behaviors.aspx</link><pubDate>Thu, 07 Jan 2010 11:27:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11416</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>1</slash:comments><description>Last month, I bogged about Unit Testing ViewModels AND Views using the Silverlight Unit Testing Framework . I wanted to take that post a step further and talk about some more advanced testing scenarios that are possible. The site itself provides a lot of information about how to get started and what is available with the framework. One thing to keep in mind that is a radical shift from other testing frameworks is that the Silverlight testing framework runs on the UI thread. This means it does not...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/07/silverlight-unit-testing-framework-asynchronous-testing-of-behaviors.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11416" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/unit+testing/default.aspx">unit testing</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight+unit+test/default.aspx">silverlight unit test</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight+toolkit/default.aspx">silverlight toolkit</category></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><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>PRISM, MEF, and MVVM Part 3 of 3: Dynamic MEF Modules in PRISM</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/03/prism-mef-and-mvvm-part-3-of-3-dynamic-mef-modules-in-prism.aspx</link><pubDate>Sun, 03 Jan 2010 08:08:03 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11215</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>Series recap: PRISM, MEF, and MVVM Part 1 of 3: Unity Glue PRISM, MEF, and MVVM Part 2 of 3: Making PRISM MEF Friendly PRISM, MEF, and MVVM Part 3 of 3: Dynamic MEF Modules in PRISM In the final part of this series, I will show a dynamically loaded module (using PRISM) that takes full advantage of MEF. Here is a preview of the final product, illustrating the different modules and areas I have pulled together to demonstrate (click for a full resolution view): Download the Source for this Example Why...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/03/prism-mef-and-mvvm-part-3-of-3-dynamic-mef-modules-in-prism.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11215" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/prism/default.aspx">prism</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/mvvm/default.aspx">mvvm</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/dynamic+modules/default.aspx">dynamic modules</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/MEF/default.aspx">MEF</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight+3/default.aspx">silverlight 3</category></item><item><title>PRISM, MEF, and MVVM Part 2 of 3: Making PRISM MEF Friendly</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2009/12/30/prism-mef-and-mvvm-part-2-of-3-making-prism-mef-friendly.aspx</link><pubDate>Wed, 30 Dec 2009 06:46:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11189</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>In the first part of this series, we explored using the Unity container to bind the view model to the view. The next logical step is to explore how to use MEF. PRISM provides several useful mechanisms that relate directly to views and modules, such as the region manager and the module manager. This allows us to dynamically assign views to regions on the display and dynamically load modules. Logically, it seems we could create a MEF module, dynamically load it through PRISM, and glue its parts together...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2009/12/30/prism-mef-and-mvvm-part-2-of-3-making-prism-mef-friendly.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11189" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/prism/default.aspx">prism</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/MEF/default.aspx">MEF</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/partinitializer/default.aspx">partinitializer</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/modules/default.aspx">modules</category></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><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>Receiving notifications when garbage collections occur</title><link>http://www.wintellect.com/CS/blogs/jeffreyr/archive/2009/12/22/receiving-notifications-garbage-collections-occur.aspx</link><pubDate>Tue, 22 Dec 2009 03:58:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11017</guid><dc:creator>JeffreyR</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;While creating the 3rd Edition of my CLR via C# book (&lt;A href="http://www.amazon.com/CLR-via-C-Third-Pro-Developer/dp/0735627045/ref=dp_ob_title_bk"&gt;http://www.amazon.com/CLR-via-C-Third-Pro-Developer/dp/0735627045/ref=dp_ob_title_bk&lt;/A&gt;), I came up with a cool little class that will raise an event after a collection of Generation 0 or Generation 2 occurs. Here is the code for the class:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;static&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;class&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;GCNotification&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; {&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;private&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;static&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Action&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Int32&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;&amp;gt; s_gcDone = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;// The event’s field&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;static&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;event&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Action&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Int32&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;&amp;gt; GCDone {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;add&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;// If there were no registered delegates&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;before, start reporting notifications now&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; (s_gcDone == &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;) { &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;GenObject&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;0&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;); &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;GenObject&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;2&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;); }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_gcDone += &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;value&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;remove&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; { s_gcDone -= &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;value&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;private&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;sealed&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;class&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;GenObject&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;private&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Int32&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; m_generation;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; GenObject(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Int32&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; generation) { m_generation = generation; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ~GenObject() { &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;// This is the Finalize method&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;// If this object is in the generation we want (or higher),&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;// notify the delegates that a GC just completed&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;GC&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;.GetGeneration(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;this&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;) &amp;gt;= m_generation) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Action&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Int32&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;&amp;gt; temp =&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Interlocked&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;.CompareExchange(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;ref&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; s_gcDone, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; (temp != &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;) temp(m_generation);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Keep reporting notifications if there is at least one delegate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;// registered, the AppDomain isn't unloading, and the process&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;// isn’t shutting down&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; ((s_gcDone != &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;) &amp;amp;&amp;amp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;AppDomain&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;.CurrentDomain.IsFinalizingForUnload() &amp;amp;&amp;amp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Environment&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;.HasShutdownStarted) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;// For Gen 0, create a new object; for Gen 2, resurrect the&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;// object &amp;amp; let the GC call Finalize again the next time&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;Gen 2 is GC'd&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; (m_generation == &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;0&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;) &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;GenObject&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;0&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;);&lt;BR&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;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;else&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;GC&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;.ReRegisterForFinalize(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;this&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;else&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; { &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;/* Let the objects go away */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;And here is some code to see it in action:&lt;/P&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;
&lt;P&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;static&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; Main() {&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;GCNotification&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;.GCDone += g =&amp;gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Console&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;.Beep(g == &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;0&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; ? &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;800&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; : &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;8000&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;200&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;var&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; l = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;List&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Object&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;&amp;gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;&lt;FONT color=#008000 size=2 face=Consolas&gt;// Construct a lot of 100-byte objects.&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;for&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Int32&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; x = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;0&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;; x &amp;lt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;1000000&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;; x++) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Console&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;.WriteLine(x);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Byte&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;[] b = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;&lt;FONT color=#0000ff size=2 face=Consolas&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;&lt;FONT color=#2b91af size=2 face=Consolas&gt;Byte&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;[&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;&lt;FONT color=#a52a2a size=2 face=Consolas&gt;100&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l.Add(b);&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face=Consolas&gt;&lt;FONT size=2 face=Consolas&gt;This gives you a very small taste of what you should expect to see in the next edition of my book. Hope you enjoy.&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11017" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jeffreyr/archive/tags/generation/default.aspx">generation</category><category domain="http://www.wintellect.com/CS/blogs/jeffreyr/archive/tags/GC/default.aspx">GC</category><category domain="http://www.wintellect.com/CS/blogs/jeffreyr/archive/tags/notifications/default.aspx">notifications</category></item><item><title>PRISM, MEF and MVVM Part 1 of 3: Unity Glue</title><link>http://www.wintellect.com/CS/blogs/jlikness/archive/2009/12/22/prism-mef-and-mvvm-part-1-of-3-unity-glue.aspx</link><pubDate>Tue, 22 Dec 2009 03:15:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:11026</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>1</slash:comments><description>PRISM, also known as Composite WPF , has established itself as a very popular framework for building modular, scalable Silverlight applications. A newer contender, the Managed Extensibility Framework (MEF) , has also grown in popularity. In fact, these two frameworks have left people scratching their heads wondering which one to use, when, how, and why. Download the source code for this project. Special note: the source won't run "as is." You need to take two steps: first, right click the PRISMMEF.Web...(&lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2009/12/22/prism-mef-and-mvvm-part-1-of-3-unity-glue.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=11026" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/composite+wpf/default.aspx">composite wpf</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/prism/default.aspx">prism</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/MEF/default.aspx">MEF</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/Managed+Extensibility+Framework/default.aspx">Managed Extensibility Framework</category><category domain="http://www.wintellect.com/CS/blogs/jlikness/archive/tags/view+model/default.aspx">view model</category></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>8</slash:comments><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></channel></rss>