<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.pagebrooks.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" version="2.0">
    <channel>
        <title>Page Brooks</title>
        <link>http://pagebrooks.com/Default.aspx</link>
        <description />
        <language>en-US</language>
        <copyright>Page Brooks</copyright>
        <managingEditor>pagebrooks@gmail.com</managingEditor>
        <generator>Subtext Version 2.0.0.43</generator>
        <image>
            <title>Page Brooks</title>
            <url>http://pagebrooks.com/images/RSS2Image.gif</url>
            <link>http://pagebrooks.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.pagebrooks.com/PageBrooks" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">PageBrooks</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
            <title>Finding the Target of a Storyboard Timeline</title>
            <category>Silverlight</category>
            <link>http://pagebrooks.com/archive/2009/07/01/finding-the-target-of-a-storyboard-timeline.aspx</link>
            <description>&lt;p&gt;I noticed the other day that Storyboard has a &lt;strong&gt;SetTarget&lt;/strong&gt; method, but it does not have a corresponding &lt;strong&gt;GetTarget&lt;/strong&gt; method.  So how can you find the target of a Timeline child?  Fortunately, Storybard has a &lt;strong&gt;GetTargetName&lt;/strong&gt; method, we can use this method to obtain the name of the target and then search parent container’s children for a matching child.  Suppose we had the following code:&lt;/p&gt;&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="LayoutRoot"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Storyboard&lt;/span&gt; &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;="FadeOut"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DoubleAnimation&lt;/span&gt; 
                    &lt;span class="attr"&gt;To&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; 
                    &lt;span class="attr"&gt;Duration&lt;/span&gt;&lt;span class="kwrd"&gt;="0:0:3"&lt;/span&gt; 
                    &lt;span class="attr"&gt;Storyboard&lt;/span&gt;.&lt;span class="attr"&gt;TargetName&lt;/span&gt;&lt;span class="kwrd"&gt;="TestText"&lt;/span&gt; 
                    &lt;span class="attr"&gt;Storyboard&lt;/span&gt;.&lt;span class="attr"&gt;TargetProperty&lt;/span&gt;&lt;span class="kwrd"&gt;="(UIElement.Opacity)"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Storyboard&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="TestText"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="The Rain In Spain"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
]]&gt;&lt;/style&gt;

&lt;p&gt;In the example above, the TextBlock &lt;strong&gt;TestText&lt;/strong&gt; is the target of the DoubleAnimation timeline in the &lt;strong&gt;FadeOut&lt;/strong&gt; Storyboard.  We can find this using the following code:&lt;/p&gt;&lt;pre class="csharpcode"&gt;var fadeOut = (Storyboard)LayoutRoot.Resources[&lt;span class="str"&gt;"FadeOut"&lt;/span&gt;];
var doubleAnimation = (DoubleAnimation)fadeOut.Children[0];
var targetName = Storyboard.GetTargetName(doubleAnimation);
var target = LayoutRoot.Children.Single(c =&amp;gt; ((FrameworkElement)c).Name == targetName);&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;It is worth noting that you must specify a &lt;strong&gt;TargetName,&lt;/strong&gt; or the &lt;strong&gt;GetTargetName&lt;/strong&gt; method will return null.  In other words, if you are creating a Storyboard programmatically, and you only use the &lt;strong&gt;SetTarget&lt;/strong&gt; method instead of the &lt;strong&gt;SetTargetName&lt;/strong&gt; method, the &lt;strong&gt;GetTargetName&lt;/strong&gt; method will not return what you expect:&lt;/p&gt;&lt;pre class="csharpcode"&gt;var sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; Storyboard();
var da = &lt;span class="kwrd"&gt;new&lt;/span&gt; DoubleAnimation();
da.To = 0;
da.Duration = TimeSpan.FromSeconds(3);

&lt;strong&gt;Storyboard.SetTarget(da, TestText); // Instead try: Storyboard.SetTargetName(da, "TestText"); &lt;/strong&gt;
Storyboard.SetTargetProperty(da, &lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyPath(&lt;span class="str"&gt;"(UIElement.Opacity)"&lt;/span&gt;));
sb.Children.Add(da);

var target = Storyboard.GetTargetName(da); // Returns null if we don’t call SetTargetName&lt;/pre&gt;&lt;pre class="csharpcode"&gt; &lt;/pre&gt;&lt;pre class="csharpcode"&gt;Enjoy!&lt;/pre&gt;&lt;pre class="csharpcode"&gt; &lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
]]&gt;&lt;/style&gt;&lt;img src="http://pagebrooks.com/aggbug/106.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EVmbC2xlYaIhzrW8rCXkFN3LMJk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EVmbC2xlYaIhzrW8rCXkFN3LMJk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EVmbC2xlYaIhzrW8rCXkFN3LMJk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EVmbC2xlYaIhzrW8rCXkFN3LMJk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=JJf7EIoz7J8:eo36v06GtkU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=JJf7EIoz7J8:eo36v06GtkU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=JJf7EIoz7J8:eo36v06GtkU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=JJf7EIoz7J8:eo36v06GtkU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=JJf7EIoz7J8:eo36v06GtkU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=JJf7EIoz7J8:eo36v06GtkU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PageBrooks/~4/JJf7EIoz7J8" height="1" width="1"/&gt;</description>
            <dc:creator>Page Brooks</dc:creator>
            <guid>http://pagebrooks.com/archive/2009/07/01/finding-the-target-of-a-storyboard-timeline.aspx</guid>
            <pubDate>Thu, 02 Jul 2009 02:24:26 GMT</pubDate>
            <wfw:comment>http://pagebrooks.com/comments/106.aspx</wfw:comment>
            <comments>http://pagebrooks.com/archive/2009/07/01/finding-the-target-of-a-storyboard-timeline.aspx#feedback</comments>
            <wfw:commentRss>http://pagebrooks.com/comments/commentRss/106.aspx</wfw:commentRss>
            <trackback:ping>http://pagebrooks.com/services/trackbacks/106.aspx</trackback:ping>
        </item>
        <item>
            <title>A Smaller XAP Preloader for Silverlight</title>
            <category>Silverlight</category>
            <link>http://pagebrooks.com/archive/2009/05/17/a-smaller-xap-preloader-for-silverlight.aspx</link>
            <description>&lt;p&gt;In many situations, it is important that your Silverlight appilcations load as quickly as possible.  For example, when building a Silverlight Advertisement, the user should not experience a significant load time.  The advertisement should load just as fast as the other page assets.  But how do you achieve this when your application includes heavy-weight resources, such as video or images?  Of course you could pull these individual assets from a server during runtime, but if your assets are packaged inside the XAP package, you need a better solution.&lt;/p&gt;  &lt;p&gt;The most common solution I have seen is to build a small, light-weight Silverlight application that will behave as a preloader for the main application.  The preloader application will load first to provide some immediate feedback to the user and then begin downloading the main application asynchronously in the background.  As soon as the main application has finished downloading, the preloader application will instantiate and then inject the main application into its visual tree.&lt;/p&gt;  &lt;p&gt;It is important that the preloader application is as small as possible.  However, most of the preloaders I have seen take advantage of LINQ to parse the AppManifest.xaml file.  LINQ is great, but this requires you to reference System.Xml.Linq.dll in your application.  Uncompressed, this assembly is 118KB.  If you want to minimize your XAP size, you need to eliminate this dependency.  Below, I have written a small preloader that uses the good old-fashioned XmlReader to parse the AppManifest file.  To take advantage of this preloader, simply include this class in your preloader application and call it using the example code below:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;XapLoader&lt;/strong&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; XapLoader
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;XapLoaderEventArgs&amp;gt; XapLoaded;

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; m_rootAssembly;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; m_typeName;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; LoadXap(Uri xapUri, &lt;span class="kwrd"&gt;string&lt;/span&gt; typeName)
    {
        m_rootAssembly = Path.GetFileNameWithoutExtension(xapUri.ToString());
        m_typeName = typeName;

        WebClient wc = &lt;span class="kwrd"&gt;new&lt;/span&gt; WebClient();
        wc.OpenReadCompleted += wc_OpenReadCompleted;
        wc.OpenReadAsync(xapUri);
    }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; wc_OpenReadCompleted(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, OpenReadCompletedEventArgs e)
    {
        var manifestStream = Application.GetResourceStream(
            &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamResourceInfo(e.Result, &lt;span class="kwrd"&gt;null&lt;/span&gt;),
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;"AppManifest.xaml"&lt;/span&gt;, UriKind.Relative));

        &lt;span class="kwrd"&gt;string&lt;/span&gt; appManifest = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamReader(manifestStream.Stream).ReadToEnd();
        &lt;span class="kwrd"&gt;string&lt;/span&gt; assemblyName = m_rootAssembly + &lt;span class="str"&gt;".dll"&lt;/span&gt;;
        XmlReader reader = XmlReader.Create(&lt;span class="kwrd"&gt;new&lt;/span&gt; StringReader(appManifest));
        Assembly asm = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
        &lt;span class="kwrd"&gt;while&lt;/span&gt; (reader.Read())
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.IsStartElement(&lt;span class="str"&gt;"AssemblyPart"&lt;/span&gt;))
            {
                reader.MoveToAttribute(&lt;span class="str"&gt;"Source"&lt;/span&gt;);
                reader.ReadAttributeValue();
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.Value == assemblyName)
                {
                    var assemblyStream = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamResourceInfo(e.Result, &lt;span class="str"&gt;"application/binary"&lt;/span&gt;);
                    var si = Application.GetResourceStream(assemblyStream, &lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(reader.Value, UriKind.Relative));
                    AssemblyPart p = &lt;span class="kwrd"&gt;new&lt;/span&gt; AssemblyPart();
                    asm = p.Load(si.Stream);
                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                }
            }
        }

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (asm == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; InvalidOperationException(&lt;span class="str"&gt;"Could not find specified assembly."&lt;/span&gt;);

        var o = asm.CreateInstance(m_typeName);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (o == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; InvalidOperationException(&lt;span class="str"&gt;"Could not create instance of requested type."&lt;/span&gt;);

        RaiseXapLoadedEvent(o);
    }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RaiseXapLoadedEvent(&lt;span class="kwrd"&gt;object&lt;/span&gt; instance)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (XapLoaded != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            XapLoaded(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; XapLoaderEventArgs(instance));
        }
    }
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; XapLoaderEventArgs : EventArgs
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Instance { get; set; }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; XapLoaderEventArgs(&lt;span class="kwrd"&gt;object&lt;/span&gt; instance)
    {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.Instance = instance;
    }
}

&lt;span class="rem"&gt;// USAGE&lt;/span&gt;
...
XapLoader loader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XapLoader();
loader.XapLoaded += loader_XapLoaded;
loader.LoadXap(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;"MyTestApp.xap"&lt;/span&gt;, UriKind.Relative), &lt;span class="str"&gt;"MyTestApp.Page"&lt;/span&gt;);
...
...
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; loader_XapLoaded(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, XapLoaderEventArgs e)
{
    var instance = e.Instance &lt;span class="kwrd"&gt;as&lt;/span&gt; UIElement;
    &lt;span class="kwrd"&gt;if&lt;/span&gt;(instance != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        LayoutRoot.Children.Add(instance);
    }
}&lt;/pre&gt;

&lt;p /&gt;&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;There are probably more optimizations that would shrink the size down even further.  If you can find any significant optimizations, please let me know and I’ll update the code.  I’ve attached a sample project below.  Enjoy!&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:F60BB8FA-6F02-4999-8F5E-9DD4E92C4DA7:6e14a9a1-68a5-414c-9bb7-d3f1fc3ff6a2" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;a href="http://www.pagebrooks.com/blogimages/ASmallerXAPPreloaderforSilverlight_1122C/XapPreloader.zip" target="_self"&gt;Download Sample Code&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://pagebrooks.com/aggbug/105.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Slofvkg7od2s8iIlrSmzmlh78jc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Slofvkg7od2s8iIlrSmzmlh78jc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Slofvkg7od2s8iIlrSmzmlh78jc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Slofvkg7od2s8iIlrSmzmlh78jc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=ox5REz5g1Js:tUGibnq-y1g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=ox5REz5g1Js:tUGibnq-y1g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=ox5REz5g1Js:tUGibnq-y1g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=ox5REz5g1Js:tUGibnq-y1g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=ox5REz5g1Js:tUGibnq-y1g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=ox5REz5g1Js:tUGibnq-y1g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PageBrooks/~4/ox5REz5g1Js" height="1" width="1"/&gt;</description>
            <dc:creator>Page Brooks</dc:creator>
            <guid>http://pagebrooks.com/archive/2009/05/17/a-smaller-xap-preloader-for-silverlight.aspx</guid>
            <pubDate>Sun, 17 May 2009 23:29:45 GMT</pubDate>
            <wfw:comment>http://pagebrooks.com/comments/105.aspx</wfw:comment>
            <comments>http://pagebrooks.com/archive/2009/05/17/a-smaller-xap-preloader-for-silverlight.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://pagebrooks.com/comments/commentRss/105.aspx</wfw:commentRss>
            <trackback:ping>http://pagebrooks.com/services/trackbacks/105.aspx</trackback:ping>
        </item>
        <item>
            <title>Star Selector Control Updated</title>
            <category>Silverlight</category>
            <link>http://pagebrooks.com/archive/2009/05/02/star-selector-control-updated.aspx</link>
            <description>&lt;p&gt;In my spare time, I have been re-writing the Star Selector control that is part of Silverlight Contrib.  I re-wrote this control because there were several things I wanted to accomplish.  This re-write includes quite a few new features.  I will highlight them in the next few sections:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Half-Star Selection&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The control supports enabling half-star selection.  To enable or disable this feature, simply set the AllowHalfStarSelection property accordingly.  The default value is false.&lt;/p&gt;
&lt;p&gt; &lt;img height="91" border="0" width="408" style="border-width: 0px; display: inline;" title="star_selector" alt="star_selector" src="http://www.pagebrooks.com/blogimages/StarSelectorControlUpdated_131F8/star_selector.png" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DisplayValue and Value Property Data Types&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The DisplayValue and Value properties have been changed from an Integer to a double data type.  This allows you to select half-stars and the control will reflect the specified value by rounding up or down to the nearest half-star when AllowHalfStarSelection is true.&lt;/p&gt;
&lt;p&gt;DisplayValue reflects which stars will be visible.  Value reflects what the user has chosen.  I have split this concept into 2 properties to allow for more flexibility  when using the control.&lt;/p&gt;
&lt;p&gt;For example, suppose you wanted to start off with an empty rating.  Once the user selects a value, you want to pull down the newly calculated average for all ratings.  The following code would allow you to achieve this:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Loaded(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e) &lt;br /&gt;{ &lt;br /&gt;    StarSelector1.DisplayValue = 0; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; StarSelector1_ValueChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e) &lt;br /&gt;{ &lt;br /&gt;    &lt;span class="rem"&gt;// Calculate Average including (StarSelector1.Value) &lt;/span&gt;     &lt;br /&gt;    StarSelector1.DisplayValue = GetCalculatedAverage();  &lt;br /&gt;}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;
&lt;p&gt;&lt;strong&gt;Half-Star Templatability&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img height="94" border="0" width="459" style="border-width: 0px; display: inline;" title="half_heart_selection" alt="half_heart_selection" src="http://www.pagebrooks.com/blogimages/StarSelectorControlUpdated_131F8/half_heart_selection.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Maximum Property&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Maximum property allows you to specify the number of stars that will be displayed on the control.  The default value is 5.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ReadOnly Property&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sometimes you just need to show a rating without allowing the user to interact with the control.  The ReadOnly property allows for this.  The default value is false.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Disabled Property&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The new star selector control also has a Disabled property.  You can also provide a Disabled state in the control template if you wish.  The default value is false.&lt;/p&gt;
&lt;p&gt;&lt;img height="91" border="0" width="405" style="border-width: 0px; display: inline;" title="disabled_star" alt="disabled_star" src="http://www.pagebrooks.com/blogimages/StarSelectorControlUpdated_131F8/disabled_star.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img height="89" border="0" width="458" style="border-width: 0px; display: inline;" title="disabled_heart" alt="disabled_heart" src="http://www.pagebrooks.com/blogimages/StarSelectorControlUpdated_131F8/disabled_heart.png" /&gt;&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;You can try out a live demo of the control and download the source code below:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pagebrooks.com/demos/silverlightstars2" target="_blank"&gt;Live Demo&lt;/a&gt;&lt;/p&gt;
&lt;div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:F60BB8FA-6F02-4999-8F5E-9DD4E92C4DA7:f2fbb1f4-a957-4e71-8fdd-04124166ad0b" class="wlWriterEditableSmartContent"&gt;
&lt;div&gt;&lt;a href="http://www.pagebrooks.com/blogimages/StarSelectorControlUpdated_131F8/StarSelector.zip" target="_self"&gt;Star Selector Source Code&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://pagebrooks.com/aggbug/104.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5fp3LnhxS4n6zAp8omswjT1wbV8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5fp3LnhxS4n6zAp8omswjT1wbV8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5fp3LnhxS4n6zAp8omswjT1wbV8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5fp3LnhxS4n6zAp8omswjT1wbV8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=fy4ZSUPCdrw:flx97_IoSvs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=fy4ZSUPCdrw:flx97_IoSvs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=fy4ZSUPCdrw:flx97_IoSvs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=fy4ZSUPCdrw:flx97_IoSvs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=fy4ZSUPCdrw:flx97_IoSvs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=fy4ZSUPCdrw:flx97_IoSvs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PageBrooks/~4/fy4ZSUPCdrw" height="1" width="1"/&gt;</description>
            <dc:creator>Page Brooks</dc:creator>
            <guid>http://pagebrooks.com/archive/2009/05/02/star-selector-control-updated.aspx</guid>
            <pubDate>Sat, 02 May 2009 17:44:24 GMT</pubDate>
            <comments>http://pagebrooks.com/archive/2009/05/02/star-selector-control-updated.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://pagebrooks.com/comments/commentRss/104.aspx</wfw:commentRss>
            <trackback:ping>http://pagebrooks.com/services/trackbacks/104.aspx</trackback:ping>
        </item>
        <item>
            <title>A Cool Trick for Passing Data to a Silverlight Application</title>
            <category>Silverlight</category>
            <link>http://pagebrooks.com/archive/2009/04/25/a-cool-trick-for-passing-data-to-a-silverlight-application.aspx</link>
            <description>&lt;p&gt;As you probably already know, there are quite a few ways to pass data to a Silverlight application.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Use InitParams in the Silverlight plugin declaration &lt;/li&gt;    &lt;li&gt;Read data off the querystring &lt;/li&gt;    &lt;li&gt;Use WebClient to request a value &lt;/li&gt;    &lt;li&gt;Interact with the HTML DOM to pull a value from the hosting page &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;But what do you do if you don’t have control over the hosting page?  Really, your only option is to make a call to a web server using WebClient.  But even that can have cross-domain policy implications.  Besides, that’s a lot of work to be doing just to simply supply a small amount of data to your application.&lt;/p&gt;  &lt;p&gt;There is one other option however.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Application.Current.Host.Source&lt;/strong&gt; will provide you with the URI of the XAP package that the host will render.  So what this means is that when you provide the URI for your XAP package, you can append a querystring to the end, like so:&lt;/p&gt; &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="source"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="ClientBin/MyApp.xap&lt;strong&gt;?MyKey=Testing&lt;/strong&gt;"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Now, you simply need to read (and parse) the querystring in your application.  Since Silverlight does not automatically parse the querystring for us, we have to do the dirty work.  Yes, there are many ways you can do achieve this.  Below, you will find one technique:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetXapPackageQueryStringValue(&lt;span class="kwrd"&gt;string&lt;/span&gt; key)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(key))
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;

    key = key.ToLower();

    &lt;span class="kwrd"&gt;string&lt;/span&gt; xapPackage = Application.Current.Host.Source.OriginalString;
    &lt;span class="kwrd"&gt;int&lt;/span&gt; questionMarkIndex = xapPackage.IndexOf(&lt;span class="str"&gt;'?'&lt;/span&gt;);
    &lt;span class="kwrd"&gt;if&lt;/span&gt;(questionMarkIndex == -1)
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;

    &lt;span class="kwrd"&gt;string&lt;/span&gt; queryString = xapPackage.Substring(questionMarkIndex, xapPackage.Length - questionMarkIndex); 
    queryString = queryString.Replace(&lt;span class="str"&gt;"?"&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty).ToLower();

    &lt;span class="kwrd"&gt;string&lt;/span&gt;[] keyValuePairs = queryString.Split(&lt;span class="kwrd"&gt;new&lt;/span&gt;[] { &lt;span class="str"&gt;'&amp;amp;'&lt;/span&gt; });
    &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; keyValuePairs.Length; i++)
    {
        &lt;span class="kwrd"&gt;string&lt;/span&gt;[] pair = keyValuePairs[i].Split(&lt;span class="kwrd"&gt;new&lt;/span&gt;[] { &lt;span class="str"&gt;'='&lt;/span&gt; });
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (pair[0] == key)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; pair[1];
        }
    }

    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
}&lt;/pre&gt;

&lt;p&gt;Then, you can retrieve the querystring value like so:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; val = GetXapPackageQueryStringValue(&lt;span class="str"&gt;"MyKey"&lt;/span&gt;);
// TODO: Use val &lt;span class="kwrd"&gt;in&lt;/span&gt; your code.&lt;/pre&gt;

&lt;p&gt;This can be useful in situations when you have the ability to specify the path to a XAP package, but don’t have control over any other facets.  One example of this would be &lt;a href="http://www.codeplex.com" target="_blank"&gt;CodePlex&lt;/a&gt;.  On CodePlex, you have the ability to embed Silverlight applications in your Wiki.  You do this with the following syntax:&lt;/p&gt;

&lt;p&gt;{silverlight:url=http://mydomain.com/MyApp.xap?MyKey=testing,height=300,width=500}&lt;/p&gt;

&lt;p&gt;Now, you can build one application and reference it multiple times while varying the querystring for each declaration.  This is really helpful when you want to write one Silverlight application that behaves differently when you change the querystring.  For example, on &lt;a href="http://silverlightcontrib.org" target="_blank"&gt;Silverlight Contrib&lt;/a&gt;, we have a tutorial application that will display one control &lt;a href="http://silverlightcontrib.codeplex.com/Wiki/View.aspx?title=Color%20Picker%20Live%20Demo&amp;amp;referringTitle=Home" target="_blank"&gt;for&lt;/a&gt; &lt;a href="http://silverlightcontrib.codeplex.com/Wiki/View.aspx?title=Gauge%20Demo&amp;amp;referringTitle=Home" target="_blank"&gt;each&lt;/a&gt; different parameter that is passed in.  &lt;/p&gt;&lt;img src="http://pagebrooks.com/aggbug/101.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oGIK2STs8EeGFQnN6HxQ3ofwF9U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oGIK2STs8EeGFQnN6HxQ3ofwF9U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oGIK2STs8EeGFQnN6HxQ3ofwF9U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oGIK2STs8EeGFQnN6HxQ3ofwF9U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=P4gOegLklSM:zb-MsEb-UJY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=P4gOegLklSM:zb-MsEb-UJY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=P4gOegLklSM:zb-MsEb-UJY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=P4gOegLklSM:zb-MsEb-UJY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=P4gOegLklSM:zb-MsEb-UJY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=P4gOegLklSM:zb-MsEb-UJY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PageBrooks/~4/P4gOegLklSM" height="1" width="1"/&gt;</description>
            <dc:creator>Page Brooks</dc:creator>
            <guid>http://pagebrooks.com/archive/2009/04/25/a-cool-trick-for-passing-data-to-a-silverlight-application.aspx</guid>
            <pubDate>Sat, 25 Apr 2009 15:37:49 GMT</pubDate>
            <comments>http://pagebrooks.com/archive/2009/04/25/a-cool-trick-for-passing-data-to-a-silverlight-application.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://pagebrooks.com/comments/commentRss/101.aspx</wfw:commentRss>
            <trackback:ping>http://pagebrooks.com/services/trackbacks/101.aspx</trackback:ping>
        </item>
        <item>
            <title>The Future of Silverlight Contrib</title>
            <category>Silverlight</category>
            <link>http://pagebrooks.com/archive/2009/04/16/the-future-of-silverlight-contrib.aspx</link>
            <description>&lt;p&gt;As you may already know, we are merging &lt;a href="http://www.silverlightcontrib.org" target="_blank"&gt;Silverlight Contrib&lt;/a&gt; and &lt;a href="http://slextensions.net" target="_blank"&gt;Silverlight Extensions&lt;/a&gt; into one super-ultra-mega project.  Last month, we held a poll to let the community decide the name of the consolidated project.  Which played out in the following way:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.pagebrooks.com/blogimages/TheFutureofSilverlightContrib_BA19/image.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.pagebrooks.com/blogimages/TheFutureofSilverlightContrib_BA19/image_thumb.png" width="492" height="303" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So it’s a no-brainer, obviously the community wants to keep the Silverlight Extensions name moving forward (and we will).  In the next few months, both teams will be working to consolidate the code bases into a single code base.  This will take some time, but moving forward, it will make for a much better product.  &lt;/p&gt;  &lt;p&gt;Please stay tuned!&lt;/p&gt;&lt;img src="http://pagebrooks.com/aggbug/100.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dXesy4_8nFghU9LQfwLFigNhF0Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dXesy4_8nFghU9LQfwLFigNhF0Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dXesy4_8nFghU9LQfwLFigNhF0Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dXesy4_8nFghU9LQfwLFigNhF0Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=WD_CrE7mMyw:QVRMiLuYPK0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=WD_CrE7mMyw:QVRMiLuYPK0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=WD_CrE7mMyw:QVRMiLuYPK0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=WD_CrE7mMyw:QVRMiLuYPK0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=WD_CrE7mMyw:QVRMiLuYPK0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=WD_CrE7mMyw:QVRMiLuYPK0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PageBrooks/~4/WD_CrE7mMyw" height="1" width="1"/&gt;</description>
            <dc:creator>Page Brooks</dc:creator>
            <guid>http://pagebrooks.com/archive/2009/04/16/the-future-of-silverlight-contrib.aspx</guid>
            <pubDate>Thu, 16 Apr 2009 17:14:06 GMT</pubDate>
            <comments>http://pagebrooks.com/archive/2009/04/16/the-future-of-silverlight-contrib.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://pagebrooks.com/comments/commentRss/100.aspx</wfw:commentRss>
            <trackback:ping>http://pagebrooks.com/services/trackbacks/100.aspx</trackback:ping>
        </item>
        <item>
            <title>Bitmap Caching in Silverlight 3</title>
            <category>Silverlight</category>
            <link>http://pagebrooks.com/archive/2009/03/31/bitmap-caching-in-silverlight-3.aspx</link>
            <description>&lt;p&gt;In my opinion, one of the coolest new features in Silverlight 3 is Cached Composition.  Cached Composition is a performance enhancement feature that will allow visual elements to be cached as bitmaps after the first render.  After caching occurs, the application can effectively bypass the render phase for the cached visual elements and simply display the cached elements instead.&lt;/p&gt;
&lt;p&gt;This is a huge plus for scenarios with scrolling objects!  Before Cached Composition, Silverlight would re-render the object for each frame, even if the object itself never changed.  With Cached Composition enabled, the object is cached and Silverlight can render the object even faster.&lt;/p&gt;
&lt;p&gt;&lt;img height="473" border="0" width="549" style="border-width: 0px; display: inline;" title="Composition Caching" alt="Composition Caching" src="http://www.pagebrooks.com/blogimages/BitmapCachinginSilverlight3_F223/CompositionCachingDiagramSmall.png" /&gt;&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;Composition Caching is an opt-in feature.  In other words, you must first enable composition caching at the plug-in level by setting a parameter like so:&lt;/p&gt;
&lt;p&gt;&amp;lt;param name="EnableGPUAcceleration" value="true" /&amp;gt;&lt;/p&gt;
&lt;p&gt;After enabling GPU acceleration, you can then specify at the elements you wish to cache.  Specifying the CacheMode is a simple matter of setting a property:&lt;/p&gt;
&lt;p&gt;&amp;lt;Grid CacheMode="BitmapCache" … &lt;/p&gt;
&lt;p&gt;Here are a few notes about BitmapCaching:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;BitmapCache is the only cache-mode that is supported.      &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;The Caching is applied to the element and all of it’s child elements.      &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;BitmapCaching should be used in scenarios where you are blending, transforming (translating, stretching, rotating).     &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Misuse of the CacheMode feature can hurt performance, so you need to really think through what you are doing.  If your visual tree is interleaving cached and un-cached elements, you are effectively causing multiple rendering surfaces to get created behind the scenes.  The un-cached surfaces are rendered in software and the cached surfaces are rendered in hardware.  Your performance will be best if you can minimize the total number of rendering surfaces and get the hardware to do work where it can.     &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;You can determine which elements are being cached by adding the EnableCacheVisualization parameter to your Silverlight plugin declaration.     &amp;lt;param name="EnableCacheVisualization" value="true" /&amp;gt;      &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;As far as I can tell, GPU acceleration does not occur on Macs when the Silverlight application is not in full-screen mode.  This is apparently a limitation of the Safari plug-in model.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://pagebrooks.com/aggbug/99.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zXb8fj1P_7Ja3kxZtqoHevoSDQA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zXb8fj1P_7Ja3kxZtqoHevoSDQA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zXb8fj1P_7Ja3kxZtqoHevoSDQA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zXb8fj1P_7Ja3kxZtqoHevoSDQA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=FQpAk0y6uII:-KKwa7O3p48:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=FQpAk0y6uII:-KKwa7O3p48:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=FQpAk0y6uII:-KKwa7O3p48:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=FQpAk0y6uII:-KKwa7O3p48:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=FQpAk0y6uII:-KKwa7O3p48:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=FQpAk0y6uII:-KKwa7O3p48:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PageBrooks/~4/FQpAk0y6uII" height="1" width="1"/&gt;</description>
            <dc:creator>Page Brooks</dc:creator>
            <guid>http://pagebrooks.com/archive/2009/03/31/bitmap-caching-in-silverlight-3.aspx</guid>
            <pubDate>Wed, 01 Apr 2009 00:53:00 GMT</pubDate>
            <comments>http://pagebrooks.com/archive/2009/03/31/bitmap-caching-in-silverlight-3.aspx#feedback</comments>
            <wfw:commentRss>http://pagebrooks.com/comments/commentRss/99.aspx</wfw:commentRss>
            <trackback:ping>http://pagebrooks.com/services/trackbacks/99.aspx</trackback:ping>
        </item>
        <item>
            <title>Easy Drop Shadows on Text in Silverlight 3</title>
            <category>Silverlight</category>
            <link>http://pagebrooks.com/archive/2009/03/30/easy-drop-shadows-on-text-in-silverlight-3.aspx</link>
            <description>&lt;p&gt;Before Silverlight 3, you had to do perform some less-than-ideal tricks to achieve a drop shadow effect on your text.  In fact, the &lt;a href="http://team.interknowlogy.com/blogs/bradcunningham/archive/2008/12/04/think-outside-the-textbox.aspx" target="_blank"&gt;most decent trick&lt;/a&gt; I could find had to rely on the TextBox control and not the TextBlock control since you cannot re-template a TextBlock control.  But even that technique was not optimal since you couldn’t get a truly smooth shadow.&lt;/p&gt;  &lt;p&gt;Well, that was then an this is now!  In Silverlight 3, you can do the following:&lt;/p&gt; &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; 
     &lt;span class="attr"&gt;Foreground&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt; 
     &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Lorem ipsum dolor sit amet"&lt;/span&gt; 
     &lt;span class="attr"&gt;FontSize&lt;/span&gt;&lt;span class="kwrd"&gt;="50"&lt;/span&gt; 
     &lt;span class="attr"&gt;FontWeight&lt;/span&gt;&lt;span class="kwrd"&gt;="Bold"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;strong&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock.Effect&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DropShadowEffect&lt;/span&gt; &lt;span class="attr"&gt;Color&lt;/span&gt;&lt;span class="kwrd"&gt;="Black"&lt;/span&gt; &lt;span class="attr"&gt;BlurRadius&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TextBlock.Effect&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;And Presto!&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DropShadowEffect" border="0" alt="DropShadowEffect" src="http://www.pagebrooks.com/blogimages/EasyDropShadowsonTextinSilverlight3_13ECB/DropShadowEffect.png" width="476" height="155" /&gt; &lt;/p&gt;

&lt;p&gt;Just look how much easier it is to read the first line over the second line!  Also notice that there are a few other properties that you can specify if you desire:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;BlurRadius – Controls the radius of the blur.  A larger number would indicate a softer shadow.&lt;/li&gt;

  &lt;li&gt;Color – The color of the shadow (or glow if the color is appropriate).&lt;/li&gt;

  &lt;li&gt;Direction – The angle of the drop shadow (315 degrees is the default).  The angle increases in a counter-clockwise direction.&lt;/li&gt;

  &lt;li&gt;Opacity – A double value indicating the percentage of opaqueness.&lt;/li&gt;

  &lt;li&gt;ShadowDepth – Indicates how far the shadow should appear below the text.  This property is used to control how far away the object appears from it’s backing surface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, you can apply effects to any UIElement, it just so happens that drop shadows on text is really, really, useful!&lt;/p&gt;&lt;img src="http://pagebrooks.com/aggbug/98.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fmcq2ynYH9G5lzp0PQF8rJQbHsY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fmcq2ynYH9G5lzp0PQF8rJQbHsY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fmcq2ynYH9G5lzp0PQF8rJQbHsY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fmcq2ynYH9G5lzp0PQF8rJQbHsY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=9MpHiVS0MCk:dhffhlmMmGo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=9MpHiVS0MCk:dhffhlmMmGo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=9MpHiVS0MCk:dhffhlmMmGo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=9MpHiVS0MCk:dhffhlmMmGo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=9MpHiVS0MCk:dhffhlmMmGo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=9MpHiVS0MCk:dhffhlmMmGo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PageBrooks/~4/9MpHiVS0MCk" height="1" width="1"/&gt;</description>
            <dc:creator>Page Brooks</dc:creator>
            <guid>http://pagebrooks.com/archive/2009/03/30/easy-drop-shadows-on-text-in-silverlight-3.aspx</guid>
            <pubDate>Tue, 31 Mar 2009 00:49:37 GMT</pubDate>
            <comments>http://pagebrooks.com/archive/2009/03/30/easy-drop-shadows-on-text-in-silverlight-3.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://pagebrooks.com/comments/commentRss/98.aspx</wfw:commentRss>
            <trackback:ping>http://pagebrooks.com/services/trackbacks/98.aspx</trackback:ping>
        </item>
        <item>
            <title>My Presentation/Code from 2009 Charlotte Code Camp</title>
            <category>Silverlight</category>
            <link>http://pagebrooks.com/archive/2009/03/30/my-presentationcode-from-2009-charlotte-code-camp.aspx</link>
            <description>&lt;p&gt;As promised, I am posting my slide deck and code from my &lt;a href="http://www.developersguild.org/Default.aspx?tabid=279&amp;amp;mid=885&amp;amp;ctl=Detail&amp;amp;xmid=579&amp;amp;xmfid=9" target="_blank"&gt;Silverlight Advertising presentation&lt;/a&gt; at the &lt;a href="http://www.developersguild.org/Default.aspx?alias=www.developersguild.org/codecamp/2009/spring" target="_blank"&gt;2009 Charlotte Code Camp&lt;/a&gt;.  The turnout was great and I had some good questions!  &lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.developersguild.org" target="_blank"&gt;Charlotte guys&lt;/a&gt; hold an excellent code camp.  I always enjoy making the trip!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://pagebrooks.com/files/source/silverlight/servingads.zip" target="_blank"&gt;&lt;strong&gt;Download Presentation&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Learn. Develop. Sell" border="0" alt="Learn. Develop. Sell" src="http://www.pagebrooks.com/blogimages/PresentationandCodefromCharlotteCodeCamp_789F/learndevelopsell.png" width="161" height="267" /&gt;&lt;/p&gt;&lt;img src="http://pagebrooks.com/aggbug/97.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BPmyUoBxZ3Yc4sJyK8wL_Byy05o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BPmyUoBxZ3Yc4sJyK8wL_Byy05o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BPmyUoBxZ3Yc4sJyK8wL_Byy05o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BPmyUoBxZ3Yc4sJyK8wL_Byy05o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=1nTuEhT8Rv0:NTcjE7yhfGA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=1nTuEhT8Rv0:NTcjE7yhfGA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=1nTuEhT8Rv0:NTcjE7yhfGA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=1nTuEhT8Rv0:NTcjE7yhfGA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=1nTuEhT8Rv0:NTcjE7yhfGA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=1nTuEhT8Rv0:NTcjE7yhfGA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PageBrooks/~4/1nTuEhT8Rv0" height="1" width="1"/&gt;</description>
            <dc:creator>Page Brooks</dc:creator>
            <guid>http://pagebrooks.com/archive/2009/03/30/my-presentationcode-from-2009-charlotte-code-camp.aspx</guid>
            <pubDate>Tue, 31 Mar 2009 00:18:36 GMT</pubDate>
            <comments>http://pagebrooks.com/archive/2009/03/30/my-presentationcode-from-2009-charlotte-code-camp.aspx#feedback</comments>
            <wfw:commentRss>http://pagebrooks.com/comments/commentRss/97.aspx</wfw:commentRss>
            <trackback:ping>http://pagebrooks.com/services/trackbacks/97.aspx</trackback:ping>
        </item>
        <item>
            <title>Silverlight Contrib to Merge with Silverlight Extensions</title>
            <category>Silverlight</category>
            <link>http://pagebrooks.com/archive/2009/03/14/silverlight-contrib-to-merge-with-silverlight-extensions.aspx</link>
            <description>&lt;p&gt;&lt;img height="109" border="0" width="316" src="http://www.pagebrooks.com/blogimages/SilverlightContribtoMergewithSilverlight_BFC5/logoslExtContr_small.jpg" alt="logo-slExt-Contr_small" title="logo-slExt-Contr_small" style="border-width: 0px; display: inline;" /&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a target="_blank" href="http://silverlightcontrib.org"&gt;Silverlight Contrib&lt;/a&gt; and &lt;a target="_blank" href="http://slextensions.net"&gt;Silverlight Extensions&lt;/a&gt; projects will be &lt;a target="_blank" href="http://silverlightcontrib.org/announcements/silverlight-contrib-to-merge-with-silverlight-extensions/"&gt;merging into a single project&lt;/a&gt; soon.  By consolidating the two projects we hope to provide an even more valuable resource to the Silverlight Community.  Before the consolidation, both projects were hosted on CodePlex and shared the same Ms-PL licensing.  This will not change, however, there will be only one unified project moving forward.&lt;/p&gt;
&lt;p&gt;Obviously, both teams are fond of the names chosen for their open source projects, so we decided it would be best if we let the Silverlight community decide which name to go with moving forward.  Whichever project name receives more votes by March 29th, 2009 at 6:00 PM EDT will become the new project name after merging.&lt;/p&gt;
&lt;script language="JavaScript" src="http://www.micropoll.com/akira/MicroPoll?id=147782"&gt;&lt;/script&gt;&lt;noscript&gt;&amp;amp;lt;div&amp;amp;gt;&amp;amp;lt;a href=&amp;amp;quot;http://www.micropoll.com/akira/mpview/556096-147782&amp;amp;quot; _fcksavedurl=&amp;amp;quot;http://www.micropoll.com/akira/mpview/556096-147782&amp;amp;quot;&amp;amp;gt;Click Here for Poll&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;a href=&amp;amp;quot;http://www.questionpro.com&amp;amp;quot; _fcksavedurl=&amp;amp;quot;http://www.questionpro.com&amp;amp;quot; title=&amp;amp;quot;online surveys&amp;amp;quot;&amp;amp;gt;Online Survey&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt; | &amp;amp;lt;a href=&amp;amp;quot;http://www.micropoll.com&amp;amp;quot; _fcksavedurl=&amp;amp;quot;http://www.micropoll.com&amp;amp;quot; title=&amp;amp;quot;Website Polls&amp;amp;quot;&amp;amp;gt;Website Polls&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt; | &amp;amp;lt;a href=&amp;amp;quot;http://www.contactpro.com&amp;amp;quot; _fcksavedurl=&amp;amp;quot;http://www.contactpro.com&amp;amp;quot; title=&amp;amp;quot;email marketing&amp;amp;quot;&amp;amp;gt;Email Marketing&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt; | &amp;amp;lt;a href=&amp;amp;quot;http://www.ideascale.com&amp;amp;quot; _fcksavedurl=&amp;amp;quot;http://www.ideascale.com&amp;amp;quot; title=&amp;amp;quot;crowdsourcing&amp;amp;quot;&amp;amp;gt;Crowdsourcing&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt;&amp;amp;lt;a href=&amp;amp;quot;http://www.micropoll.com/akira/MicroPoll?mode=html&amp;amp;amp;amp;id=147782&amp;amp;quot; _fcksavedurl=&amp;amp;quot;http://www.micropoll.com/akira/MicroPoll?mode=html&amp;amp;amp;amp;id=147782&amp;amp;quot;&amp;amp;gt;View MicroPoll&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;&lt;/noscript&gt;&lt;!-- END MICROPOLL JAVASCRIPT CODE --&gt;&lt;img src="http://pagebrooks.com/aggbug/96.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/C2_xxzZE4QypRHk6UfhBzr_GIsc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C2_xxzZE4QypRHk6UfhBzr_GIsc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/C2_xxzZE4QypRHk6UfhBzr_GIsc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C2_xxzZE4QypRHk6UfhBzr_GIsc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=qWwNQth2KiQ:qkwOPmJfBr0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=qWwNQth2KiQ:qkwOPmJfBr0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=qWwNQth2KiQ:qkwOPmJfBr0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=qWwNQth2KiQ:qkwOPmJfBr0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=qWwNQth2KiQ:qkwOPmJfBr0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=qWwNQth2KiQ:qkwOPmJfBr0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PageBrooks/~4/qWwNQth2KiQ" height="1" width="1"/&gt;</description>
            <dc:creator>Page Brooks</dc:creator>
            <guid>http://pagebrooks.com/archive/2009/03/14/silverlight-contrib-to-merge-with-silverlight-extensions.aspx</guid>
            <pubDate>Sat, 14 Mar 2009 17:38:08 GMT</pubDate>
            <comments>http://pagebrooks.com/archive/2009/03/14/silverlight-contrib-to-merge-with-silverlight-extensions.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://pagebrooks.com/comments/commentRss/96.aspx</wfw:commentRss>
            <trackback:ping>http://pagebrooks.com/services/trackbacks/96.aspx</trackback:ping>
        </item>
        <item>
            <title>Busy Schedule for March</title>
            <link>http://pagebrooks.com/archive/2009/02/26/busy-schedule-for-march.aspx</link>
            <description>&lt;p&gt;It looks like March is shaping up to be a busy month for me.  There are a lot of community events going on:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;March 1-4 - &lt;a href="http://www.mvpsummit2009.com" target="_blank"&gt;Microsoft 2009 MVP Summit&lt;/a&gt; in Seattle, WA &lt;/li&gt;    &lt;li&gt;March 7 – &lt;a href="http://www.rvnug.org/CodeCamp.aspx" target="_blank"&gt;Roanoke, VA Code Camp&lt;/a&gt; – Presenting an Introduction to the &lt;a href="http://www.codeplex.com/Silverlight" target="_blank"&gt;Silverlight Toolkit&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;March 10 – &lt;a href="http://pdanug.net" target="_blank"&gt;Pee Dee Area .NET User Group&lt;/a&gt; - Presenting an Introduction to the Silverlight Toolkit &lt;/li&gt;    &lt;li&gt;March 18–20 – &lt;a href="http://2009.visitmix.com" target="_blank"&gt;MIX09 Conference&lt;/a&gt; in Las Vegas, NV &lt;/li&gt;    &lt;li&gt;March 28 – &lt;a href="http://www.developersguild.org" target="_blank"&gt;Charlotte, NC Code Camp&lt;/a&gt; – Presenting Building and Serving Ads in Silverlight &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Since I am a new MVP, this will be my first trip to the MVP Summit.  I am really excited to finally meet (in person) the many Microsoft employees and fellow MVPs that I have had the opportunity to work with!&lt;/p&gt;  &lt;p&gt;I hope to see you at some of these events!&lt;/p&gt;&lt;img src="http://pagebrooks.com/aggbug/95.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yLHOpxBe2V5xIa7gRy2o7tW-LkA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yLHOpxBe2V5xIa7gRy2o7tW-LkA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yLHOpxBe2V5xIa7gRy2o7tW-LkA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yLHOpxBe2V5xIa7gRy2o7tW-LkA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=nR-zVjs8DdE:Bg_3LMN7ZiE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=nR-zVjs8DdE:Bg_3LMN7ZiE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=nR-zVjs8DdE:Bg_3LMN7ZiE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=nR-zVjs8DdE:Bg_3LMN7ZiE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?i=nR-zVjs8DdE:Bg_3LMN7ZiE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pagebrooks.com/~ff/PageBrooks?a=nR-zVjs8DdE:Bg_3LMN7ZiE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PageBrooks?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PageBrooks/~4/nR-zVjs8DdE" height="1" width="1"/&gt;</description>
            <dc:creator>Page Brooks</dc:creator>
            <guid>http://pagebrooks.com/archive/2009/02/26/busy-schedule-for-march.aspx</guid>
            <pubDate>Thu, 26 Feb 2009 13:22:39 GMT</pubDate>
            <comments>http://pagebrooks.com/archive/2009/02/26/busy-schedule-for-march.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://pagebrooks.com/comments/commentRss/95.aspx</wfw:commentRss>
            <trackback:ping>http://pagebrooks.com/services/trackbacks/95.aspx</trackback:ping>
        </item>
    </channel>
</rss>
