<?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.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-20740090</atom:id><lastBuildDate>Mon, 06 Jul 2009 14:37:16 +0000</lastBuildDate><title>Blankenthoughts</title><description>These are my thoughts.  Nothing more.</description><link>http://jeffblankenburg.com/default.aspx</link><managingEditor>noreply@blogger.com (Jeff Blankenburg)</managingEditor><generator>Blogger</generator><openSearch:totalResults>228</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><geo:lat>40.14852</geo:lat><geo:long>-82.912785</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Blankenthoughts" type="application/rss+xml" /><feedburner:emailServiceId>Blankenthoughts</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FBlankenthoughts" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FBlankenthoughts" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FBlankenthoughts" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Blankenthoughts" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FBlankenthoughts" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FBlankenthoughts" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FBlankenthoughts" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FBlankenthoughts" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.addtoany.com/?linkname=Blankenthoughts&amp;linkurl=http%3A%2F%2Ffeeds.feedburner.com%2FBlankenthoughts&amp;type=feed" src="http://www.addtoany.com/addfr-b.gif">Add to Any Feed Reader</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-1529284967915548269</guid><pubDate>Mon, 06 Jul 2009 05:00:00 +0000</pubDate><atom:updated>2009-07-06T09:19:09.777-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tutorial</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">31 days of Silverlight</category><title>Day #6: Silverlight and the Twitter "Hello, World"</title><description>This is the sixth post in my series of thirty-one, titled "31 Days of Silverlight". &lt;a href="http://jeffblankenburg.com/labels/31%20days%20of%20silverlight.aspx"&gt;You can find the master list here&lt;/a&gt;. Today, we are talking about how to talk to the Twitter API from a Silverlight application.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Why Twitter?&lt;/h2&gt;Aside from &lt;a href="http://www.jeffblankenburg.com/2008/08/top-10-things-new-twitter-users-need-to.aspx"&gt;the infinite value that Twitter offers to software developers&lt;/a&gt;, there's another reason we're doing this. Twitter apps are the new "&lt;a href="http://en.wikipedia.org/wiki/Hello,_world"&gt;Hello, World&lt;/a&gt;!" apps. No more is it enough to be able to write text to the screen. Now, you need to be able to talk to a web service, and write THAT text to the screen. This tutorial will show you how.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Setting up our Silverlight page&lt;/h2&gt;For simplicity, I am going to create a page that has four TextBlocks on it. You could do this many different ways, but I am patterning this off of the way that I created &lt;a href="http://jeffblankenburg.com/"&gt;the header on my blog&lt;/a&gt;. We will populate those TextBlocks with the most recent posts from my Twitter account. Here's what the base XAML looks like:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre   style="font-family:consolas;font-size:12px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Class&lt;/span&gt;&lt;span style="color:blue;"&gt;="SilverlightAndTwitterAPI.MainPage"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="400" &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red;"&gt;Background&lt;/span&gt;&lt;span style="color:blue;"&gt;="White"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="200" /&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ColumnDefinition &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="200" /&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="150" /&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="150" /&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;="Tweet1" &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="200" &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="150" &lt;/span&gt;&lt;span style="color:red;"&gt;Padding&lt;/span&gt;&lt;span style="color:blue;"&gt;="10" &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="Tweet1" /&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;="Tweet2" &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="200" &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="150" &lt;/span&gt;&lt;span style="color:red;"&gt;Padding&lt;/span&gt;&lt;span style="color:blue;"&gt;="10" &lt;/span&gt;&lt;span style="color:red;"&gt;Grid.Column&lt;/span&gt;&lt;span style="color:blue;"&gt;="1" &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="Tweet2" /&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;="Tweet3" &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="200" &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="150" &lt;/span&gt;&lt;span style="color:red;"&gt;Padding&lt;/span&gt;&lt;span style="color:blue;"&gt;="10" &lt;/span&gt;&lt;span style="color:red;"&gt;Grid.Row&lt;/span&gt;&lt;span style="color:blue;"&gt;="1" &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="Tweet3" /&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;="Tweet4" &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="200" &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="150" &lt;/span&gt;&lt;span style="color:red;"&gt;Padding&lt;/span&gt;&lt;span style="color:blue;"&gt;="10" &lt;/span&gt;&lt;span style="color:red;"&gt;Grid.Row&lt;/span&gt;&lt;span style="color:blue;"&gt;="1" &lt;/span&gt;&lt;span style="color:red;"&gt;Grid.Column&lt;/span&gt;&lt;span style="color:blue;"&gt;="1" &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;="Tweet4"/&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You may also notice a new concept in there: Grid. I wrote a series of articles on the layout options you have available to you in Silverlight, and there you can read about the &lt;a href="http://www.jeffblankenburg.com/2008/06/silverlight-layout-options-canvas-part.html"&gt;Canvas&lt;/a&gt;, the &lt;a href="http://jeffblankenburg.com/2008/06/silverlight-layout-options-grid-part-3.aspx"&gt;Grid&lt;/a&gt;, and the &lt;a href="http://www.jeffblankenburg.com/2008/06/silverlight-layout-options-stack-panel.html"&gt;StackPanel&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Talking To Twitter&lt;/h2&gt;Before you think we're going to be calling the Twitter API directly, I have to take the wind out of your sails. In order to call a web service that lives in another domain, we need to be able to do one of two things:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Call the Twitter guys and ask them to add a &lt;a href="http://timheuer.com/blog/archive/2008/04/06/silverlight-cross-domain-policy-file-snippet-intellisense.aspx"&gt;cross-domain policy&lt;/a&gt; entry for me.&lt;/li&gt;&lt;li&gt;Create a proxy web service that can make the calls for me.&lt;/li&gt;&lt;/ol&gt;You can guess which one will be much easier to implement, so we're going to go with #2.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Creating some classes.&lt;/h2&gt;Right click on your web project, and create two new classes: TwitterUser and TwitterStatus. They're going to be pretty simple classes, but they'll be necessary, especially if we want to add to the functionality of this app later.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;TwitterUser&lt;/h3&gt;&lt;div class="code"&gt;&lt;pre   style="font-family:consolas;font-size:12px;"&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Web;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// &lt;/span&gt;&lt;span style="color:green;"&gt;Summary description for TwitterUser&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;Serializable&lt;/span&gt;]&lt;br /&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TwitterUser&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;Name&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color:blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;TwitterStatus&lt;/h3&gt;&lt;div class="code"&gt;&lt;pre   style="font-family:consolas;font-size:12px;"&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Web;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// &lt;/span&gt;&lt;span style="color:green;"&gt;Summary description for TwitterStatus&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;Serializable&lt;/span&gt;]&lt;br /&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TwitterStatus&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;Text&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color:blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TwitterUser &lt;/span&gt;User&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color:blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Creating our web service&lt;/h2&gt;I might have to do 31 Days of Web Services at some point in the future, but for today, I'm going to just explain what I'm doing with this web service. We are using a standard ASMX web service, and we've got one WebMethod that calls to our Twitter data and returns it as a list. Here's the code:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.ComponentModel;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Web;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Web.Services;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Xml;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Xml.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.ObjectModel;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SilverlightAndTwitterAPI.Web&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:gray"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// &lt;/span&gt;&lt;span style="color:green"&gt;Summary description for TwitterProxy&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:gray"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;    &lt;/span&gt;[&lt;span style="color:#2b91af"&gt;WebService&lt;/span&gt;(Namespace = &lt;span style="color:#a31515"&gt;"http://tempuri.org/"&lt;/span&gt;)]&lt;br /&gt;    [&lt;span style="color:#2b91af"&gt;WebServiceBinding&lt;/span&gt;(ConformsTo = &lt;span style="color:#2b91af"&gt;WsiProfiles&lt;/span&gt;.BasicProfile1_1)]&lt;br /&gt;    &lt;span style="color:green"&gt;// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. &lt;br /&gt;    &lt;/span&gt;[System.Web.Script.Services.&lt;span style="color:#2b91af"&gt;ScriptService&lt;/span&gt;]&lt;br /&gt;    &lt;span style="color:blue"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;TwitterProxy &lt;/span&gt;: System.Web.Services.&lt;span style="color:#2b91af"&gt;WebService&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color:blue"&gt;private const string &lt;/span&gt;YourUsername = &lt;span style="color:#a31515"&gt;""&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color:blue"&gt;private const string &lt;/span&gt;YourPassword = &lt;span style="color:#a31515"&gt;""&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        [&lt;span style="color:#2b91af"&gt;WebMethod&lt;/span&gt;]&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;TwitterStatus&lt;/span&gt;&amp;gt; GetTwitterStatus(&lt;span style="color:blue"&gt;string &lt;/span&gt;twitterUser)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:green"&gt;//Create the HTTP path to the Twitter data we want.&lt;br /&gt;            &lt;/span&gt;&lt;span style="color:blue"&gt;string &lt;/span&gt;UserTimeline = &lt;span style="color:#a31515"&gt;"http://twitter.com/statuses/user_timeline/"  &lt;/span&gt;+ twitterUser + &lt;span style="color:#a31515"&gt;".xml"&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color:green"&gt;//Create the HTTP Web Request&lt;br /&gt;            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;WebRequest &lt;/span&gt;request = &lt;span style="color:#2b91af"&gt;HttpWebRequest&lt;/span&gt;.Create(&lt;span style="color:blue"&gt;string&lt;/span&gt;.Format(UserTimeline, twitterUser));&lt;br /&gt;            &lt;span style="color:green"&gt;//Add an empty set of credentials to this Request (we don't need to authenticate for the the request we are making)&lt;br /&gt;            &lt;/span&gt;request.Credentials = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;NetworkCredential&lt;/span&gt;(YourUsername, YourPassword);&lt;br /&gt;            &lt;span style="color:green"&gt;//Create our response object.&lt;br /&gt;            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;HttpWebResponse &lt;/span&gt;response = request.GetResponse() &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;HttpWebResponse&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;XDocument &lt;/span&gt;xmlData = &lt;span style="color:#2b91af"&gt;XDocument&lt;/span&gt;.Load(&lt;span style="color:#2b91af"&gt;XmlReader&lt;/span&gt;.Create(response.GetResponseStream()));&lt;br /&gt;            &lt;span style="color:green"&gt;//Using LINQ, gather the resulting data from our Response object, and populate our list.&lt;br /&gt;            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;TwitterStatus&lt;/span&gt;&amp;gt; twitterData = (&lt;span style="color:blue"&gt;from &lt;/span&gt;status &lt;span style="color:blue"&gt;in &lt;/span&gt;xmlData.Descendants(&lt;span style="color:#a31515"&gt;"status"&lt;/span&gt;)&lt;br /&gt;                                               &lt;span style="color:blue"&gt;select new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;TwitterStatus&lt;br /&gt;                                               &lt;/span&gt;{&lt;br /&gt;                                                   Text = status.Element(&lt;span style="color:#a31515"&gt;"text"&lt;/span&gt;).Value.Trim(),&lt;br /&gt;                                                   User = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;TwitterUser&lt;/span&gt;()&lt;br /&gt;                                                   {&lt;br /&gt;                                                       Name = status.Element(&lt;span style="color:#a31515"&gt;"user"&lt;/span&gt;).Element(&lt;span style="color:#a31515"&gt;"name"&lt;/span&gt;).Value.Trim()&lt;br /&gt;                                                   }&lt;br /&gt;                                               }).ToList();&lt;br /&gt;            &lt;span style="color:green"&gt;//Return our list of data to the calling method.&lt;br /&gt;            &lt;/span&gt;&lt;span style="color:blue"&gt;return &lt;/span&gt;twitterData;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;That may seem like a few lines of code, but it's actually pretty simple.  We're just calling to the Twitter API, getting an XML response, and parsing that XML response with LINQ to populate a List of TwitterStatus objects.  Now we should probably set our Silverlight app up to call that service.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Calling the service from Silverlight&lt;/h2&gt;In our startup method, I make a call to GetTweets(), which is the method that makes our web service call for us.  Inside that method, we have three lines of code.  The first creates a SoapClient for us, the second creates an event handler on our SoapClient that fires when the asynchronous call has been made, and the third line makes the asynchronous call, passing the specified Twitter username with it.&lt;br /&gt;&lt;br /&gt;The event handler method then receives the resulting List of TwitterStatuses, and assigns the Text property of each to each of our four TextBlocks that we created in the beginning.  The result?  Four populated text blocks with the 4 most recent tweets by the account you specify.  Not too hard, right?  Here's the code:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Controls;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Documents;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Input;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media.Animation;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SilverlightAndTwitterAPI&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public partial class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MainPage &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;UserControl&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;MainPage()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            GetTweets(&lt;span style="color:#a31515"&gt;"jblankenburg"&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;GetTweets(&lt;span style="color:blue"&gt;string &lt;/span&gt;username)&lt;br /&gt;        {&lt;br /&gt;            TwitterProxyServiceReference.&lt;span style="color:#2b91af"&gt;TwitterProxySoapClient &lt;/span&gt;twitterClient = &lt;span style="color:blue"&gt;new &lt;/span&gt;TwitterProxyServiceReference.&lt;span style="color:#2b91af"&gt;TwitterProxySoapClient&lt;/span&gt;();&lt;br /&gt;            twitterClient.GetTwitterStatusCompleted += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;SilverlightAndTwitterAPI.TwitterProxyServiceReference.&lt;span style="color:#2b91af"&gt;GetTwitterStatusCompletedEventArgs&lt;/span&gt;&amp;gt;(twitterClient_GetTwitterStatusCompleted);&lt;br /&gt;            twitterClient.GetTwitterStatusAsync(username);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;twitterClient_GetTwitterStatusCompleted(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, SilverlightAndTwitterAPI.TwitterProxyServiceReference.&lt;span style="color:#2b91af"&gt;GetTwitterStatusCompletedEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            Tweet1.Text = e.Result[0].Text;&lt;br /&gt;            Tweet2.Text = e.Result[1].Text;&lt;br /&gt;            Tweet3.Text = e.Result[2].Text;&lt;br /&gt;            Tweet4.Text = e.Result[3].Text;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Summary&lt;/h2&gt;This post was designed to show you how easy it is to call a web service asynchronously from Silverlight.  This application is running just below this paragraph, however some RSS readers may exclude it.  If you can't see it, &lt;a href="http://jeffblankenburg.com/codesamples/silverlightandtwitterapi/silverlightandtwitterapitestpage.html"&gt;click here to see this Silverlight app calling the Twitter API.&lt;/a&gt;  You can also &lt;a href="http://jeffblankenburg.com/codesamples/silverlightandtwitterapi/silverlightandtwitterapi.zip"&gt;download the demo code for this Twitter to Silverlight application here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300"&gt;&lt;br /&gt;   &lt;param name="source" value="http://jeffblankenburg.com/codesamples/silverlightandtwitterapi/ClientBin/SilverlightAndTwitterAPI.xap"/&gt;&lt;br /&gt;   &lt;param name="onerror" value="onSilverlightError" /&gt;&lt;br /&gt;   &lt;param name="background" value="white" /&gt;&lt;br /&gt;   &lt;param name="autoUpgrade" value="true" /&gt;&lt;br /&gt;&lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;&lt;br /&gt;   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=141205" style="text-decoration: none;"&gt;&lt;br /&gt;        &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt;&lt;br /&gt;   &lt;/a&gt;&lt;br /&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-1529284967915548269?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=0QvWkam1km8:zkcuodqFIaU:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=0QvWkam1km8:zkcuodqFIaU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=0QvWkam1km8:zkcuodqFIaU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=0QvWkam1km8:zkcuodqFIaU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=0QvWkam1km8:zkcuodqFIaU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=0QvWkam1km8:zkcuodqFIaU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=0QvWkam1km8:zkcuodqFIaU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=0QvWkam1km8:zkcuodqFIaU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=0QvWkam1km8:zkcuodqFIaU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=0QvWkam1km8:zkcuodqFIaU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=0QvWkam1km8:zkcuodqFIaU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/0QvWkam1km8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/0QvWkam1km8/day-6-silverlight-and-twitter-hello.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/07/day-6-silverlight-and-twitter-hello.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-6755257897094578285</guid><pubDate>Sun, 05 Jul 2009 05:00:00 +0000</pubDate><atom:updated>2009-07-05T15:46:54.426-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tutorial</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">31 days of Silverlight</category><title>Day #5: Silverlight Drag and Drop</title><description>This is the fifth day of &lt;a href="http://jeffblankenburg.com/labels/31%20days%20of%20Silverlight.aspx"&gt;31 Days of Silverlight&lt;/a&gt;.  Today's post is on enabling Drag &amp;amp; Drop in a Silverlight application.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Why Drag &amp;amp; Drop?&lt;/h2&gt;Drag &amp;amp; Drop is an important feature to think about, because it's one of those gestures that we use all the time on our computers, and never even think about it.  Moving files to the Trash, moving text from one area in a document to another, there's plenty of applications for it.  It's not generally a gesture we associate with the web, which is yet another reason to try and change that perception.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Create a few XAML objects&lt;/h2&gt;For simplicity, I am creating two Rectangles and an Ellipse.  We will have a circle, square, and rectangle.  Each one will be a different color.  Here's the XAML:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightDragAndDrop.Page"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="White"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Ellipse &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="CircleRed" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;="Red" &lt;/span&gt;&lt;span style="color:red"&gt;Stroke&lt;/span&gt;&lt;span style="color:blue"&gt;="Black" &lt;/span&gt;&lt;span style="color:red"&gt;StrokeThickness&lt;/span&gt;&lt;span style="color:blue"&gt;="2" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Top&lt;/span&gt;&lt;span style="color:blue"&gt;="150" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:blue"&gt;="50" /&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Rectangle &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="SquareBlue" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;="Blue" &lt;/span&gt;&lt;span style="color:red"&gt;Stroke&lt;/span&gt;&lt;span style="color:blue"&gt;="Black" &lt;/span&gt;&lt;span style="color:red"&gt;StrokeThickness&lt;/span&gt;&lt;span style="color:blue"&gt;="2" /&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Rectangle &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="RectangleGreen" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="200" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;="Green" &lt;/span&gt;&lt;span style="color:red"&gt;Stroke&lt;/span&gt;&lt;span style="color:blue"&gt;="Black" &lt;/span&gt;&lt;span style="color:red"&gt;StrokeThickness&lt;/span&gt;&lt;span style="color:blue"&gt;="2" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Top&lt;/span&gt;&lt;span style="color:blue"&gt;="50" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:blue"&gt;="150" /&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Create some event handlers&lt;/h2&gt;The rest of this post will take place in the code-behind for our Page.xaml file.  The first step is to add some event handlers to our shapes.  We can do this in our startup method, but because we're going to have several lines of code here, I prefer to extract this into its own method.  Here's what my startup and new InitializeEvents() methods look like:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;Page()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            InitializeEvents();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;public void &lt;/span&gt;InitializeEvents()&lt;br /&gt;        {&lt;br /&gt;            CircleRed.MouseLeftButtonDown += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseButtonEventHandler&lt;/span&gt;(Shape_MouseLeftButtonDown);&lt;br /&gt;            CircleRed.MouseMove += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseEventHandler&lt;/span&gt;(Shape_MouseMove);&lt;br /&gt;            CircleRed.MouseLeftButtonUp += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseButtonEventHandler&lt;/span&gt;(Shape_MouseLeftButtonUp);&lt;br /&gt;&lt;br /&gt;            SquareBlue.MouseLeftButtonDown += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseButtonEventHandler&lt;/span&gt;(Shape_MouseLeftButtonDown);&lt;br /&gt;            SquareBlue.MouseMove += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseEventHandler&lt;/span&gt;(Shape_MouseMove);&lt;br /&gt;            SquareBlue.MouseLeftButtonUp += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseButtonEventHandler&lt;/span&gt;(Shape_MouseLeftButtonUp);&lt;br /&gt;&lt;br /&gt;            RectangleGreen.MouseLeftButtonDown += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseButtonEventHandler&lt;/span&gt;(Shape_MouseLeftButtonDown);&lt;br /&gt;            RectangleGreen.MouseMove += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseEventHandler&lt;/span&gt;(Shape_MouseMove);&lt;br /&gt;            RectangleGreen.MouseLeftButtonUp += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseButtonEventHandler&lt;/span&gt;(Shape_MouseLeftButtonUp);&lt;br /&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Shape_MouseLeftButtonDown&lt;/h2&gt;In our MouseLeftButtonDown event method, we need to determine a few things.  First, we're going to need the current mouse position.  This will be vital.  We're also going to have to capture the mouse movements going forward.  Here's what we need to do:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;        &lt;span style="color:blue"&gt;public void &lt;/span&gt;Remote_MouseLeftButtonDown(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseButtonEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            &lt;br /&gt;            mouseY = e.GetPosition(&lt;span style="color:blue"&gt;null&lt;/span&gt;).Y;&lt;br /&gt;            mouseX = e.GetPosition(&lt;span style="color:blue"&gt;null&lt;/span&gt;).X;&lt;br /&gt;            isMouseCaptured = &lt;span style="color:blue"&gt;true&lt;/span&gt;;&lt;br /&gt;            Remote.CaptureMouse();&lt;br /&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You'll notice that I am also setting a boolean value called isMouseCaptured.  This is because in our MouseMove method, we're going to want to be able to check and see if the mouse movement is being captured.  All of our movement action will depend on this.  Make sure to define this boolean value (as well as the mouseX and mouseY variables) as properties of our class.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Shape_MouseMove&lt;/h2&gt;This is our "meat and potatoes" method.  This is where the bulk of our work will be done.  We'll need to calculate the offset of the mouse from the position of the shape, and set the new top and left values of our shape in relation to the mouse's position.  Here's the code:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;Shape_MouseMove(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;if &lt;/span&gt;(isMouseCaptured)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color:#2b91af"&gt;Shape &lt;/span&gt;s = sender &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Shape&lt;/span&gt;;&lt;br /&gt;                &lt;span style="color:blue"&gt;double &lt;/span&gt;deltaY = e.GetPosition(&lt;span style="color:blue"&gt;null&lt;/span&gt;).Y - mouseY;&lt;br /&gt;                &lt;span style="color:blue"&gt;double &lt;/span&gt;deltaX = e.GetPosition(&lt;span style="color:blue"&gt;null&lt;/span&gt;).X - mouseX;&lt;br /&gt;                &lt;span style="color:blue"&gt;double &lt;/span&gt;newTop = deltaY + (&lt;span style="color:blue"&gt;double&lt;/span&gt;)s.GetValue(&lt;span style="color:#2b91af"&gt;Canvas&lt;/span&gt;.TopProperty);&lt;br /&gt;                &lt;span style="color:blue"&gt;double &lt;/span&gt;newLeft = deltaX + (&lt;span style="color:blue"&gt;double&lt;/span&gt;)s.GetValue(&lt;span style="color:#2b91af"&gt;Canvas&lt;/span&gt;.LeftProperty);&lt;br /&gt;&lt;br /&gt;                s.SetValue(&lt;span style="color:#2b91af"&gt;Canvas&lt;/span&gt;.TopProperty, newTop);&lt;br /&gt;                s.SetValue(&lt;span style="color:#2b91af"&gt;Canvas&lt;/span&gt;.LeftProperty, newLeft);&lt;br /&gt;&lt;br /&gt;                mouseY = e.GetPosition(&lt;span style="color:blue"&gt;null&lt;/span&gt;).Y;&lt;br /&gt;                mouseX = e.GetPosition(&lt;span style="color:blue"&gt;null&lt;/span&gt;).X;&lt;br /&gt;            }&lt;br /&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The deltaX and deltaY values are calculating the difference between where the mouse WAS, and where the mouse IS.  We use that data in conjunction with the current position of the shape to move it to its next position.  The two s.SetValue statements are setting the new Top and Left properties of the current shape.  Finally, we record where our mouse is, so we have something to compare to the next time we come through this method.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Shape_MouseLeftMouseButtonUp&lt;/h2&gt;This is more of a cleanup method than anything else.  We set our boolean value to false, release the mouse capture, and devalue the mouseX and mouseY values.  Here's what it looks like:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;Shape_MouseLeftButtonUp(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseButtonEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;Shape &lt;/span&gt;s = sender &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Shape&lt;/span&gt;;&lt;br /&gt;            isMouseCaptured = &lt;span style="color:blue"&gt;false&lt;/span&gt;;&lt;br /&gt;            s.ReleaseMouseCapture();&lt;br /&gt;            mouseY = -1;&lt;br /&gt;            mouseX = -1;&lt;br /&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;It works, but we still have a problem.&lt;/h2&gt;At this point, you should have a working drag &amp;amp; drop example in Silverlight.  However, you might notice, for example, that while we can drag the circle around, it stays behind the other shapes.  In a true drag &amp;amp; drop example, we'd want the object we are dragging to be on top of everything else.  To do this, we need to modify the z-index of the shape as we grab it.  That means we'll do it in the Shape_MouseLeftButtonDown method.  I have created another global variable called zIndex, not surprisingly, and each time you click on Shape, we increment the zIndex value of that Shape, and add one more to the variable.  Here's the two lines of code to get it done in our method:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;            s.SetValue(&lt;span style="color:#2b91af"&gt;Canvas&lt;/span&gt;.ZIndexProperty, zIndex);&lt;br /&gt;            zIndex++;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Sample Code&lt;/h2&gt;You should now have a fully functional drag &amp;amp; drop example.  If you'd like to see my entire code in a working state, you can &lt;a href="http://jeffblankenburg.com/codesamples/silverlightdraganddrop/silverlightdraganddrop.zip"&gt;download my Silverlight Drag &amp; Drop example here&lt;/a&gt;.  This example should also be running below this paragraph.  If it isn't, you can &lt;a href="http://jeffblankenburg.com/codesamples/silverlightdraganddrop/silverlightdraganddroptestpage.html"&gt;click here to see a working example of Silverlight Drag &amp;amp; Drop&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300"&gt;&lt;br /&gt;   &lt;param name="source" value="http://jeffblankenburg.com/codesamples/silverlightdraganddrop/ClientBin/SilverlightDragAndDrop.xap"/&gt;&lt;br /&gt;   &lt;param name="background" value="white" /&gt;&lt;br /&gt;   &lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;&lt;br /&gt;   &lt;param name="autoUpgrade" value="true" /&gt;&lt;br /&gt;   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;&lt;br /&gt;        &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt;&lt;br /&gt;   &lt;/a&gt;&lt;br /&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-6755257897094578285?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zdKZb8U_T4Y:4n58_U-1OVA:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zdKZb8U_T4Y:4n58_U-1OVA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=zdKZb8U_T4Y:4n58_U-1OVA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zdKZb8U_T4Y:4n58_U-1OVA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zdKZb8U_T4Y:4n58_U-1OVA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=zdKZb8U_T4Y:4n58_U-1OVA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zdKZb8U_T4Y:4n58_U-1OVA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zdKZb8U_T4Y:4n58_U-1OVA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=zdKZb8U_T4Y:4n58_U-1OVA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zdKZb8U_T4Y:4n58_U-1OVA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zdKZb8U_T4Y:4n58_U-1OVA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/zdKZb8U_T4Y" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/zdKZb8U_T4Y/day-5-silverlight-drag-and-drop.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/07/day-5-silverlight-drag-and-drop.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-322785755220337503</guid><pubDate>Sat, 04 Jul 2009 05:00:00 +0000</pubDate><atom:updated>2009-07-04T01:00:32.684-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tutorial</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">31 days of Silverlight</category><title>Day #4: Communicating Between Two Silverlight Controls</title><description>Have you ever wondered how to get more than one Silverlight element on your page?  Have you ever wondered how to get two Silverlight controls to communicate?  This post will address both of those questions.&lt;br /&gt;&lt;br /&gt;For those of you not pondering those questions, here's a common scenario:  You want to have a common Silverlight navigation on your page, and you don't want to redirect the user to another page for each click.  Instead, we want a second Silverlight element on the page that changes as we click the nav.  &lt;br /&gt;&lt;br /&gt;It's generally bad user experience to put everything in one, giant Silverlight container, because it will take FOREVER to load, forcing your users to sit and wait before they can do anything.  By being more modular, we improve load times, and it's actually pretty simple to do.  Let's get started:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;1.  Create your Silverlight project.&lt;/h2&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;" src="http://jeffblankenburg.com/uploaded_images/1-createsilverlightproject-731104.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;Make sure you create your accompanying Web project as well..&lt;br /&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;" src="http://jeffblankenburg.com/uploaded_images/1-addwebproject-779168.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;2.  Make this XAML unique.&lt;/h2&gt;I'm just going to make the background of the Silverlight app orange.  I've also added a "1" so that I'm sure which control it is.  When we put 2 Silverlight controls on a page, we want to make sure we know which is which.  There are also three buttons on this screen.  When the user clicks those buttons, we're going to change the background color of the other Silverlight control.  We'll get to the event handler code a little later.  (You might also need to add the System.Windows.Browser namespace...it's for talking to the DOM).  Here's the XAML I am using:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightWithTwoControls.Page"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="Orange" &lt;/span&gt;&lt;span style="color:red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;="Center" &lt;/span&gt;&lt;span style="color:red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;="Center" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red"&gt;Text&lt;/span&gt;&lt;span style="color:blue"&gt;="1" &lt;/span&gt;&lt;span style="color:red"&gt;FontSize&lt;/span&gt;&lt;span style="color:blue"&gt;="100"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="Green" &lt;/span&gt;&lt;span style="color:red"&gt;Content&lt;/span&gt;&lt;span style="color:blue"&gt;="Green" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="25" &lt;/span&gt;&lt;span style="color:red"&gt;Margin&lt;/span&gt;&lt;span style="color:blue"&gt;="10" &lt;/span&gt;&lt;span style="color:red"&gt;Click&lt;/span&gt;&lt;span style="color:blue"&gt;="Button_Click" /&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="Purple" &lt;/span&gt;&lt;span style="color:red"&gt;Content&lt;/span&gt;&lt;span style="color:blue"&gt;="Purple" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="25" &lt;/span&gt;&lt;span style="color:red"&gt;Margin&lt;/span&gt;&lt;span style="color:blue"&gt;="10" &lt;/span&gt;&lt;span style="color:red"&gt;Click&lt;/span&gt;&lt;span style="color:blue"&gt;="Button_Click" /&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="Blue" &lt;/span&gt;&lt;span style="color:red"&gt;Content&lt;/span&gt;&lt;span style="color:blue"&gt;="Blue" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="25" &lt;/span&gt;&lt;span style="color:red"&gt;Margin&lt;/span&gt;&lt;span style="color:blue"&gt;="10" &lt;/span&gt;&lt;span style="color:red"&gt;Click&lt;/span&gt;&lt;span style="color:blue"&gt;="Button_Click" /&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;3.  Create another Silverlight project.&lt;/h2&gt;Each Silverlight project will be independent of each other.  Each Silverlight project creates ONE XAP file, and since we need two, this is the best solution.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jeffblankenburg.com/uploaded_images/3-createsecondproject-768322.png"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 193px;" src="http://jeffblankenburg.com/uploaded_images/3-createsecondproject-768307.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;4.  Mark up our second XAML file.&lt;/h2&gt;This file is even simpler.  We're only modifying the background color and adding a 2 for identification.  Here's the code:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SecondControl.Page"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="#666666" &lt;/span&gt;&lt;span style="color:red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;="Center" &lt;/span&gt;&lt;span style="color:red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;="Center" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red"&gt;Text&lt;/span&gt;&lt;span style="color:blue"&gt;="2" &lt;/span&gt;&lt;span style="color:red"&gt;FontSize&lt;/span&gt;&lt;span style="color:blue"&gt;="100"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;5.  Let's add these to our .aspx page.&lt;/h2&gt;We're just going to have 2 &amp;lt;asp:Silverlight&amp;gt; tags on our page in this example, pointing to the two individual .xap files.  Here's what the HTML looks like:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="background:#ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue"&gt;@ &lt;/span&gt;&lt;span style="color:#a31515"&gt;Page &lt;/span&gt;&lt;span style="color:red"&gt;Language&lt;/span&gt;&lt;span style="color:blue"&gt;="C#" &lt;/span&gt;&lt;span style="color:red"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="color:blue"&gt;="true" &lt;/span&gt;&lt;span style="background:#ffee62"&gt;%&amp;gt;&lt;br /&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue"&gt;@ &lt;/span&gt;&lt;span style="color:#a31515"&gt;Register &lt;/span&gt;&lt;span style="color:red"&gt;Assembly&lt;/span&gt;&lt;span style="color:blue"&gt;="System.Web.Silverlight" &lt;/span&gt;&lt;span style="color:red"&gt;Namespace&lt;/span&gt;&lt;span style="color:blue"&gt;="System.Web.UI.SilverlightControls" &lt;/span&gt;&lt;span style="color:red"&gt;TagPrefix&lt;/span&gt;&lt;span style="color:blue"&gt;="asp" &lt;/span&gt;&lt;span style="background:#ffee62"&gt;%&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#a31515"&gt;DOCTYPE &lt;/span&gt;&lt;span style="color:red"&gt;html PUBLIC &lt;/span&gt;&lt;span style="color:blue"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;html &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://www.w3.org/1999/xhtml" &lt;/span&gt;&lt;span style="color:red"&gt;style&lt;/span&gt;&lt;span style="color:blue"&gt;="&lt;/span&gt;&lt;span style="color:red"&gt;height&lt;/span&gt;:&lt;span style="color:blue"&gt;100%&lt;/span&gt;;&lt;span style="color:blue"&gt;"&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;head &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;="server"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;title&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;Silverlight With Two Controls&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;title&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;head&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;body &lt;/span&gt;&lt;span style="color:red"&gt;style&lt;/span&gt;&lt;span style="color:blue"&gt;="&lt;/span&gt;&lt;span style="color:red"&gt;height&lt;/span&gt;:&lt;span style="color:blue"&gt;100%&lt;/span&gt;;&lt;span style="color:red"&gt;margin&lt;/span&gt;:&lt;span style="color:blue"&gt;0&lt;/span&gt;;&lt;span style="color:blue"&gt;"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;form &lt;/span&gt;&lt;span style="color:red"&gt;id&lt;/span&gt;&lt;span style="color:blue"&gt;="form1" &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;="server" &lt;/span&gt;&lt;span style="color:red"&gt;style&lt;/span&gt;&lt;span style="color:blue"&gt;="&lt;/span&gt;&lt;span style="color:red"&gt;height&lt;/span&gt;:&lt;span style="color:blue"&gt;100%&lt;/span&gt;;&lt;span style="color:blue"&gt;"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;ScriptManager &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;="ScriptManager1" &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;="server"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;ScriptManager&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;div  &lt;/span&gt;&lt;span style="color:red"&gt;style&lt;/span&gt;&lt;span style="color:blue"&gt;="&lt;/span&gt;&lt;span style="color:red"&gt;position&lt;/span&gt;:&lt;span style="color:blue"&gt;absolute&lt;/span&gt;;&lt;span style="color:red"&gt;top&lt;/span&gt;:&lt;span style="color:blue"&gt;10px&lt;/span&gt;;&lt;span style="color:red"&gt;left&lt;/span&gt;:&lt;span style="color:blue"&gt;10px&lt;/span&gt;;&lt;span style="color:blue"&gt;"&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Silverlight &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;="Xaml1" &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;="server" &lt;/span&gt;&lt;span style="color:red"&gt;Source&lt;/span&gt;&lt;span style="color:blue"&gt;="/ClientBin/SilverlightWithTwoControls.xap" &lt;/span&gt;&lt;span style="color:red"&gt;MinimumVersion&lt;/span&gt;&lt;span style="color:blue"&gt;="2.0.31005.0" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300" /&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;div&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;div &lt;/span&gt;&lt;span style="color:red"&gt;style&lt;/span&gt;&lt;span style="color:blue"&gt;="&lt;/span&gt;&lt;span style="color:red"&gt;position&lt;/span&gt;:&lt;span style="color:blue"&gt;absolute&lt;/span&gt;;&lt;span style="color:red"&gt;top&lt;/span&gt;:&lt;span style="color:blue"&gt;320px&lt;/span&gt;;&lt;span style="color:red"&gt;left&lt;/span&gt;:&lt;span style="color:blue"&gt;10px&lt;/span&gt;;&lt;span style="color:blue"&gt;"&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Silverlight &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;="Xaml2" &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;="server" &lt;/span&gt;&lt;span style="color:red"&gt;Source&lt;/span&gt;&lt;span style="color:blue"&gt;="/ClientBin/SecondControl.xap" &lt;/span&gt;&lt;span style="color:red"&gt;MinimumVersion&lt;/span&gt;&lt;span style="color:blue"&gt;="2.0.31005.0" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300" /&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;div&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;form&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;body&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;html&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;6. Writing the button event handler.&lt;/h2&gt;We need those buttons to actually do something.  Let's write that event handler code.  Here's what it looks like:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;private void &lt;/span&gt;Button_Click(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;RoutedEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;Button &lt;/span&gt;clicky = sender &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Button&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;HtmlPage&lt;/span&gt;.Window.Invoke(&lt;span style="color:#a31515"&gt;"changeColor"&lt;/span&gt;, clicky.Name);&lt;br /&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;7. Say it ain't so...&lt;/h2&gt;I don't know how many times I can tell you that Javascript rules the world, but here's another example.  We're going to leverage the power of Javascript to talk between our Silverlight objects.  Because it has the ability to leverage the Silverlight DOM, it's actually a very useful and powerful tool.  (And for all of you naysayers, if a user has Javascript turned off, it's HIGHLY likely they're not running rich UI plugins like Silverlight or Flash either.)&lt;br /&gt;&lt;br /&gt;Anyways, there's a pretty simple Javascript function we can write to get this action taken care of.  In our previous step, we specified the name of the Javascript function, changeColors.  We also pass the Name value of the Button, which just happens to be the name of the color we're going to be changing the other control to.  Forethought is cool.  Here's what my Javascript function looks like:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;function &lt;/span&gt;changeColor(color) {&lt;br /&gt;            slObject = document.getElementById(&lt;span style="color:#a31515"&gt;"Xaml2"&lt;/span&gt;);&lt;br /&gt;            slObject.Content.Page.ChangeBackgroundColor(color);&lt;br /&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;What we've done here is call the method ChangeBackgroundColor inside the Xaml2 control.  We're passing the color we want to change it to.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;8. Writing the final method in the 2nd control.&lt;/h2&gt;Now we just need to write that method in the code-behind of our second XAML file, and we should be done.  Here's my final code for the second control:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Controls;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Documents;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Input;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media.Animation;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Shapes;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Browser;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SecondControl&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public partial class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Page &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;UserControl&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;Page()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [&lt;span style="color:#2b91af"&gt;ScriptableMember&lt;/span&gt;]&lt;br /&gt;        &lt;span style="color:blue"&gt;public void &lt;/span&gt;ChangeBackgroundColor(&lt;span style="color:blue"&gt;string &lt;/span&gt;colorName)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;if &lt;/span&gt;(colorName == &lt;span style="color:#a31515"&gt;"Blue"&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                LayoutRoot.Background = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Colors&lt;/span&gt;.Blue);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color:blue"&gt;else if &lt;/span&gt;(colorName == &lt;span style="color:#a31515"&gt;"Purple"&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                LayoutRoot.Background = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Colors&lt;/span&gt;.Purple);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color:blue"&gt;else if &lt;/span&gt;(colorName == &lt;span style="color:#a31515"&gt;"Green"&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                LayoutRoot.Background = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Colors&lt;/span&gt;.Green);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You might have noticed that there's something a little different in there.  We have a decorator [ScriptableMember] in there.  We had to make some changes to our application to make it exposed to Javascript.  By default, it can't just call inside our Silverlight app.  We have to make that happen in code.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;9.  Editing our App.xaml file.&lt;/h2&gt;In the second Silverlight project, open your app.xaml file.  In our Application_Startup method, you should have a line that looks like &lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;this&lt;/span&gt;.RootVisual = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Page&lt;/span&gt;();&lt;/pre&gt;.  We're going to add one more line after that, which registers our control as a Scriptable object.  Here's the entire method, after my modifications:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;private void &lt;/span&gt;Application_Startup(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;StartupEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;this&lt;/span&gt;.RootVisual = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Page&lt;/span&gt;();&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;HtmlPage&lt;/span&gt;.RegisterScriptableObject(&lt;span style="color:#a31515"&gt;"Page"&lt;/span&gt;, &lt;span style="color:blue"&gt;this&lt;/span&gt;.RootVisual);&lt;br /&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This line of code, in conjunction with the decorator we added in Step #8 will mean we're done, and that our controls can now affect each other.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Sample Code&lt;/h2&gt;&lt;a href="http://www.jeffblankenburg.com/codesamples/silverlightwithtwocontrols/silverlightwithtwocontrols.zip"&gt;You can download the sample code for this example here&lt;/a&gt;.  You should also be able to see these controls below this paragraph, but RSS readers like to ignore it.  If it's not showing up, you can also see &lt;a href="http://www.jeffblankenburg.com/codesamples/silverlightwithtwocontrols/secondcontroltestpage.html"&gt;Two Silverlight Controls together by clicking here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;   function changeColor(color) {&lt;br /&gt;    slObject = document.getElementById("Xaml2");&lt;br /&gt;    slObject.Content.Page.ChangeBackgroundColor(color);&lt;br /&gt;   }&lt;br /&gt;  &lt;/script&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;object id="Xaml1" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300"&gt;&lt;br /&gt;   &lt;param name="source" value="http://jeffblankenburg.com/codesamples/silverlightwithtwocontrols/ClientBin/SilverlightWithTwoControls.xap"/&gt;&lt;br /&gt;   &lt;param name="onerror" value="onSilverlightError" /&gt;&lt;br /&gt;   &lt;param name="background" value="white" /&gt;&lt;br /&gt;   &lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;&lt;br /&gt;   &lt;param name="autoUpgrade" value="true" /&gt;&lt;br /&gt;   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;&lt;br /&gt;        &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt;&lt;br /&gt;   &lt;/a&gt;&lt;br /&gt;  &lt;/object&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;object id="Xaml2" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300"&gt;&lt;br /&gt;   &lt;param name="source" value="http://jeffblankenburg.com/codesamples/silverlightwithtwocontrols/ClientBin/SecondControl.xap"/&gt;&lt;br /&gt;   &lt;param name="onerror" value="onSilverlightError" /&gt;&lt;br /&gt;   &lt;param name="background" value="white" /&gt;&lt;br /&gt;   &lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;&lt;br /&gt;   &lt;param name="autoUpgrade" value="true" /&gt;&lt;br /&gt;   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;&lt;br /&gt;        &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt;&lt;br /&gt;   &lt;/a&gt;&lt;br /&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-322785755220337503?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=vNxWcLw_GfU:QPsrERsvgwE:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=vNxWcLw_GfU:QPsrERsvgwE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=vNxWcLw_GfU:QPsrERsvgwE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=vNxWcLw_GfU:QPsrERsvgwE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=vNxWcLw_GfU:QPsrERsvgwE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=vNxWcLw_GfU:QPsrERsvgwE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=vNxWcLw_GfU:QPsrERsvgwE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=vNxWcLw_GfU:QPsrERsvgwE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=vNxWcLw_GfU:QPsrERsvgwE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=vNxWcLw_GfU:QPsrERsvgwE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=vNxWcLw_GfU:QPsrERsvgwE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/vNxWcLw_GfU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/vNxWcLw_GfU/day-4-communicating-between-two.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/07/day-4-communicating-between-two.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-2276698454083565842</guid><pubDate>Fri, 03 Jul 2009 05:00:00 +0000</pubDate><atom:updated>2009-07-03T06:56:57.142-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tutorial</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">31 days of Silverlight</category><title>Day #3: Custom Silverlight Loading Screen</title><description>This is the third post in my series of thirty-one, called, not surprisingly, "31 Days of Silverlight".  &lt;a href="http://jeffblankenburg.com/labels/31%20days%20of%20silverlight.aspx"&gt;You can find the master list here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also, before we get started here, don't forget that today is &lt;a href="http://jeffblankenburg.com/2009/06/celebrate-contribupendence-day-july-3rd.aspx"&gt;Contribupendence Day&lt;/a&gt;.  Take a moment to read this post about what Contribupedence Day is, and how you can participate.&lt;br /&gt;&lt;br /&gt;If you've ever seen a Silverlight application before, you've likely seen the default loading screen.  Here's a example of what I'm talking about:&lt;br /&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;" src="http://jeffblankenburg.com/uploaded_images/DefaultSilverlightLoadingScreen-750850.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;Now, there's nothing wrong with it, except that it's the thing you see EVERYWHERE.  There's a way to customize this screen, and you should.  It's an opportunity to re-inforce your branding, entertain your user, and differentiate yourself from everyone else.  Let's get started.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Building Our Loading Screen&lt;/h2&gt;The first thing to know about this loading screen is that it functions completely outside of our .xap file.  If you think about it though, it makes sense.  We're trying to monitor the loading percentage of our XAP file, so we could hardly expect our loading code to be inside it, right?&lt;br /&gt;&lt;br /&gt;So, instead of creating a new XAML file inside of our Silverlight project, we're going to create a XAML file inside our Web Project this time.  When you choose "Add &gt; New Item...", you're going to choose the "Silverlight JScript File."  This will create a XAML file in our web project, but otherwise, it's your standard XAML.  I've created one that has a TextBlock to display the percentage as a number, as well as a rectangle underneath.  This rectangle will be my percentage progress bar.  Here's the code (I named it LoadingScreen.xaml):&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;http://schemas.microsoft.com/client/2007&lt;/span&gt;" &lt;br /&gt;        &lt;span style="color:red"&gt;xmlns:x&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;" &lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;400&lt;/span&gt;" &lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;300&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas &lt;/span&gt;&lt;span style="color:red"&gt;x:Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;LayoutRoot&lt;/span&gt;"  &lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;#FFB5EFFF&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Rectangle &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;4&lt;/span&gt;" &lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;0&lt;/span&gt;" &lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;#FFE8B03A&lt;/span&gt;" &lt;span style="color:red"&gt;Stroke&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;#FF999999&lt;/span&gt;" &lt;span style="color:red"&gt;StrokeThickness&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;1&lt;/span&gt;" &lt;span style="color:red"&gt;x:Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;ProgressBar&lt;/span&gt;" &lt;span style="color:red"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;14&lt;/span&gt;" &lt;span style="color:red"&gt;Canvas.Top&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;156&lt;/span&gt;"&lt;span style="color:blue"&gt;/&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;100&lt;/span&gt;" &lt;span style="color:red"&gt;FontFamily&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;ROCK.TTF#Rockwell&lt;/span&gt;" &lt;span style="color:red"&gt;FontSize&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;48&lt;/span&gt;" &lt;span style="color:red"&gt;Text&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;Blankenthoughts&lt;/span&gt;" &lt;span style="color:red"&gt;Foreground&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;#FF6D6D6D&lt;/span&gt;" &lt;span style="color:red"&gt;x:Name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;Title&lt;/span&gt;" &lt;span style="color:red"&gt;Canvas.Top&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;56&lt;/span&gt;" &lt;span style="color:red"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;150&lt;/span&gt;" &lt;span style="color:blue"&gt;/&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Getting Our Loading Screen Loaded&lt;/h2&gt;So we've got a loading screen now, but we also need to make sure that our Silverlight &amp;lt;object&amp;gt; tag knows that we've got a custom loading screen.  We do this with a param tag in the HTML.  The splashscreensource tag specifies a XAML file that should be used instead of the default.  Here's how my entire HTML file looks now:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#a31515"&gt;DOCTYPE &lt;/span&gt;&lt;span style="color:red"&gt;html PUBLIC &lt;/span&gt;&lt;span style="color:blue"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;html &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://www.w3.org/1999/xhtml" &amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;head&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;title&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;SilverlightLoadingScreen&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;title&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;head&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;body&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;div &lt;/span&gt;&lt;span style="color:red"&gt;id&lt;/span&gt;&lt;span style="color:blue"&gt;="silverlightControlHost"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;object &lt;/span&gt;&lt;span style="color:red"&gt;id&lt;/span&gt;&lt;span style="color:blue"&gt;="xamlobject" &lt;/span&gt;&lt;span style="color:red"&gt;data&lt;/span&gt;&lt;span style="color:blue"&gt;="data:application/x-silverlight-2," &lt;/span&gt;&lt;span style="color:red"&gt;type&lt;/span&gt;&lt;span style="color:blue"&gt;="application/x-silverlight-2" &lt;/span&gt;&lt;span style="color:red"&gt;width&lt;/span&gt;&lt;span style="color:blue"&gt;="100%" &lt;/span&gt;&lt;span style="color:red"&gt;height&lt;/span&gt;&lt;span style="color:blue"&gt;="100%"&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;param &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;="splashscreensource" &lt;/span&gt;&lt;span style="color:red"&gt;value&lt;/span&gt;&lt;span style="color:blue"&gt;="LoadingScreen.xaml"/&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;param &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;="source" &lt;/span&gt;&lt;span style="color:red"&gt;value&lt;/span&gt;&lt;span style="color:blue"&gt;="ClientBin/SilverlightLoadingScreen.xap"/&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;param &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;="background" &lt;/span&gt;&lt;span style="color:red"&gt;value&lt;/span&gt;&lt;span style="color:blue"&gt;="white" /&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;object&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;div&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;body&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;html&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;What you may notice, if you're building along with me, is that the loading screen loads, but it doesn't change as the load progresses.  This is because we need to pay attention to the "onSourceDownloadProgressChanged" event.  Thankfully, we do with with another param tag in our &amp;lt;object&amp;gt; tag.  The value that we provide is actually the name of the Javascript function we will write. That tag looks like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;param &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;="onSourceDownloadProgressChanged" &lt;/span&gt;&lt;span style="color:red"&gt;value&lt;/span&gt;&lt;span style="color:blue"&gt;="onSourceDownloadProgressChanged" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;You didn't tell me there'd be Javascript&lt;/h2&gt;Ah, never doubt for a second that the Internet runs on Javascript.  Of course it does!  This function is simple, and is the glue that puts our XAML together with actual data.  I'll give you my function first, and then we can discuss the different parts of it.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;function &lt;/span&gt;onSourceDownloadProgressChanged(sender, eventArgs)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;var &lt;/span&gt;slObject = document.getElementById(&lt;span style="color:#a31515"&gt;"xamlobject"&lt;/span&gt;);&lt;br /&gt;            &lt;span style="color:blue"&gt;var &lt;/span&gt;progressBar = slObject.content.findName(&lt;span style="color:#a31515"&gt;"ProgressBar"&lt;/span&gt;);&lt;br /&gt;            &lt;span style="color:blue"&gt;var &lt;/span&gt;progressTitle = slObject.content.findName(&lt;span style="color:#a31515"&gt;"Title"&lt;/span&gt;);&lt;br /&gt;            &lt;span style="color:blue"&gt;if &lt;/span&gt;(eventArgs.progress)&lt;br /&gt;            {&lt;br /&gt;                progressBar.Width = eventArgs.progress * 370;&lt;br /&gt;                progressTitle.Text = parseInt(eventArgs.progress * 100) + &lt;span style="color:#a31515"&gt;"%"&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color:blue"&gt;else&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                progressBar.Width = eventArgs.get_progress() * 370;&lt;br /&gt;                progressTitle.Text = parseInt(eventArgs.get_progress() * 100) + &lt;span style="color:#a31515"&gt;"%"&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;slObject&lt;/strong&gt; - this is a reference to my Silverlight &amp;lt;object&amp;gt; tag on the page.  I need to get this in order to find the child elements, specifically my Rectangle and TextBlock elements.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;progressBar&lt;/strong&gt; - this is a reference to my ProgressBar Rectangle element within my XAML document.  Don't you wish getting through XML was always that easy?  It just searches through the document tree until it finds an element with the name I specified.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;progressTitle&lt;/strong&gt; - a TextBlock in the XAML that will hold the actual percentage of completion.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;eventArgs.progress&lt;/strong&gt; - this is the physical number that represents our completion percentage.  We use this to modify the width of our rectangle, so that it grows as the percentage increases.  I am also displaying this number in the TextBlock, appending a "%" to the end.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;eventArgs.get_progress()&lt;/strong&gt;&lt;/li&gt; - basically, we need to call the get_progress method in case our page is not already paying attention to it.  Once this has been called, however, it will default to the previous part of the if statement, using just the progress property of the eventArgs.&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Can I See A Working Example?&lt;/h2&gt;Absolutely.  Below is a working example of this custom loading screen in action.  If you don't see it, you're probably reading this post from an RSS reader.  &lt;a href="http://www.jeffblankenburg.com/codesamples/silverlightloadingscreen/silverlightloadingscreentestpage.html"&gt;Click here to see the Silverlight Loading Screen as a working example.&lt;/a&gt;  &lt;a href="http://www.jeffblankenburg.com/codesamples/silverlightloadingscreen/silverlightloadingscreen.zip"&gt;You can also click here to download my entire set of working code.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;     function onSourceDownloadProgressChanged(sender, eventArgs)&lt;br /&gt;     {&lt;br /&gt;      var slObject = document.getElementById("xamlobject");&lt;br /&gt;      var progressBar = slObject.content.findName("ProgressBar");&lt;br /&gt;      var progressTitle = slObject.content.findName("Title");&lt;br /&gt;      if (eventArgs.progress)&lt;br /&gt;      {&lt;br /&gt;       progressBar.Width = eventArgs.progress * 370;&lt;br /&gt;       progressTitle.Text = parseInt(eventArgs.progress * 100) + "%";&lt;br /&gt;      }&lt;br /&gt;      else&lt;br /&gt;      {&lt;br /&gt;       progressBar.Width = eventArgs.get_progress() * 370;&lt;br /&gt;       progressTitle.Text = parseInt(eventArgs.get_progress() * 100) + "%";&lt;br /&gt;      }&lt;br /&gt;     }&lt;br /&gt;    &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;object id="xamlobject" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300"&gt;&lt;br /&gt;   &lt;param name="splashscreensource" value="/codesamples/silverlightloadingscreen/LoadingScreen.xaml"/&gt;&lt;br /&gt;   &lt;param name="onSourceDownloadProgressChanged" value="onSourceDownloadProgressChanged" /&gt;&lt;br /&gt;   &lt;param name="source" value="http://www.jeffblankenburg.com/codesamples/silverlightloadingscreen/ClientBin/SilverlightLoadingScreen.xap"/&gt;&lt;br /&gt;   &lt;param name="onerror" value="onSilverlightError" /&gt;&lt;br /&gt;   &lt;param name="background" value="white" /&gt;&lt;br /&gt;   &lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;&lt;br /&gt;   &lt;param name="autoUpgrade" value="true" /&gt;&lt;br /&gt;   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;&lt;br /&gt;        &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt;&lt;br /&gt;   &lt;/a&gt;&lt;br /&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-2276698454083565842?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=qTFFa6yxxdE:xYglG-V9MM4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=qTFFa6yxxdE:xYglG-V9MM4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=qTFFa6yxxdE:xYglG-V9MM4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=qTFFa6yxxdE:xYglG-V9MM4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=qTFFa6yxxdE:xYglG-V9MM4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=qTFFa6yxxdE:xYglG-V9MM4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=qTFFa6yxxdE:xYglG-V9MM4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=qTFFa6yxxdE:xYglG-V9MM4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=qTFFa6yxxdE:xYglG-V9MM4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=qTFFa6yxxdE:xYglG-V9MM4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=qTFFa6yxxdE:xYglG-V9MM4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/qTFFa6yxxdE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/qTFFa6yxxdE/day-3-custom-silverlight-loading-screen.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/07/day-3-custom-silverlight-loading-screen.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-4566157920799152748</guid><pubDate>Thu, 02 Jul 2009 05:00:00 +0000</pubDate><atom:updated>2009-07-02T01:00:12.954-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tutorial</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">31 days of Silverlight</category><title>Day #2: Silverlight Screen Transitions</title><description>This is second of &lt;a href="http://jeffblankenburg.com/labels/31%20days%20of%20Silverlight.aspx"&gt;thirty-one posts on Silverlight&lt;/a&gt; I will be doing in July.  The first post was on the mouse events available to you in Silverlight.  Today's post is on Screen Transitions, or more specifically, moving from one XAML file to another.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Moving From One XAML File To Another&lt;/h2&gt;This is the simple part.  In your Silverlight project (mine is called SilverlightScreenTransitions), add a new XAML file.  You can do this by right clicking on the project name, and choosing "Add &gt; New Item."  You won't see "XAML File" as one of the choices, because each XAML file in Silverlight is considered a User Control.  So choose "Silverlight User Control," and give it a meaningful name, like page2.xaml.  :)&lt;br /&gt;&lt;br /&gt;Now jump back into your default XAML file, Page.xaml.  We need a button, or a link, or something that will allow us to navigation to our new page.  Here's the new XAML for our default page:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightScreenTransitions.Page"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="White"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Rectangle &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="Clicky" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="200" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="50" &lt;/span&gt;&lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;="Red" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Top&lt;/span&gt;&lt;span style="color:blue"&gt;="125" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Stroke&lt;/span&gt;&lt;span style="color:blue"&gt;="Black" &lt;/span&gt;&lt;span style="color:red"&gt;StrokeThickness&lt;/span&gt;&lt;span style="color:blue"&gt;="4" &lt;/span&gt;&lt;span style="color:red"&gt;MouseLeftButtonUp&lt;/span&gt;&lt;span style="color:blue"&gt;="Clicky_MouseLeftButtonUp"/&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;All this does is put a red rectangle in the middle of our control.  Next, we're going to need to edit our second page.  We'll just put a "Congratulations!" textbox on the page, so we know we made it.  Here's the XAML for Page2.xaml:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightScreenTransitions.Page2"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="White"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="200" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="50" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Top&lt;/span&gt;&lt;span style="color:blue"&gt;="125" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Text&lt;/span&gt;&lt;span style="color:blue"&gt;="Congratulations!" &lt;/span&gt;&lt;span style="color:red"&gt;TextAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;="Center" &lt;/span&gt;&lt;span style="color:red"&gt;FontSize&lt;/span&gt;&lt;span style="color:blue"&gt;="25"/&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The magic line of code&lt;/h3&gt;At this point, we have two XAML files, one with a rectangle (with an event handler), and the other with just a TextBlock.  When we click on the Rectangle, we want to go to the other XAML file.  Here's how you do it (in VB.NET, just ignore the semi-colon).  Just add this line to your event handler code in Page.xaml.cs (or .vb):&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;this&lt;/span&gt;.Content = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Page2&lt;/span&gt;();&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;I thought this post was about transitions...&lt;/h2&gt;Oh, patience, my friends.  Now that we know how to get from one screen to another, we can talk about transitions.  Let me first start by defining transition:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The animated movement from one XAML file to another.&lt;/strong&gt;  Think transitions in Powerpoint.  Fades, Dissolves, etc.  We'll create an example of that in this post.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Fading In and Out&lt;/h3&gt;We're going to create a fading transition from the first slide to the second.  What I'm going to do is create an animation in each XAML file.  In Page.xaml, we'll create an animation that fades out.  In Page2.xaml, we'll create an animation that fades it in.  Between the two, we'll jump from one file to the next, using the code we wrote earlier.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Page.xaml animation&lt;/h3&gt;The only difference is the new Storyboard I created.  It just takes the opacity of the LayoutRoot element from 100% to 0% in one second:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightScreenTransitions.Page"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Storyboard &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="FadeOut"&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DoubleAnimationUsingKeyFrames &lt;/span&gt;&lt;span style="color:red"&gt;BeginTime&lt;/span&gt;&lt;span style="color:blue"&gt;="00:00:00" &lt;/span&gt;&lt;span style="color:red"&gt;Storyboard.TargetName&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color:blue"&gt;="(UIElement.Opacity)"&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;SplineDoubleKeyFrame &lt;/span&gt;&lt;span style="color:red"&gt;KeyTime&lt;/span&gt;&lt;span style="color:blue"&gt;="00:00:00" &lt;/span&gt;&lt;span style="color:red"&gt;Value&lt;/span&gt;&lt;span style="color:blue"&gt;="1"/&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;SplineDoubleKeyFrame &lt;/span&gt;&lt;span style="color:red"&gt;KeyTime&lt;/span&gt;&lt;span style="color:blue"&gt;="00:00:01" &lt;/span&gt;&lt;span style="color:red"&gt;Value&lt;/span&gt;&lt;span style="color:blue"&gt;="0"/&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Storyboard&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="White" &lt;/span&gt;&lt;span style="color:red"&gt;Opacity&lt;/span&gt;&lt;span style="color:blue"&gt;="1"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Rectangle &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="Clicky" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="200" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="50" &lt;/span&gt;&lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;="Red" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Top&lt;/span&gt;&lt;span style="color:blue"&gt;="125" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Stroke&lt;/span&gt;&lt;span style="color:blue"&gt;="Black" &lt;/span&gt;&lt;span style="color:red"&gt;StrokeThickness&lt;/span&gt;&lt;span style="color:blue"&gt;="4" &lt;/span&gt;&lt;span style="color:red"&gt;MouseLeftButtonUp&lt;/span&gt;&lt;span style="color:blue"&gt;="Clicky_MouseLeftButtonUp"/&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Page2.xaml animation&lt;/h3&gt;We are doing the exact opposite animation for this file, but there's one other thing to consider in this case.  Even though our animation takes the opacity from 0% to 100%, we need to make sure that the initial opacity of our LayoutRoot element is set to 0%.  Without that, the XAML file will load with it at 100%, and then the animation will kick off, fading it from 0 to 100.  Not exactly the desired effect.  So you'll see the opacity specified in the LayoutRoot element as well.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightScreenTransitions.Page2"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Storyboard &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="FadeIn"&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;DoubleAnimationUsingKeyFrames &lt;/span&gt;&lt;span style="color:red"&gt;BeginTime&lt;/span&gt;&lt;span style="color:blue"&gt;="00:00:00" &lt;/span&gt;&lt;span style="color:red"&gt;Storyboard.TargetName&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color:blue"&gt;="(UIElement.Opacity)"&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;SplineDoubleKeyFrame &lt;/span&gt;&lt;span style="color:red"&gt;KeyTime&lt;/span&gt;&lt;span style="color:blue"&gt;="00:00:00" &lt;/span&gt;&lt;span style="color:red"&gt;Value&lt;/span&gt;&lt;span style="color:blue"&gt;="0"/&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;SplineDoubleKeyFrame &lt;/span&gt;&lt;span style="color:red"&gt;KeyTime&lt;/span&gt;&lt;span style="color:blue"&gt;="00:00:01" &lt;/span&gt;&lt;span style="color:red"&gt;Value&lt;/span&gt;&lt;span style="color:blue"&gt;="1"/&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Storyboard&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="White" &lt;/span&gt;&lt;span style="color:red"&gt;Opacity&lt;/span&gt;&lt;span style="color:blue"&gt;="0"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBlock &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="200" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="50" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Top&lt;/span&gt;&lt;span style="color:blue"&gt;="125" &lt;/span&gt;&lt;span style="color:red"&gt;Canvas.Left&lt;/span&gt;&lt;span style="color:blue"&gt;="100" &lt;/span&gt;&lt;span style="color:red"&gt;Text&lt;/span&gt;&lt;span style="color:blue"&gt;="Congratulations!" &lt;/span&gt;&lt;span style="color:red"&gt;TextAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;="Center" &lt;/span&gt;&lt;span style="color:red"&gt;FontSize&lt;/span&gt;&lt;span style="color:blue"&gt;="25"/&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Canvas&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;An Animation Event Handler?&lt;/h3&gt;So we obviously also need to change our code-behind, so that when we click, we call the animation.  But how do we know when the animation is done?  Well, we know it's going to take exactly ONE second, so technically, we could create a timer, wait 1 second, and then make the call to the second XAML file.  But that's messy, and depending on ANY sort of lag, would be inaccurate.  Thankfully, we have the ability to add event handlers to our animations as well.  So, we can create a "Completed" event handler on our FadeOut animation, which will get called immediately after the animation completes.  No guess work.  Here's our new code-behind:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Controls;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Documents;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Input;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media.Animation;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SilverlightScreenTransitions&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public partial class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Page &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;UserControl&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;Page()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            FadeOut.Completed += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;EventHandler&lt;/span&gt;(FadeOut_Completed);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;FadeOut_Completed(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;this&lt;/span&gt;.Content = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Page2&lt;/span&gt;();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color:blue"&gt;private void &lt;/span&gt;Clicky_MouseLeftButtonUp(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseButtonEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            FadeOut.Begin();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Catching the animation on the other side&lt;/h3&gt;Transitioning into the next XAML file is simple, in the initial method, we call the FadeOut animation we created.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Controls;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Documents;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Input;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media.Animation;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SilverlightScreenTransitions&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public partial class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Page2 &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;UserControl&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;Page2()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            FadeIn.Begin();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The final working example&lt;/h2&gt;Below is the Silverlight application, up and running.  If you're viewing this in an RSS reader, it may not show up, but you can &lt;a href="http://jeffblankenburg.com/codesamples/silverlightscreentransitions/SilverlightScreenTransitionsTestPage.html"&gt;click here to see the Silverlight Screen Transition working&lt;/a&gt;.  You can also &lt;a href="http://jeffblankenburg.com/codesamples/silverlightscreentransitions/SilverlightScreenTransitions.zip"&gt;download all of the source code for this project here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300"&gt;&lt;br /&gt;   &lt;param name="source" value="http://jeffblankenburg.com/codesamples/silverlightscreentransitions/ClientBin/SilverlightScreenTransitions.xap"/&gt;&lt;br /&gt;   &lt;param name="background" value="white" /&gt;&lt;br /&gt;   &lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;&lt;br /&gt;   &lt;param name="autoUpgrade" value="true" /&gt;&lt;br /&gt;   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;&lt;br /&gt;        &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt;&lt;br /&gt;   &lt;/a&gt;&lt;br /&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-4566157920799152748?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=aKFVtiuvOik:FwG-pjL_B6U:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=aKFVtiuvOik:FwG-pjL_B6U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=aKFVtiuvOik:FwG-pjL_B6U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=aKFVtiuvOik:FwG-pjL_B6U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=aKFVtiuvOik:FwG-pjL_B6U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=aKFVtiuvOik:FwG-pjL_B6U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=aKFVtiuvOik:FwG-pjL_B6U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=aKFVtiuvOik:FwG-pjL_B6U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=aKFVtiuvOik:FwG-pjL_B6U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=aKFVtiuvOik:FwG-pjL_B6U:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=aKFVtiuvOik:FwG-pjL_B6U:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/aKFVtiuvOik" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/aKFVtiuvOik/day-2-silverlight-screen-transitions.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/07/day-2-silverlight-screen-transitions.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-7123137715553657836</guid><pubDate>Wed, 01 Jul 2009 05:00:00 +0000</pubDate><atom:updated>2009-07-01T08:42:28.218-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tutorial</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">31 days of Silverlight</category><title>Day #1:  Mouse Events in Silverlight</title><description>In my inaugural post of the "&lt;a href="http://jeffblankenburg.com/labels/31%20days%20of%20Silverlight.aspx"&gt;31 Days of Silverlight&lt;/a&gt;," we're going to focus on Mouse Event handlers.  With an interactive application, you're often going to want to know when your users are clicking on stuff.  So, this is a tutorial on the different mouse events, and how to use them.  So, let's start with the beginning, and go forward from there.  &lt;a href="http://jeffblankenburg.com/codesamples/silverlightmouseevents.zip"&gt;You can download ALL of the sample code from this post here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;MouseEnter&lt;/h2&gt;I am going to demonstrate this on two levels.  The first will be a MouseEnter event on the Silverlight control as a whole.  This event will fire when the user's mouse enters the space that the Silverlight control takes up.  We will be putting a second event on a circle that is in the Silverlight application.  Here's our starter XAML.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightMouseEvents.MouseEnterDemo"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="White"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Ellipse &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="myEllipse" &lt;/span&gt;&lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;="Blue" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="150" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="150" /&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I am going to add the event handlers to the XAML, but I will show you how to do it in code as well.  Here's our modified XAML, with the event handlers inline.&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightMouseEvents.MouseEnterDemo"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300" &lt;/span&gt;&lt;span style="color:red"&gt;MouseEnter&lt;/span&gt;&lt;span style="color:blue"&gt;="UserControl_MouseEnter"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="White"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Ellipse &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="myEllipse" &lt;/span&gt;&lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;="Blue" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="150" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="150" &lt;/span&gt;&lt;span style="color:red"&gt;MouseEnter&lt;/span&gt;&lt;span style="color:blue"&gt;="myEllipse_MouseEnter" /&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now we need to jump into the code-behind to write the event handler actions.  As soon as I created the event handlers in the XAML, it automatically stubbed out the methods for me in code.  Here's how my initial C# code-behind looks.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Controls;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Documents;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Input;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media.Animation;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SilverlightMouseEvents&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public partial class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseEnterDemo &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;UserControl&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;MouseEnterDemo()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;private void &lt;/span&gt;UserControl_MouseEnter(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;private void &lt;/span&gt;myEllipse_MouseEnter(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;In order to keep this post reasonable in length, I'm not going to do anything complicated in my event handling, but I will show you how to change the color of the Ellipse.  I've added one line of code to each method, and each one changes the Ellipse to a different color.  At this point, when we run our mouse into the Silverlight area of our web page, the circle will change to green, and when we mouse over the circle, it turns purple.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Controls;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Documents;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Input;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media.Animation;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SilverlightMouseEvents&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public partial class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseEnterDemo &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;UserControl&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;MouseEnterDemo()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;private void &lt;/span&gt;UserControl_MouseEnter(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            myEllipse.Fill = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Colors&lt;/span&gt;.Green);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;private void &lt;/span&gt;myEllipse_MouseEnter(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            myEllipse.Fill = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Colors&lt;/span&gt;.Purple);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;MouseLeave&lt;/h2&gt;In this case, it's pretty much exactly the same as MouseEnter, but when the mouse LEAVES something. Novel idea, huh?  This time, however, I will not have any modifications to my XAML at all.  So here's the starter XAML again.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightMouseEvents.MouseLeaveDemo"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="White"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Ellipse &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="myEllipse" &lt;/span&gt;&lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;="Blue" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="150" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="150" /&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Grid&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This time I am going to do this all in the code-behind.  I will add the event handlers when the application initializes.  Here's my final C# for this example:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Controls;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Documents;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Input;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media.Animation;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SilverlightMouseEvents&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public partial class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseLeaveDemo &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;UserControl&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;MouseLeaveDemo()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            &lt;span style="color:blue"&gt;this&lt;/span&gt;.MouseLeave += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseEventHandler&lt;/span&gt;(MouseLeaveDemo_MouseLeave);&lt;br /&gt;            myEllipse.MouseLeave += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseEventHandler&lt;/span&gt;(myEllipse_MouseLeave);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;myEllipse_MouseLeave(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            myEllipse.Fill = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Colors&lt;/span&gt;.Purple);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;MouseLeaveDemo_MouseLeave(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            myEllipse.Fill = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Colors&lt;/span&gt;.Green);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;MouseLeftButtonDown&lt;/h2&gt;For this event, I am going to continue to use the same XAML over and over.  The only thing that changes is the reference to the class our XAML user control is using.  I've shown how to rig up event handlers both in the XAML as well as in code.  So, you've seen the XAML, I'm going to just show the code-behind for the next example here.&lt;br /&gt;&lt;br /&gt;MouseLeftButtonDown is exactly like it looks.  It fires when the user's left mouse button is pressed.  Please note that I will be covering MouseLeftButtonUp next, and that there's a significant distinction between them.  It's especially apparent when you start implementing Drag &amp;amp; Drop.  Here's an example of adding MouseLeftButtonDown to our code.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Controls;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Documents;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Input;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media.Animation;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SilverlightMouseEvents&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public partial class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseLeftButtonDownDemo &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;UserControl&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;MouseLeftButtonDownDemo()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            &lt;span style="color:blue"&gt;this&lt;/span&gt;.MouseLeftButtonDown += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseButtonEventHandler&lt;/span&gt;(MouseLeftButtonDownDemo_MouseLeftButtonDown);&lt;br /&gt;            myEllipse.MouseLeftButtonDown += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseButtonEventHandler&lt;/span&gt;(myEllipse_MouseLeftButtonDown);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;myEllipse_MouseLeftButtonDown(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseButtonEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            myEllipse.Fill = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Colors&lt;/span&gt;.Green);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;MouseLeftButtonDownDemo_MouseLeftButtonDown(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseButtonEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            LayoutRoot.Background = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Colors&lt;/span&gt;.Purple);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;MouseLeftButtonUp&lt;/h2&gt;So far, we've created an event handler method for each individual event.  There are many cases, however, where you want multiple items to be able to call the same method, so you're not writing the same code over and over.  In this next example, I'm going to add a second circle, and have both of them change the background of the StackPanel they sit inside.  Here's our new XAML file.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightMouseEvents.MouseLeftButtonUpDemo"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="White" &lt;/span&gt;&lt;span style="color:red"&gt;Orientation&lt;/span&gt;&lt;span style="color:blue"&gt;="Horizontal" &lt;/span&gt;&lt;span style="color:red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;="Center" &amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Ellipse &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="myEllipse" &lt;/span&gt;&lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;="Blue" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="150" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="150" /&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Ellipse &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="myEllipse" &lt;/span&gt;&lt;span style="color:red"&gt;Fill&lt;/span&gt;&lt;span style="color:blue"&gt;="Red" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="150" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="150" /&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now, we want each of the Ellipses, when the MouseLeftButtonUp event fires on them, to change the background of the ellipse that fired.  Here's what the code looks like to do that.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Controls;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Documents;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Input;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media.Animation;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SilverlightMouseEvents&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public partial class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseLeftButtonUpDemo &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;UserControl&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;MouseLeftButtonUpDemo()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            myEllipse.MouseLeftButtonUp += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseButtonEventHandler&lt;/span&gt;(Ellipse_MouseLeftButtonUp);&lt;br /&gt;            myEllipse2.MouseLeftButtonUp += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseButtonEventHandler&lt;/span&gt;(Ellipse_MouseLeftButtonUp);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;Ellipse_MouseLeftButtonUp(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseButtonEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;Ellipse &lt;/span&gt;myCircle = sender &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Ellipse&lt;/span&gt;;&lt;br /&gt;            myCircle.Fill = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Colors&lt;/span&gt;.Orange);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You'll notice with this example that there's a second line of code in our event handler method.  We have to grab a reference to the Ellipse that actually called the method.  The "sender" parameter contains this information, so we have to grab that reference before assigning our new color.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;MouseMove&lt;/h2&gt;In this final example, we are going to use the MouseMove event.  Each time the mouse moves from its previous location, this event will fire.  You can assign this to the entire control, or just a specific element of the application.  In either case, you can do quite a few things with this, including drag and drop.  We will cover that in a future post.&lt;br /&gt;&lt;br /&gt;My XAML this time has two TextBoxes on the page.  One named (cleverly) Xbox, and the other Ybox.  We're going to insert the mouse's X and Y coordinates in these boxes as the user moves their mouse.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Class&lt;/span&gt;&lt;span style="color:blue"&gt;="SilverlightMouseEvents.MouseMoveDemo"&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" &lt;br /&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="400" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="300" &lt;/span&gt;&lt;span style="color:red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:blue"&gt;="Center"&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="LayoutRoot" &lt;/span&gt;&lt;span style="color:red"&gt;Background&lt;/span&gt;&lt;span style="color:blue"&gt;="White"&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="Xbox" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="200" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="35" &lt;/span&gt;&lt;span style="color:red"&gt;Text&lt;/span&gt;&lt;span style="color:blue"&gt;="X" /&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color:red"&gt;x&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:red"&gt;Name&lt;/span&gt;&lt;span style="color:blue"&gt;="Ybox" &lt;/span&gt;&lt;span style="color:red"&gt;Width&lt;/span&gt;&lt;span style="color:blue"&gt;="200" &lt;/span&gt;&lt;span style="color:red"&gt;Height&lt;/span&gt;&lt;span style="color:blue"&gt;="35" &lt;/span&gt;&lt;span style="color:red"&gt;Text&lt;/span&gt;&lt;span style="color:blue"&gt;="Y"/&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The code behind this probably doesn't look too complicated now, if you've followed this entire post, but we're using the MouseEventArgs this time, to determine where the mouse's current position is.  We then simply assign those values to the text boxes.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Controls;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Documents;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Input;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Media.Animation;&lt;br /&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;SilverlightMouseEvents&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue"&gt;public partial class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseMoveDemo &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;UserControl&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;MouseMoveDemo()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            &lt;span style="color:blue"&gt;this&lt;/span&gt;.MouseMove += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MouseEventHandler&lt;/span&gt;(MouseMoveDemo_MouseMove);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;void &lt;/span&gt;MouseMoveDemo_MouseMove(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;MouseEventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            Xbox.Text = e.GetPosition(&lt;span style="color:blue"&gt;null&lt;/span&gt;).X.ToString();&lt;br /&gt;            Ybox.Text = e.GetPosition(&lt;span style="color:blue"&gt;null&lt;/span&gt;).Y.ToString();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Summary&lt;/h2&gt;This was a quick overview of the Mouse events that are available to you in Silverlight.  Used together, you can create a pretty interactive environment for your user to use.  In tomorrow's post, we are going to be covering screen transitions.  Not only the ability to jump from one XAML file to the next, but also how to incorporate some Powerpoint-like transitions from one screen to the next.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fjeffblankenburg.com%2f2009%2f07%2fday-1-mouse-events-in-silverlight.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fjeffblankenburg.com%2f2009%2f07%2fday-1-mouse-events-in-silverlight.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-7123137715553657836?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Zh-__ZgUMpY:3aBhIsKX740:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Zh-__ZgUMpY:3aBhIsKX740:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=Zh-__ZgUMpY:3aBhIsKX740:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Zh-__ZgUMpY:3aBhIsKX740:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Zh-__ZgUMpY:3aBhIsKX740:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=Zh-__ZgUMpY:3aBhIsKX740:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Zh-__ZgUMpY:3aBhIsKX740:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Zh-__ZgUMpY:3aBhIsKX740:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=Zh-__ZgUMpY:3aBhIsKX740:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Zh-__ZgUMpY:3aBhIsKX740:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Zh-__ZgUMpY:3aBhIsKX740:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/Zh-__ZgUMpY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/Zh-__ZgUMpY/day-1-mouse-events-in-silverlight.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/07/day-1-mouse-events-in-silverlight.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-6927724525389551433</guid><pubDate>Wed, 01 Jul 2009 03:31:00 +0000</pubDate><atom:updated>2009-07-01T07:42:55.565-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tdpe</category><category domain="http://www.blogger.com/atom/ns#">toughest developer puzzle ever</category><title>Looking For A Mental Challenge?  Here It Is.</title><description>It's offical.  The &lt;a href="http://toughestdeveloperpuzzleever.com"&gt;Toughest Developer Puzzle Ever&lt;/a&gt; is alive and kickin'.  Prepare to have your mind bent, your skills tested, and, if you're fast enough, your home mailbox filled.  That's right.  This contest will provide the first 15 people to complete the puzzle with a prize.  We're not talking about happy meal toys here, either.  This is a substantial prize, valued at over $25, and another challenge in and of itself.&lt;br /&gt;&lt;br /&gt;You'll also get your name recorded on the site as proof that you were wise enough to make it past all 30 levels. Feel free to call it TDPE.  We are.  There's also a Twitter account for it.  &lt;a href="http://twitter.com/tdpe"&gt;@tdpe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So what are you waiting for?  Head over to &lt;a href="http://toughestdeveloperpuzzleever.com"&gt;http://toughestdeveloperpuzzleever.com&lt;/a&gt; and get started.  You will be tested.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fjeffblankenburg.com%2f2009%2f06%2flooking-for-mental-challenge-here-it-is.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fjeffblankenburg.com%2f2009%2f06%2flooking-for-mental-challenge-here-it-is.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-6927724525389551433?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=sJs-mbYBh4Y:h2Sw_EREUGw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=sJs-mbYBh4Y:h2Sw_EREUGw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=sJs-mbYBh4Y:h2Sw_EREUGw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=sJs-mbYBh4Y:h2Sw_EREUGw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=sJs-mbYBh4Y:h2Sw_EREUGw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=sJs-mbYBh4Y:h2Sw_EREUGw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=sJs-mbYBh4Y:h2Sw_EREUGw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=sJs-mbYBh4Y:h2Sw_EREUGw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=sJs-mbYBh4Y:h2Sw_EREUGw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=sJs-mbYBh4Y:h2Sw_EREUGw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=sJs-mbYBh4Y:h2Sw_EREUGw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/sJs-mbYBh4Y" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/sJs-mbYBh4Y/looking-for-mental-challenge-here-it-is.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/06/looking-for-mental-challenge-here-it-is.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-1339973073785042805</guid><pubDate>Tue, 30 Jun 2009 05:00:00 +0000</pubDate><atom:updated>2009-07-06T09:57:51.646-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">31 days of Silverlight</category><title>Thirty-One Days of Silverlight</title><description>Each day in the month of July, I am going to publish an article on a Silverlight topic.  The topics will range from 100-level to 300-level in difficulty, but all of them will be written so that a beginner could start from scratch to create them.&lt;br /&gt;&lt;br /&gt;I will covering Drag &amp;amp; Drop, Event Handling, and even Collision Detection.  This is an extensive list of tutorials, and I hope that it will help you see how useful and powerful these technologies can be.&lt;br /&gt;&lt;br /&gt;If there are topics you are specifically interested in seeing covered, please leave a comment, and I will do my best to accomodate your request.  Below is a list of the articles that have been published.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jeffblankenburg.com/2009/07/day-1-mouse-events-in-silverlight.aspx"&gt;Day #1: Mouse Events in Silverlight&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="http://jeffblankenburg.com/2009/07/day-2-silverlight-screen-transitions.aspx"&gt;Day #2: Silverlight Screen Transitions&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="http://jeffblankenburg.com/2009/07/day-3-custom-silverlight-loading-screen.aspx"&gt;Day #3: Custom Silverlight Loading Screen&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="http://jeffblankenburg.com/2009/07/day-4-communicating-between-two.aspx"&gt;Day #4: Communicating Between Two Silverlight Controls&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="http://jeffblankenburg.com/2009/07/day-5-silverlight-drag-and-drop.aspx"&gt;Day #5: Silverlight Drag and Drop&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="http://jeffblankenburg.com/2009/07/day-6-silverlight-and-twitter-hello.aspx"&gt;Day #6: Silverlight and the Twitter "Hello, World!"&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-1339973073785042805?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=5YRkH72lNfA:p789LpmS59c:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=5YRkH72lNfA:p789LpmS59c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=5YRkH72lNfA:p789LpmS59c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=5YRkH72lNfA:p789LpmS59c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=5YRkH72lNfA:p789LpmS59c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=5YRkH72lNfA:p789LpmS59c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=5YRkH72lNfA:p789LpmS59c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=5YRkH72lNfA:p789LpmS59c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=5YRkH72lNfA:p789LpmS59c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=5YRkH72lNfA:p789LpmS59c:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=5YRkH72lNfA:p789LpmS59c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/5YRkH72lNfA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/5YRkH72lNfA/thirty-one-days-of-silverlight.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">10</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/06/thirty-one-days-of-silverlight.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-3344275305547616345</guid><pubDate>Tue, 23 Jun 2009 13:19:00 +0000</pubDate><atom:updated>2009-06-23T10:07:07.245-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">givecamp</category><category domain="http://www.blogger.com/atom/ns#">columbus</category><title>Columbus GiveCamp - July 17, 18, 19</title><description>&lt;a href="http://s3.kiva.org/img/w800/204878.jpg"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://s3.kiva.org/img/w800/204878.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;If you haven't already heard (and honestly, all the cool kids are going to be there), there is going to be a &lt;a href="http://columbusgivecamp.org"&gt;GiveCamp in Columbus, OH&lt;/a&gt; the weekend of July 17-19.  Don't live near Columbus?  There's a &lt;a href="http://michigangivecamp.org/cms/AnnArbor/"&gt;GiveCamp in Ann Arbor, MI&lt;/a&gt; the same weekend.  So just stop it.  You have run out of excuses to participate!&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;What is a GiveCamp?&lt;/h2&gt;GiveCamp is a weekend-long event where software developers, designers, and database administrators donate their time to create custom software for non-profit organizations. This custom software could be a new website for the nonprofit organization, a small data-collection application to keep track of members, or a application for the Red Cross that automatically emails a blood donor three months after they’ve donated blood to remind them that they are now eligible to donate again. The only limitation is that the project should be scoped to be able to be completed in a weekend. &lt;br /&gt;&lt;br /&gt;During GiveCamp, developers are welcome to go home in the evenings or camp out all weekend long. There are usually food and drink provided at the event. There are sometimes even game systems set up for when you and your need a little break! Overall, it’s a great opportunity for people to work together, developing new friendships, and doing something important for their community.&lt;br /&gt;&lt;br /&gt;At GiveCamp, there is an expectation of "What Happens at GiveCamp, Stays at GiveCamp". Therefore, all source code must be turned over to the charities at the end of the weekend (developers cannot ask for payment) and the charities are responsible for maintaining the code moving forward (charities cannot expect the developers to maintain the codebase). &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;How can I get involved?  This sounds fun.&lt;/h2&gt;There's a form at the Columbus GiveCamp site that you can use to register.  &lt;a href="http://www.columbusgivecamp.org/GiveCamp/Volunteer/SignUp"&gt;Click here to sign up for the Columbus GiveCamp&lt;/a&gt;.  If you'd like more information first, they have a &lt;a href="http://www.columbusgivecamp.org/GiveCamp/Home/FAQs/Developers"&gt;Frequently Asked Questions&lt;/a&gt; page you can refer to as well.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;How can my charity get help from the GiveCamp?&lt;/h2&gt;  There's a deadline of July 8th, and you can register on their site.  &lt;a href="http://www.columbusgivecamp.org/GiveCamp/Home/FAQs/Charities"&gt;Here's the link to register as a charity&lt;/a&gt;.  There's also an extensive &lt;a href="http://www.columbusgivecamp.org/GiveCamp/Home/FAQs/Charities"&gt;FAQ for charities&lt;/a&gt; that can be found on the Columbus GiveCamp site.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Get involved.  It's an incredibly rewarding experience.&lt;/h2&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-3344275305547616345?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=QAYQT2ecvHE:pd9bRUCdcLg:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=QAYQT2ecvHE:pd9bRUCdcLg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=QAYQT2ecvHE:pd9bRUCdcLg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=QAYQT2ecvHE:pd9bRUCdcLg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=QAYQT2ecvHE:pd9bRUCdcLg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=QAYQT2ecvHE:pd9bRUCdcLg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=QAYQT2ecvHE:pd9bRUCdcLg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=QAYQT2ecvHE:pd9bRUCdcLg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=QAYQT2ecvHE:pd9bRUCdcLg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=QAYQT2ecvHE:pd9bRUCdcLg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=QAYQT2ecvHE:pd9bRUCdcLg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/QAYQT2ecvHE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/QAYQT2ecvHE/columbus-givecamp-july-17-18-19.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/06/columbus-givecamp-july-17-18-19.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-6553146038501029308</guid><pubDate>Tue, 16 Jun 2009 19:32:00 +0000</pubDate><atom:updated>2009-06-16T15:50:31.262-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">industry ideas</category><title>An Idea For The Airlines</title><description>Today, I was looking at Southwest's fares for flying to Seattle.  It's a gorgeous part of this great country, and I'm always looking for a fun place to take my wife on a trip.  Fares to Seattle were $118 each way.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;I'm not planning a vacation.&lt;/h2&gt;That's the problem.  I'm not currently planning a vacation.  I don't know when I'd be able to get out there.  But I like that price.  If I could buy a ticket, but not a specific seat on a specific plane on a specific day, I'd probably buy one.  Why can't that be done?&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Flight prices fluctuate.&lt;/h2&gt;I can accept that flight prices fluctuate.  I'd imagine a flight to Cancun is more expensive during Spring Break, and flights to Orlando during the summer months go up a bit as well (Disney World traffic).  But if I find a flight at a price I like, without a real timeframe to use it, why shouldn't I be able to buy one?&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;My idea.&lt;/h2&gt;I'd like to propose to the airlines that they start offering flight credits for purchase.  If I can buy a flight today, and use it 8 months from now, I'd think everyone would win.  The airline gets my money (that they may not have gotten otherwise), and I get a fare that I like.&lt;br /&gt;&lt;br /&gt;There would certainly have to be some restrictions, like I can't take one of the last few seats on a full plane (they will probably be able to sell those), or perhaps I have to book the flight NO MORE than 14 days in advance.  This would require me to fill in some of those empty seats on a plane.&lt;br /&gt;&lt;br /&gt;The bonus for the airlines is that they can generate a bit more capital up-front.  The bonus for the consumer is that I get the price I purchased the fare at.  If I get it for $49 each way, but it's currently $180 each way, I wouldn't have to care.  I'm just using my flight credit.&lt;br /&gt;&lt;br /&gt;Where's the downside?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-6553146038501029308?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=r_pE0aMXTTw:_dcnkK5-8aw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=r_pE0aMXTTw:_dcnkK5-8aw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=r_pE0aMXTTw:_dcnkK5-8aw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=r_pE0aMXTTw:_dcnkK5-8aw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=r_pE0aMXTTw:_dcnkK5-8aw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=r_pE0aMXTTw:_dcnkK5-8aw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=r_pE0aMXTTw:_dcnkK5-8aw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=r_pE0aMXTTw:_dcnkK5-8aw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=r_pE0aMXTTw:_dcnkK5-8aw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=r_pE0aMXTTw:_dcnkK5-8aw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=r_pE0aMXTTw:_dcnkK5-8aw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/r_pE0aMXTTw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/r_pE0aMXTTw/idea-for-airlines.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/06/idea-for-airlines.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-3274175910668588623</guid><pubDate>Tue, 16 Jun 2009 00:50:00 +0000</pubDate><atom:updated>2009-06-16T15:57:47.279-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">tutorial</category><category domain="http://www.blogger.com/atom/ns#">settimeout</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>TUTORIAL: How To Create A SetTimeout Function In Silverlight</title><description>I am in the process of creating my first game in Silverlight, and one of the first things that I noticed I was missing from my Javascript-era toolkit was the setTimeout() function.&lt;br /&gt;&lt;br /&gt;In short, this little function is the be-all, end-all of Javascript animation. It is the device you use to insert little "pauses" into your code so that objects appear to be moving. Without it, your pieces would simply start at one position, and appear at the final destination. I use it primarily to make sure that the browser takes the time to draw each step of the animation. Here's an example of me using the setTimeout() function in Javascript, &lt;a href="http://www.sylloge.com/5k/entries/177/animation.html"&gt;circa 1999&lt;/a&gt; (it's also less than 5K in total size!):&lt;br /&gt;&lt;br /&gt;&lt;iframe height="600" src="http://www.sylloge.com/5k/entries/177/animation.html" frameborder="1" width="600" scrolling="no"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;1. Create a new UIToolkit Class.&lt;/h2&gt;It was tempting when starting this tutorial to just create a class that does one thing. But as I move forward in my Silverlight adventures, it occurs to me that we're probably going to encounter more of these types of needs in the future. So, I'm creating a UIToolkit class in my project. This will contain all of the little helper functions I create going forwards.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre   style="font-family:consolas;font-size:12px;"&gt;&lt;span style="color:blue;"&gt;public static class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;UIHelper&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;       &lt;br /&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;2. Inherit from System.Windows.Threading.DispatcherTimer&lt;/h2&gt;We are primarily going to be using the DispatcherTimer as is, but we also need it to accept an Action to execute when the timer expires. So we will be creating a new class that inherits from the standard DispatcherTimer, adding an Action to its definition.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre   style="font-family:consolas;font-size:12px;"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ActionTimer&lt;/span&gt;: System.Windows.Threading.&lt;span style="color:#2b91af;"&gt;DispatcherTimer&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Action &lt;/span&gt;Action { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;br /&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;3. Create a setTimeout method in UIToolkit&lt;/h2&gt;To keep it familiar for the Javascript folks out there, I'm keeping the name of the method setTimeout.  It's not even my usual casing, but for this example, I'm going to stick with the Javascript syntax.&lt;br /&gt;&lt;br /&gt;Inside this method, we're going to need an instance of our new ActionTimer, including the interval we want, and the method to call, as well as the calls to kick off the timer, and an event handler to manage each tick of the timer.  Here's the code:&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;public static void &lt;/span&gt;setTimeout(&lt;span style="color:blue"&gt;int &lt;/span&gt;milliseconds, &lt;span style="color:#2b91af"&gt;Action &lt;/span&gt;action)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;var &lt;/span&gt;timer = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ActionTimer&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                Interval = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;TimeSpan&lt;/span&gt;(0, 0, 0, 0, milliseconds),&lt;br /&gt;                Action = action&lt;br /&gt;            };&lt;br /&gt;            timer.Tick += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;EventHandler&lt;/span&gt;(timer_Tick);&lt;br /&gt;            timer.Start();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;static void &lt;/span&gt;timer_Tick(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;var &lt;/span&gt;t = sender &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ActionTimer&lt;/span&gt;;&lt;br /&gt;            t.Stop();&lt;br /&gt;            t.Action();&lt;br /&gt;            t.Tick -= timer_Tick;&lt;br /&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Or, just copy this into a new class file&lt;/h2&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;public static class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;UIToolkit&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public static void &lt;/span&gt;setTimeout(&lt;span style="color:blue"&gt;int &lt;/span&gt;milliseconds, &lt;span style="color:#2b91af"&gt;Action &lt;/span&gt;action)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;var &lt;/span&gt;timer = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ActionTimer&lt;br /&gt;            &lt;/span&gt;{&lt;br /&gt;                Interval = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;TimeSpan&lt;/span&gt;(0, 0, 0, 0, milliseconds),&lt;br /&gt;                Action = action&lt;br /&gt;            };&lt;br /&gt;            timer.Tick += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;EventHandler&lt;/span&gt;(timer_Tick);&lt;br /&gt;            timer.Start();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue"&gt;static void &lt;/span&gt;timer_Tick(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue"&gt;var &lt;/span&gt;t = sender &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ActionTimer&lt;/span&gt;;&lt;br /&gt;            t.Stop();&lt;br /&gt;            t.Action();&lt;br /&gt;            t.Tick -= timer_Tick;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:blue"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ActionTimer &lt;/span&gt;: System.Windows.Threading.&lt;span style="color:#2b91af"&gt;DispatcherTimer&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Action &lt;/span&gt;Action { &lt;span style="color:blue"&gt;get&lt;/span&gt;; &lt;span style="color:blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;4. How to call our new method&lt;/h2&gt;Now that we've got a setTimeout method that takes a number of milliseconds and an action, we need to call it for testing purposes.  Below is the syntax we'll be using.  The major difference you'll notice between this and the Javascript implementation is that our new method will take an entire block of code as our Action.  In Javascript, we're forced to concatenate a string of commands together, and it can get pretty messy fast.  We are setting this up to call our method every 1000 milliseconds, or every ONE second.&lt;br /&gt;&lt;br /&gt;&lt;div style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 500px; PADDING-RIGHT: 5px; BACKGROUND: #ececec; OVERFLOW: auto; PADDING-TOP: 5pxfont-size:11px;" &gt;UIToolkit.setTimeout(1000, () =&gt;&lt;br /&gt;   {&lt;br /&gt;    OurRecurringMethodCallShouldGoHere();&lt;br /&gt;   });&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Let's see it in action!&lt;/h2&gt;&lt;a href="http://jeffblankenburg.com/codesamples/SilverlightSetTimeout"&gt;Click here&lt;/a&gt; if the Silverlight below doesn't load.  &lt;a href="http://jeffblankenburg.com/codesamples/SilverlightSetTimeout/SilverlightSetTimeout.zip"&gt;Click here to download this sample code&lt;/a&gt;.&lt;br /&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300"&gt;&lt;br /&gt;   &lt;param name="source" value="http://jeffblankenburg.com/codesamples/SilverlightSetTimeout/ClientBin/SilverlightSetTimeout.xap"/&gt;&lt;br /&gt;   &lt;param name="onerror" value="onSilverlightError" /&gt;&lt;br /&gt;   &lt;param name="background" value="white" /&gt;&lt;br /&gt;   &lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;&lt;br /&gt;   &lt;param name="autoUpgrade" value="true" /&gt;&lt;br /&gt;   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;&lt;br /&gt;        &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt;&lt;br /&gt;   &lt;/a&gt;&lt;br /&gt;  &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fjeffblankenburg.com%2f2009%2f06%2ftutorial-how-to-create-settimeout.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fjeffblankenburg.com%2f2009%2f06%2ftutorial-how-to-create-settimeout.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-3274175910668588623?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=7ZHIdzsZ4Ic:AzMg6hop37Y:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=7ZHIdzsZ4Ic:AzMg6hop37Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=7ZHIdzsZ4Ic:AzMg6hop37Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=7ZHIdzsZ4Ic:AzMg6hop37Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=7ZHIdzsZ4Ic:AzMg6hop37Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=7ZHIdzsZ4Ic:AzMg6hop37Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=7ZHIdzsZ4Ic:AzMg6hop37Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=7ZHIdzsZ4Ic:AzMg6hop37Y:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=7ZHIdzsZ4Ic:AzMg6hop37Y:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=7ZHIdzsZ4Ic:AzMg6hop37Y:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=7ZHIdzsZ4Ic:AzMg6hop37Y:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/7ZHIdzsZ4Ic" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/7ZHIdzsZ4Ic/tutorial-how-to-create-settimeout.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/06/tutorial-how-to-create-settimeout.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-5553179491923743001</guid><pubDate>Tue, 09 Jun 2009 18:00:00 +0000</pubDate><atom:updated>2009-06-09T15:51:58.379-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">twitter</category><title>Twitter For The Common Man (or Woman)</title><description>I was recently asked by a friend of mine who they should follow on &lt;a href="http://twitter.com/jblankenburg"&gt;Twitter&lt;/a&gt;.  As he's not really in the software development world, my standard answers did not really apply.  So I started thinking about the people I follow because they entertain or interest me, not because I have an opportunity to learn from and network with them.  With that, here it is, in no particular order:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;My List of 20 Non-Technical Twitterers To Follow&lt;/h2&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/historicaltweet"&gt;Historical Tweet&lt;/a&gt; - dedicated to pretending that Twitter has always been around, this profile offers tidbits like Abraham Lincoln's tweet: "anyone got a more creative way of saying 87 years?"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/TrackThis"&gt;Track This&lt;/a&gt; - you only get what you give from this Twitter profile.  Each time you have a tracking number for something in the mail (UPS, USPS, FedEx, DHL), sent this a direct message with that number.  It will send you a DM each time that package has an update, relieving you from having to constantly checking a website.  Absolutely great service.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/joerogandotnet"&gt;Joe Rogan&lt;/a&gt; - Joe has a clever way of looking at things, even if most of those perspectives come while he's baked.  There are several great comedians on Twitter, and I find they often use it as a medium to try out new material.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/THE_REAL_SHAQ"&gt;Shaquille O'Neal&lt;/a&gt; - perhaps one of the taller Twitter users, Shaq is as transparent as they come.  I especially like his "Random Acts of Shaqness," where he would tweet his location, and the first person to find him would get great tickets to the Phoenix Suns game that night.  Generous, and creative.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/toddbarry"&gt;Todd Barry&lt;/a&gt; - another comedian, VERY dry wit.  His comedy is excellent, and his posts on Twitter often resemble his performances.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/StephenColbert"&gt;Stephen Colbert&lt;/a&gt; - talking to his "nation," Colbert has an appealing tongue-in-cheek approach to Twitter, with a political spin.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/rainnwilson"&gt;Rainn Wilson&lt;/a&gt; - "Dwight" from the office, Rainn uses Twitter like an everyman.  He talks about music he likes, humorous things he finds, and is highly likely to respond to you.  Great to engage with someone like that (when he certainly doesn't have to.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/NotTinaFey"&gt;Not Tina Fey&lt;/a&gt; - I'm not actually sure that this is Tina Fey's profile, but the humor is spot on for her.  There's also &lt;a href="http://twitter.com/Tina_Fey"&gt;@tina_fey&lt;/a&gt;, and it's good, but not like the one in my list.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/johncmayer"&gt;John Mayer&lt;/a&gt; - musician, but active twitterer.  It's even been rumored that he got dumped by Jennifer Aniston because of his Twitter addiction.  In addition to life's observations, he's often talking music.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/MCHammer"&gt;MC Hammer&lt;/a&gt; - I don't really know why I follow MC Hammer.  Listening to him is like peering into the mind of a crazy person.  Entertaining, but also sometimes sad.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/cnnbrk"&gt;CNN Breaking News&lt;/a&gt; - because you need to know what's going on the world.  Just headlines, it's an easy way to keep up with current events.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/woot"&gt;Woot!&lt;/a&gt; - if you're not familiar with http://woot.com, you should be.  Each day, they sell ONE product at a super-cheap price.  When they're gone, they're gone.  Shipping is always $5.  This Twitter feed keeps you up to date with the product each day.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/maddow"&gt;Rachel Maddow&lt;/a&gt; - if you like your political discussions with a snarky, sarcastic edge, Rachel's for you.  Crazy intelligent, but with a wit that makes it enjoyable to listen to.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/darthvader"&gt;Darth Vader&lt;/a&gt; - imagine Darth Vader is living in today's times.  Imagine he's bothered by the same annoyances you and I are.  For example: "Can't tell if I have the swine flu or just need a fresh air filter cartridge." or "In Palpatine's defense, it's hard not to be over-confident when intelligence reports you'll be fighting teddy bears &amp;amp; salamanders."&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/ThatKevinSmith"&gt;Kevin Smith&lt;/a&gt; - the writer/director of movies like Clerks, Mallrats, and Zach and Miri Make a Porno.  Super funny guy, with a ton of self-deprecating humor added in.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/jimmyfallon"&gt;Jimmy Fallon&lt;/a&gt; - SNL alum, the new host of the Late Show, and a self-proclaimed technology geek, Jimmy's always got something funny to say.  He often uses Twitter for contests and "live" surveys too.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/donttrythis"&gt;Adam Savage&lt;/a&gt; - one of the geniuses on Mythbusters, Adam's constantly talking about science, technology, and life.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/joelmchale"&gt;Joel McHale&lt;/a&gt; - the host of E!'s show "The Soup," Joel has a sarcastic, clever personality, and most of that comes through in his Twittering.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/oliviamunn"&gt;Olivia Munn&lt;/a&gt; - one of the hosts of G4's "Attack of the Show," she's as witty and clever as she is attractive.  She's got a serious affinity for technology, which makes her even more interesting to listen to.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/jimgaffigan"&gt;Jim Gaffigan&lt;/a&gt; - one of my favorite comedians, he talks about what he's seen that is funny, in addition to some one-liners like this prize:  Coffee is one of the only drinks that is great hot, great ice cold, but absolutely sucks in between. "Do you have any lukewarm coffee?"&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-5553179491923743001?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=FuQukCOTnbg:BJ4_4D7JT64:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=FuQukCOTnbg:BJ4_4D7JT64:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=FuQukCOTnbg:BJ4_4D7JT64:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=FuQukCOTnbg:BJ4_4D7JT64:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=FuQukCOTnbg:BJ4_4D7JT64:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=FuQukCOTnbg:BJ4_4D7JT64:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=FuQukCOTnbg:BJ4_4D7JT64:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=FuQukCOTnbg:BJ4_4D7JT64:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=FuQukCOTnbg:BJ4_4D7JT64:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=FuQukCOTnbg:BJ4_4D7JT64:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=FuQukCOTnbg:BJ4_4D7JT64:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/FuQukCOTnbg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/FuQukCOTnbg/twitter-for-common-man-or-woman.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/06/twitter-for-common-man-or-woman.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-8318257464277795815</guid><pubDate>Mon, 08 Jun 2009 13:11:00 +0000</pubDate><atom:updated>2009-06-08T13:58:25.514-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">contribupendence day</category><category domain="http://www.blogger.com/atom/ns#">linkedin</category><category domain="http://www.blogger.com/atom/ns#">plaxo</category><category domain="http://www.blogger.com/atom/ns#">contribupendence</category><category domain="http://www.blogger.com/atom/ns#">twitter</category><title>Celebrate Contribupendence Day - July 3rd, 2009</title><description>Last year, I created a call-to-action for &lt;a href="http://www.jeffblankenburg.com/2008/06/celebrate-contribupendence-day-july-3.aspx"&gt;Contribupendence Day&lt;/a&gt;.  The basic idea is simple:&lt;br /&gt;&lt;br /&gt;You work with many people every year.  A handful of them are absolutely outstanding, in your opinion.  Have you ever shared that opinion with them?  Have you shared that opinion with anyone else?&lt;br /&gt;&lt;br /&gt;Contribupendence Day is an annual reminder to give your rockstar business contacts some much deserved feedback.  Leave them a recommendation on LinkedIn.  Write a blog post about them.  Create some content on the Internet that can be found by others.&lt;br /&gt;&lt;br /&gt;Ultimately, they are going to be looking for a job in the next few years, and employers LOVE recommendations from others.&lt;br /&gt;&lt;br /&gt;So, this is a call to action for each one of you.  On July 3rd, go to a social networking site (&lt;a href="http://linkedin.com"&gt;LinkedIn&lt;/a&gt;, &lt;a href="http://SpeakerRate.com"&gt;SpeakerRate&lt;/a&gt;, &lt;a href="http://plaxo.com"&gt;Plaxo&lt;/a&gt;, &lt;a href="http://facebook.com"&gt;Facebook&lt;/a&gt;, &lt;a href="http://Friendfeed.com"&gt;Friendfeed&lt;/a&gt;, &lt;a href="http://spaces.live.com"&gt;Live Spaces&lt;/a&gt;, etc.), and write 5 reviews of your favorite colleagues.  They don't have to work with you today, but you should have some professional experience with them in some fashion.&lt;br /&gt;&lt;br /&gt;So let's tell the world about the people we work with. Or the people we WISH we worked with. No strings attached. Let's make sure that when someone looks up your friend online, that they find a glowing (and true) review from a peer. No embellishments, no lies. Just the truth. And do it with no expectation that they will return the favor. That's just selfish.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;The term "&lt;strong&gt;contribupendence&lt;/strong&gt;" was coined because this effort is meant to contribute to a person's independence from online mediocrity.  Help someone get the credit and reputation they deserve!&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-8318257464277795815?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nXccqR8pyA4:d9keexn2yvc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nXccqR8pyA4:d9keexn2yvc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=nXccqR8pyA4:d9keexn2yvc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nXccqR8pyA4:d9keexn2yvc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nXccqR8pyA4:d9keexn2yvc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=nXccqR8pyA4:d9keexn2yvc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nXccqR8pyA4:d9keexn2yvc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nXccqR8pyA4:d9keexn2yvc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=nXccqR8pyA4:d9keexn2yvc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nXccqR8pyA4:d9keexn2yvc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nXccqR8pyA4:d9keexn2yvc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/nXccqR8pyA4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/nXccqR8pyA4/celebrate-contribupendence-day-july-3rd.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/06/celebrate-contribupendence-day-july-3rd.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-566709305018480306</guid><pubDate>Thu, 04 Jun 2009 12:32:00 +0000</pubDate><atom:updated>2009-06-04T11:24:50.961-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">internet explorer 8</category><category domain="http://www.blogger.com/atom/ns#">accelerator</category><category domain="http://www.blogger.com/atom/ns#">tutorial</category><category domain="http://www.blogger.com/atom/ns#">twitter</category><title>TUTORIAL: Creating an IE8 Accelator</title><description>For those of you that have been using Internet Explorer 8 for a little while now, I'm hoping you've had a chance to customize your Accelerators.  These are proving to be pretty valuable tools in my day-today surfing.  Here's what my customized list looks like:&lt;br /&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;" src="http://jeffblankenburg.com/uploaded_images/acceleratorlist-754879.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;But one thing that has bothered me about these tools is that I didn't know how to make them.  It probably wasn't hard, but it also wasn't obvious.  That's the point of this post.  I did some research, and it's actually a simple XML file on your web server, and some javascript in a button to reference it.&lt;br /&gt;&lt;br /&gt;Of course, you need a service of some kind to actually provide value, but that's another thing.  In my example, I'm going to create an Accelerator to post some text to &lt;a href="http://www.twitter.com/jblankenburg"&gt;Twitter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;1. Start with the default XML file.&lt;/h2&gt;If we visit the &lt;a href="http://www.microsoft.com/windows/internet-explorer/readiness/developers-new.aspx"&gt;developer page for Accelerators&lt;/a&gt;, we are provided with the templates we can start with.  I have bolded (and colored &lt;strong style="color:#000000;"&gt;black&lt;/strong&gt;) the values that we're going to need to change.  You can read the entire spec on this document on &lt;a href="http://msdn.microsoft.com/en-us/library/cc287851(VS.85).aspx"&gt;MSDN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="background:#ECECEC;font-size:11px;overflow:auto;padding:5px;width:500px;"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515"&gt;xml &lt;/span&gt;&lt;span style="color:red"&gt;version&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;1.0&lt;/span&gt;" &lt;span style="color:red"&gt;encoding&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;UTF-8&lt;/span&gt;"&lt;span style="color:blue"&gt;?&amp;gt;&lt;br /&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;openServiceDescription &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;http://www.microsoft.com/schemas/openservicedescription/1.0&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;homepageUrl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;strong style="color:#000000;"&gt;http://maps.live.com&lt;/strong&gt;&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;homepageUrl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;display&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;strong style="color:#000000;"&gt;Map with Windows Live&lt;/strong&gt;&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;icon&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;strong style="color:#000000;"&gt;http://www.live.com/favicon.ico&lt;/strong&gt;&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;icon&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;display&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;activity &lt;/span&gt;&lt;span style="color:red"&gt;category&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;&lt;strong style="color:#000000;"&gt;map&lt;/strong&gt;&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;activityAction &lt;/span&gt;&lt;span style="color:red"&gt;context&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;selection&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;preview &lt;/span&gt;&lt;span style="color:red"&gt;action&lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;"&lt;span style="color:blue"&gt;http://maps.live.com/geotager.aspx&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;parameter &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;b&lt;/span&gt;" &lt;span style="color:red"&gt;value&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;{selection}&lt;/span&gt;"&lt;span style="color:blue"&gt;/&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;parameter &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;clean&lt;/span&gt;" &lt;span style="color:red"&gt;value&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;true&lt;/span&gt;"&lt;span style="color:blue"&gt;/&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;parameter &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;w&lt;/span&gt;" &lt;span style="color:red"&gt;value&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;320&lt;/span&gt;"&lt;span style="color:blue"&gt;/&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;parameter &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;h&lt;/span&gt;" &lt;span style="color:red"&gt;value&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;240&lt;/span&gt;"&lt;span style="color:blue"&gt;/&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;preview&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;execute &lt;/span&gt;&lt;span style="color:red"&gt;action&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:black"&gt;&lt;strong&gt;http://maps.live.com/default.aspx&lt;/strong&gt;&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;parameter &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:black"&gt;&lt;strong&gt;where1&lt;/strong&gt;&lt;/span&gt;" &lt;span style="color:red"&gt;value&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;{selection}&lt;/span&gt;" &lt;span style="color:red"&gt;type&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;text&lt;/span&gt;" &lt;span style="color:blue"&gt;/&amp;gt;&lt;br /&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;execute&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;activityAction&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;activity&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;openServiceDescription&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;2. Change the &amp;lt;homepageUrl&amp;gt; value.&lt;/h2&gt;At first, I thought this was a throwaway value, but it has to match the other values in the XML file or it won't work.  I assume this is to prevent spoofing, though I think it would still be pretty easy to spoof a site.  It has nothing to do with the Accelerator model, though.  It's all about just creating a site that looks like the target site.  I can discuss that in a later post though.  So, since I'm working on an Accelerator for Twitter, my value for this will be &lt;strong&gt;http://twitter.com&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;3. Change the &amp;lt;name&amp;gt;value.&lt;/h2&gt;This is the name that your users will see when they bring up the Accelerator Menu.  In my case, I am going to make mine say "&lt;strong&gt;Tweet with Twitter&lt;/strong&gt;."&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;4. Change the &amp;lt;icon&amp;gt; value.&lt;/h2&gt;If you want an icon to be displayed next to your text in the Accelerator menu, this is where you specify it.  The Twitter icon seems appropriate for this, so my value is going to be the favicon from the Twitter site:  &lt;strong&gt;http://twitter.com/favicon.ico&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;5. Change the &amp;lt;category&amp;gt; value.&lt;/h2&gt;This is where your Accelerator will be categorized in the Accelerator menu.  If it doesn't match an existing value EXACTLY, it will create another grouping.  This includes capitalization, it seems.  I'd like my entry to show up in a unique grouping, though, so I am using the value "&lt;strong&gt;Tweet&lt;/strong&gt;."&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;6. Delete the &amp;lt;preview&amp;gt; section.&lt;/h2&gt;This is certainly not something you want to do every time, but unless you need to preview the results for the user (mapping and translation are good uses of this), we just want to &lt;em&gt;take&lt;/em&gt; the user someplace.  There's not much point in previewing it for them.  So just delete that node.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;7. Change the &amp;lt;action&amp;gt; value.&lt;/h2&gt;Inside the &amp;lt;execute&amp;gt; tag, we have an action value.  This is the place that we will be directing the user when they click on our Accelerator in their menu.  For Twitter, that place will be &lt;strong&gt;http://twitter.com/home&lt;/strong&gt;.  This gets the user to their Twitter home page, but we still need the ability to populate the "Tweet Box" on the page.  Thankfully, Twitter and the Accelerator model can work together to accomplish this.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;8. Change the &amp;lt;parameter&amp;gt; value.&lt;/h2&gt;You can have multiple parameter tags, and each one is ultimately treated like a query string variable to the URL that we specified in the previous step.  Twitter accepts a parameter of "status" that, when used, will populate that text in the Twitter box.  So, our name for our parameter will be &lt;strong&gt;status&lt;/strong&gt;, and we will leave the value = {selection} because this will use the text the user highlighted to enter the Accelerator menu in the first place.  So the entire use case for this process is this:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;     &lt;li&gt;User highlights text.&lt;/li&gt;&lt;br /&gt;     &lt;li&gt;User opens Accelerator menu.&lt;/li&gt;&lt;br /&gt;     &lt;li&gt;User chooses our accelerator.&lt;/li&gt;&lt;br /&gt;     &lt;li&gt;User is taken to Twitter, and the box is populated with the original highlighted text.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;So here's what our final XML file looks like:&lt;br /&gt;&lt;br /&gt;&lt;div style="background:#ECECEC;font-size:11px;overflow:auto;padding:5px;width:500px;"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515"&gt;xml &lt;/span&gt;&lt;span style="color:red"&gt;version&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;1.0&lt;/span&gt;" &lt;span style="color:red"&gt;encoding&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;UTF-8&lt;/span&gt;"&lt;span style="color:blue"&gt;?&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;openServiceDescription &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;http://www.microsoft.com/schemas/openservicedescription/1.0&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;homepageUrl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;http://twitter.com&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;homepageUrl&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;display&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;Tweet with Twitter&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;icon&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;http://www.twitter.com/favicon.ico&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;icon&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;display&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;activity &lt;/span&gt;&lt;span style="color:red"&gt;category&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;Tweet&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;activityAction &lt;/span&gt;&lt;span style="color:red"&gt;context&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;selection&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;execute &lt;/span&gt;&lt;span style="color:red"&gt;action&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;http://twitter.com/home/&lt;/span&gt;"&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;parameter &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;status&lt;/span&gt;" &lt;span style="color:red"&gt;value&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;{selection}&lt;/span&gt;" &lt;span style="color:red"&gt;type&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;"&lt;span style="color:blue"&gt;text&lt;/span&gt;" &lt;span style="color:blue"&gt;/&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;execute&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;activityAction&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;activity&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;openServiceDescription&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;9.  Get that XML file on a web server.&lt;/h2&gt;I have placed my XML file &lt;a href="http://jeffblankenburg.com/twitteraccelerator/TwitterAccelerator.xml"&gt;here&lt;/a&gt;.  It just needs to be publicly available.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;10. Create a way for a user to install your Accelerator.&lt;/h2&gt;We just need to add a button or link on a web page for our users to click on.  Here's some sample HTML you can use:&lt;br /&gt;&lt;br /&gt;&lt;div style="background:#ECECEC;font-size:11px;overflow:auto;padding:5px;width:500px;"&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;button &lt;/span&gt;&lt;span style="color:red"&gt;id&lt;/span&gt;&lt;span style="color:blue"&gt;="myButton" &lt;/span&gt;&lt;span style="color:red"&gt;onclick&lt;/span&gt;&lt;span style="color:blue"&gt;="window.external.AddService('http://www.jeffblankenburg.com/twitteraccelerator/TwitterAccelerator.xml')"&amp;gt;&lt;/span&gt;Tweet As Twitter&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;button&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And here's a sample button you can use to try it out!&lt;br /&gt;&lt;br /&gt;&lt;button id="myButton" onclick="window.external.AddService('http://www.jeffblankenburg.com/twitteraccelerator/TwitterAccelerator.xml')"&gt;Tweet As Twitter&lt;/button&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fjeffblankenburg.com%2f2009%2f04%2ftutorial-creating-ie8-accelator.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fjeffblankenburg.com%2f2009%2f04%2ftutorial-creating-ie8-accelator.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-566709305018480306?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Vuz--G39hpo:ovnBUvdj9xI:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Vuz--G39hpo:ovnBUvdj9xI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=Vuz--G39hpo:ovnBUvdj9xI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Vuz--G39hpo:ovnBUvdj9xI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Vuz--G39hpo:ovnBUvdj9xI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=Vuz--G39hpo:ovnBUvdj9xI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Vuz--G39hpo:ovnBUvdj9xI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Vuz--G39hpo:ovnBUvdj9xI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=Vuz--G39hpo:ovnBUvdj9xI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Vuz--G39hpo:ovnBUvdj9xI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=Vuz--G39hpo:ovnBUvdj9xI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/Vuz--G39hpo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/Vuz--G39hpo/tutorial-creating-ie8-accelator.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/04/tutorial-creating-ie8-accelator.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-127498427184405713</guid><pubDate>Tue, 26 May 2009 20:06:00 +0000</pubDate><atom:updated>2009-05-26T16:40:51.831-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">shaquille o'neal</category><category domain="http://www.blogger.com/atom/ns#">random acts of reading</category><category domain="http://www.blogger.com/atom/ns#">twitter</category><title>Random Acts of Reading</title><description>&lt;img style="float:left;margin:0 10px 10px 0;width:150px;height:225px;" src="http://newlevelsports.files.wordpress.com/2009/01/shaq-hed.jpg" border="0" alt="" /&gt;I was recently reading &lt;a href="http://www.amazon.com/gp/product/B00283VSFS?ie=UTF8&amp;tag=jeffblankenburg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B00283VSFS"&gt;The Twitter Book&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jeffblankenburg-20&amp;l=as2&amp;o=1&amp;a=B00283VSFS" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; by Tim O'Reilly and Sarah Milstein, and while I didn't learn much about &lt;a href="http://twitter.com/jblankenburg"&gt;Twitter&lt;/a&gt; that I didn't already know, I did learn something about &lt;a href="http://en.wikipedia.org/wiki/Shaquille_O%27Neal"&gt;Shaquille O'Neal&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Did you know that before each of his basketball games, Shaq would tweet his location, and give the first follower that showed up a pair of tickets to the game that night?  He calls it "Random Acts of Shaqness," and it's an absolutely brilliant idea.&lt;br /&gt;&lt;br /&gt;Not one to come up with my own original ideas, I'm starting my own random acts of giving now as well.  I am working with several book publishers to give away their technical books in a more unique way.  Going forward, about once a week, I will be posting a message on Twitter with the phrase "Random Acts of Reading."  It will also include my specific location, and a "password."  The first person to say the password to me (in person, you cheaters) wins a book.  It's that simple.  To kick it off, I will be giving away two copies of &lt;a href="http://www.amazon.com/gp/product/B00283VSFS?ie=UTF8&amp;tag=jeffblankenburg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B00283VSFS"&gt;The Twitter Book&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jeffblankenburg-20&amp;l=as2&amp;o=1&amp;a=B00283VSFS" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; this week.&lt;br /&gt;&lt;br /&gt;So keep your eye on Twitter...I might just be right behind you.&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/B00283VSFS?ie=UTF8&amp;tag=jeffblankenburg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B00283VSFS"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://ecx.images-amazon.com/images/I/51ll%2B9dmy2L._SL500_AA240_.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-127498427184405713?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=2HmmL3GG3Og:F2jHv6zai_U:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=2HmmL3GG3Og:F2jHv6zai_U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=2HmmL3GG3Og:F2jHv6zai_U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=2HmmL3GG3Og:F2jHv6zai_U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=2HmmL3GG3Og:F2jHv6zai_U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=2HmmL3GG3Og:F2jHv6zai_U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=2HmmL3GG3Og:F2jHv6zai_U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=2HmmL3GG3Og:F2jHv6zai_U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=2HmmL3GG3Og:F2jHv6zai_U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=2HmmL3GG3Og:F2jHv6zai_U:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=2HmmL3GG3Og:F2jHv6zai_U:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/2HmmL3GG3Og" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/2HmmL3GG3Og/random-acts-of-reading.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/05/random-acts-of-reading.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-9002020900607314128</guid><pubDate>Mon, 27 Apr 2009 13:41:00 +0000</pubDate><atom:updated>2009-04-27T12:46:11.204-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">kalamazoox</category><category domain="http://www.blogger.com/atom/ns#">kalamazoo x</category><category domain="http://www.blogger.com/atom/ns#">kalx</category><title>My Thoughts from Kalamazoo X</title><description>&lt;a href="http://kalamazoox.org"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 323px; height: 88px;" src="http://kalamazoox.org/themes/brushed_steel/logo.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This weekend, I had the honor to speak at the &lt;a href="http://kalamazoox.org"&gt;Kalamazoo X Conference&lt;/a&gt;, in Kalamazoo, Michigan.  I had modest expectations for this event, as there had been some massive shake-ups in the format and execution of the conference in the weeks leading up to it.&lt;br /&gt;&lt;br /&gt;What I discovered, however, was that the organizers of this conference, and &lt;a href="http://mjeaton.net/blog"&gt;Michael Eaton&lt;/a&gt; in particular, were merely refactoring this event to near perfection.  Instead of a hum-drum 2 or 3 track event with 60 minute sessions, they changed it to something VERY different.  Something I've never seen before.  It was a one-track conference.  16 sessions. Each speaker had 25 minutes to present.&lt;br /&gt;&lt;br /&gt;I'm always intrigued when you take something that everyone is used to, and apply new rules to it.  By changing the paradigm of the "session" from 60 or 75 minutes to 25, it forced us, as speakers, to rethink how and what we present.  As a result:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;IT WAS AMAZING.&lt;/h2&gt;&lt;br /&gt;Here's a recap of some of my favorite sessions (in the order they were presented):&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Social Networking For Geeks&lt;/h2&gt;&lt;a href="http://www.flickr.com/photos/29942169@N08/3460690417/"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 500px; height: 398px;" src="http://farm4.static.flickr.com/3545/3460690417_3e051ddf2c.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;This session was presented by &lt;a href="http://codinggeekette.com"&gt;Sarah Dutkiewicz&lt;/a&gt;, and really covered the what and why of social networks.  She talked about Plaxo and LinkedIn, and the purpose those serve as contact information repositories.  She then moved to talk about Facebook, Friendfeed, and the all-too-often-mentioned-this-day Twitter.  It's not about telling people about the breakfast you had today...it's about learning and interacting with other like-minded individuals.  Once you can leap that hurdle, you'll see the value in services like Twitter.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Branding 101&lt;/h2&gt;&lt;a href="http://www.linkedin.com/pub/6/478/b13"&gt;Clovis Bordeaux&lt;/a&gt; was one of the presenters I had never seen before.  Due to technical difficulties, he wasn't able to use his slides, but he has an excellent stage presence that more than made up for the lack of slides.  He talked about branding, both from a business perspective, as well as the personal side.  It really tied well into some of the things that my presentation on self-promotion would cover later in the day.  I look forward to seeing future presentations from Clovis.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Classic Design Patterns In Everyday Code&lt;/h2&gt;One of the two sessions to actually show code in the presentation, &lt;a href="http://mvwood.com/"&gt;Mike Wood&lt;/a&gt; talked about Design Patterns, and how important, time-saving, and relevant they are in today's applications.  Mike has a great presentation style, and I enjoy hearing him speak.  This was no exception.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;3 Tips For Improving Your Dev Process&lt;/h2&gt;&lt;a href="http://www.flickr.com/photos/sadukie/3476614442/"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 500px; height: 375px;" src="http://farm4.static.flickr.com/3633/3476614442_6505d69f40.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://frazzleddad.com"&gt;Jim Holmes&lt;/a&gt;' talk on improving your dev process was excellent.  The recurring theme of the day was the communication is important, and this session drove that point home.  Since 2 of his 3 points had been covered in some respects before his talk, Jim focused a good portion of his presentation on Estimation, and the inexact science that it is.  His resonating quote:  "It's estimation, not EXACTimation."&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Change&lt;/h2&gt;&lt;a href="http://www.flickr.com/photos/sadukie/3475796119/"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 500px; height: 375px;" src="http://farm4.static.flickr.com/3620/3475796119_ed078f61b4.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fallenrogue.com"&gt;Leon Gersing&lt;/a&gt;'s talk, given during a rolling thunderstorm, had perhaps the greatest impact on the audience at Kalamazoo X.  First starting in code, he talked about accomodating change in our lives.  Change in our workplace, or perhaps even the place we work.  Ultimately, he reminded us that we should be open and prepared for change.  Resistance is futile.  He ended with this excellent quote:  "It is not necessary to change. Survival is not mandatory." --W. Edward Demming&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Community - Get Involved!&lt;/h2&gt;&lt;a href="http://www.flickr.com/photos/sadukie/3476627958/"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 500px; height: 375px;" src="http://farm4.static.flickr.com/3318/3476627958_d348d9ec77.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;The perfect ending to the day, Mike Wood has an opportunity to talk with the audience about the importance of finding your community.  Whether that is a user group, a Twitter crowd, or just some participation in some online forums, you have much to gain from the people around you.  Embrace that opportunity, and get involved!  It was the perfect message for the day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-9002020900607314128?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=tgGN8iD69KI:I-pH3jKJyGk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=tgGN8iD69KI:I-pH3jKJyGk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=tgGN8iD69KI:I-pH3jKJyGk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=tgGN8iD69KI:I-pH3jKJyGk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=tgGN8iD69KI:I-pH3jKJyGk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=tgGN8iD69KI:I-pH3jKJyGk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=tgGN8iD69KI:I-pH3jKJyGk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=tgGN8iD69KI:I-pH3jKJyGk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=tgGN8iD69KI:I-pH3jKJyGk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=tgGN8iD69KI:I-pH3jKJyGk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/tgGN8iD69KI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/tgGN8iD69KI/my-thoughts-from-kalamazoo-x.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/04/my-thoughts-from-kalamazoo-x.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-8405435748454299115</guid><pubDate>Thu, 09 Apr 2009 15:54:00 +0000</pubDate><atom:updated>2009-04-09T14:20:38.913-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">windows 7</category><category domain="http://www.blogger.com/atom/ns#">internet explorer 8</category><category domain="http://www.blogger.com/atom/ns#">msdn unleashed</category><category domain="http://www.blogger.com/atom/ns#">technet</category><category domain="http://www.blogger.com/atom/ns#">arcready</category><title>Windows Client Road Show Featuring Windows 7 and Internet Explorer 8</title><description>&lt;p&gt;Spring brings not only rain and flowers (you know, April shows and May flowers), it also brings our spring technical events. And this time our technical events are taking on a slightly different form.&lt;/p&gt;  &lt;p&gt;Okay, to be completely honest, we are still calling the sessions ArcReady (our event for architects and those who want to become architects), MSDN Events Unleashed (for the developer), and the new TechNet Events Unleashed (for the IT Professional). But we are also doing something different for the spring event series: there's a single, connected theme running throughout all events.&lt;/p&gt;  &lt;p&gt;And what is that theme, you ask? It's all things next generation Windows client, featuring Windows 7 and Internet Explorer 8!&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="0" align="center"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="middle"&gt;         &lt;p align="left"&gt;&lt;a href="http://www.microsoft.com/windows/windows-7/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Windows 7" border="0" alt="Windows 7" src="http://lh4.ggpht.com/_zcmHYcwTZAU/Sd47F-z-5YI/AAAAAAAAAGQ/2JEw-AtCSI0/Windows7Logo5.gif?imgmax=800" width="125" height="32" /&gt;&lt;/a&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="middle"&gt;         &lt;p align="left"&gt;&lt;strong&gt;&lt;font size="5"&gt;+ &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="middle"&gt;         &lt;p align="left"&gt;&lt;a href="http://www.microsoft.com/windows/internet-explorer/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Internet Explorer 8" border="0" alt="Internet Explorer 8" src="http://lh4.ggpht.com/_zcmHYcwTZAU/Sd47GUfwBII/AAAAAAAAAGU/0eSJZkg-FBY/IE8Logo4.gif?imgmax=800" width="191" height="30" /&gt;&lt;/a&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;ArcReady - Brain Food for the Architect     &lt;br /&gt;&lt;/strong&gt;The client (or presentation) tier of our applications is taking on an increasingly important role. Users are expecting more compelling user interfaces, but they also want more functionality from their applications. In this ArcReady we examine how to design and deliver well architected client applications that will be easy to maintain and extend.&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="border-bottom: #365f91 1px solid; border-left: #365f91 1px solid; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; background: white; border-top: #365f91 1px solid; border-right: #365f91 1px solid; padding-top: 5px"&gt;&lt;font color="#365f91"&gt;&lt;strong&gt;Topic 1: Trends and Patterns on the Client Tier&lt;/strong&gt;        &lt;br /&gt;In our first topic we will take a vendor and platform neutral look at some of the trends and emerging technologies that can be used on the client tier. We will look at techniques like Mashups, technologies like Natural User Interfaces (NUI) and the increasing importance of the mobile platform. We will also look at some common patterns that can be used in the architecture of the client tier.        &lt;br /&gt;        &lt;br /&gt;&lt;strong&gt;Topic 2: Applying Microsoft Technology on the Client Tier&lt;/strong&gt;        &lt;br /&gt;In our second topic we will take some look at how we can use Microsoft technologies to create well architected and compelling client applications. We will look at technologies like Silverlight and WPF that can be used to create compelling clients. We will also look at technologies that can be used to make your applications more extensible for future development. We will also examine some architectural guidance developed by the Microsoft Patterns and Practices group.&lt;/font&gt;&lt;/div&gt; &lt;/blockquote&gt;  &lt;p align="justify"&gt;&lt;strong&gt;MSDN Events Unleashed - Get Your Dev On     &lt;br /&gt;&lt;/strong&gt;Internet Explorer 8 recently &lt;a href="http://www.microsoft.com/windows/internet-explorer/worldwide-sites.aspx"&gt;released to the web&lt;/a&gt;, and with that release comes a wide range of new capabilities that &lt;a href="http://msdn.microsoft.com/en-us/ie/default.aspx"&gt;developers can exploit&lt;/a&gt;. Of even more impact to developers everywhere is the upcoming release of &lt;a href="http://www.microsoft.com/windows/windows-7/default.aspx"&gt;Windows 7&lt;/a&gt;, also bringing with it several new capabilities for &lt;a href="http://www.microsoft.com/windows/windows-7/whats-new.aspx"&gt;consumers&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/windows/default.aspx"&gt;developers&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="border-bottom: #365f91 1px solid; border-left: #365f91 1px solid; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; background: white; border-top: #365f91 1px solid; border-right: #365f91 1px solid; padding-top: 5px"&gt;&lt;font color="#365f91"&gt;&lt;strong&gt;Topic 1: Internet Explorer 8 for Developers         &lt;br /&gt;&lt;/strong&gt;The Windows Internet Explorer 8 browser makes it easier to explore and interact with the web. Did you know that there will be a new standards mode by default? While it can easily be turned off, knowing the potential to impact this may have on many sites that have been crafted around various features in past versions is a good idea. Attend this session to learn which current practices you need to change and how the new standards mode affects your development techniques and your existing sites. We review tools that are built into Internet Explorer 8 to help developers debug and create Web pages. We also discuss Web Slices, Accelerators, and Search Suggestion - all of which are key new features in this latest release.        &lt;br /&gt;        &lt;br /&gt;&lt;strong&gt;Topic 2: Developing on Microsoft Windows 7         &lt;br /&gt;&lt;/strong&gt;Building applications that are easy to use, visually appealing, and offer high performance is a challenge that developers face every day. Innovative applications can greatly improve the user experience, empowering companies to differentiate their services and solutions. However, developers are increasingly asked to do more in less time, while also optimizing the power and performance requirements of their applications. The Windows 7 platform makes it easy for developers to create engaging, user-friendly applications by providing familiar tools and rich development features that allow them to take advantage of the latest PC capabilities. In this session we will explore the new Taskbar and Jump Lists, the Scenic Ribbon, file management with Libraries, and Windows Web Services among many other enhancements to the new operating system. &lt;/font&gt;&lt;/div&gt; &lt;/blockquote&gt;  &lt;p align="justify"&gt;&lt;strong&gt;TechNet Events Unleashed - Supporting the Backbone of the Industry     &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://www.microsoft.com/windowsserver2008/en/us/R2.aspx"&gt;Windows Server 2008 R2&lt;/a&gt;, &lt;a href="http://technet.microsoft.com/en-us/windows/default.aspx"&gt;Windows 7&lt;/a&gt;, and &lt;a href="http://technet.microsoft.com/en-us/ie/default.aspx"&gt;Internet Explorer 8&lt;/a&gt; represent both a wave of change and disruption to IT operations as well as an opportunity for IT professionals to have a big impact on their organizations.&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="border-bottom: #365f91 1px solid; border-left: #365f91 1px solid; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; background: white; border-top: #365f91 1px solid; border-right: #365f91 1px solid; padding-top: 5px"&gt;&lt;font color="#365f91"&gt;&lt;strong&gt;Topic 1: Windows Server 2008 R2 - Optimize Your Time         &lt;br /&gt;&lt;/strong&gt;Get a jump start on your peers with Windows Server 2008 R2 by joining us for this no nonsense technical session, where we will discuss the critical improvements in the next version of Windows Server. Some have argued that, given the impressive scope of new functionality in Windows Server 2008 R2, it should not be an “R2” release, but rather should be given a completely new name. They point to features such as Direct Access, Branch Caching, Live Migration, Powershell 2.0, and VDI that will help you cut down on the amount of time you spend doing mundane tasks, reduce end user frustration and support headaches, and give your mobile workforce a competitive edge through ubiquitous access to company data. There’s a good chance that by attending this session you’ll find a way to save time and money with Windows Server 2008 R2, and so you’ll get the time you spend with us back many times over.        &lt;br /&gt;        &lt;br /&gt;&lt;strong&gt;Topic 2: Windows 7 - Maximize Your Potential&lt;/strong&gt;        &lt;br /&gt;In designing Windows 7, the engineering team had a clear focus on what we call ‘the fundamentals': performance, application compatibility, device compatibility, reliability, security and battery life. Early reviews of Windows 7 seem to indicate that the choice to focus on the fundamentals is resonating well with many users and professionals. And, IT professionals will further benefit from the enhancements to manageability and security. You’ll also learn how your investments in testing and evaluating Windows Vista will pay off in the transition to Windows 7. Come see firsthand what all the buzz is about in this demo-intensive session where we explore the UI improvements, performance gains, and manageability enhancements in the next client operating system from Microsoft.        &lt;br /&gt;        &lt;br /&gt;&lt;strong&gt;Topic 3: Internet Explorer 8 - Get Excited About the Browser Again&lt;/strong&gt;        &lt;br /&gt;Internet Explorer is currently the most widely used browser in business, and while we’ve seen nice incremental improvements to IE in recent history, we haven’t seen as many truly earth shattering changes. Well, many agree that the next release of IE, Internet Explorer 8, provides the most compelling upgrade to IE in many years. In a typical day, users spend 2 hours or more per day in the browser, so significant improvements here can have tremendous impact on productivity and the way we work. The browser needs to be thought of in the same terms as an operating system—it has to be rich, robust, interoperable, easy to use and secure. Internet Explorer 8 is a browser that meets these needs and more for users, enterprises, IT professionals and developers alike. Come learn how the new improvements, too numerous to mention here, are driving many to get excited about the browser again.        &lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Event Schedule     &lt;br /&gt;&lt;/strong&gt;Here is a quick summary of the events scheduled this spring, starting in late April and concluding in mid-June.&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="0" width="900"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://arcready.com/"&gt;&lt;strong&gt;ArcReady&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="300"&gt;&lt;a href="http://msdnevents.com/unleashed/"&gt;&lt;strong&gt;MSDN Events Unleashed&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="300"&gt;&lt;strong&gt;&lt;a href="http://technetevents.com/unleashed/"&gt;TechNet Events Unleashed&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408637&amp;amp;Culture=en-US"&gt;Waukesha, WI&lt;/a&gt; - April 28, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409532&amp;amp;Culture=en-US"&gt;Waukesha, WI&lt;/a&gt; - April 28, 2009 at 1:00pm&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410531&amp;amp;Culture=en-US"&gt;Waukesha, WI&lt;/a&gt; - April 28, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408639&amp;amp;Culture=en-US"&gt;Austin, TX&lt;/a&gt; - April 28, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409533&amp;amp;Culture=en-US"&gt;Austin, TX&lt;/a&gt; - April 28, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410535&amp;amp;Culture=en-US"&gt;Austin, TX&lt;/a&gt; - April 28, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408640&amp;amp;Culture=en-US"&gt;Bloomington, MN&lt;/a&gt; - April 30, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409534&amp;amp;Culture=en-US"&gt;Bloomington, MN&lt;/a&gt; - April 30, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410536&amp;amp;Culture=en-US"&gt;Bloomington, MN&lt;/a&gt; - April 30, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408641&amp;amp;Culture=en-US"&gt;Cleveland, OH&lt;/a&gt; - April 30, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409535&amp;amp;Culture=en-US"&gt;Cleveland, OH&lt;/a&gt; - April 30, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410537&amp;amp;Culture=en-US"&gt;Cleveland, OH&lt;/a&gt; - April 30, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408642&amp;amp;Culture=en-US"&gt;Indianapolis, IN&lt;/a&gt; - May 4, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409536&amp;amp;Culture=en-US"&gt;Indianapolis, IN&lt;/a&gt; - May 4, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410538&amp;amp;Culture=en-US"&gt;Indianapolis, IN&lt;/a&gt; - May 4, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408643&amp;amp;Culture=en-US"&gt;Chicago, IL&lt;/a&gt; - May 5, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409537&amp;amp;Culture=en-US"&gt;Chicago, IL&lt;/a&gt; - May 5, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410540&amp;amp;Culture=en-US"&gt;Chicago, IL&lt;/a&gt; - May 5, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408644&amp;amp;Culture=en-US"&gt;Columbus, OH&lt;/a&gt; - May 12, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409540&amp;amp;Culture=en-US"&gt;Columbus, OH&lt;/a&gt; - May 12, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410541&amp;amp;Culture=en-US"&gt;Columbus, OH&lt;/a&gt; - May 12, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408645&amp;amp;Culture=en-US"&gt;Houston, TX&lt;/a&gt; - May 12, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409542&amp;amp;Culture=en-US"&gt;Houston, TX&lt;/a&gt; - May 12, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410542&amp;amp;Culture=en-US"&gt;Houston, TX&lt;/a&gt; - May 12, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408646&amp;amp;Culture=en-US"&gt;Mason, OH&lt;/a&gt; - May 14, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409543&amp;amp;Culture=en-US"&gt;Mason, OH&lt;/a&gt; - May 14, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410543&amp;amp;Culture=en-US"&gt;Mason, OH&lt;/a&gt; - May 14, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408647&amp;amp;Culture=en-US"&gt;Overland Park, KS&lt;/a&gt; - May 14, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409544&amp;amp;Culture=en-US"&gt;Overland Park, KS&lt;/a&gt; - May 14, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410544&amp;amp;Culture=en-US"&gt;Overland Park, KS&lt;/a&gt; - May 14, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408648&amp;amp;Culture=en-US"&gt;Dallas, TX&lt;/a&gt; - May 19, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409547&amp;amp;Culture=en-US"&gt;Dallas, TX&lt;/a&gt; - May 19, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410546&amp;amp;Culture=en-US"&gt;Dallas, TX&lt;/a&gt; - May 19, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408649&amp;amp;Culture=en-US"&gt;Southfield, MI&lt;/a&gt; - May 20, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409548&amp;amp;Culture=en-US"&gt;Southfield, MI&lt;/a&gt; - May 20, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410548&amp;amp;Culture=en-US"&gt;Southfield, MI&lt;/a&gt; - May 20, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408650&amp;amp;Culture=en-US"&gt;Downers Grove, IL&lt;/a&gt; - May 20, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409549&amp;amp;Culture=en-US"&gt;Downers Grove, IL&lt;/a&gt; - May 20, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410549&amp;amp;Culture=en-US"&gt;Downers Grove, IL&lt;/a&gt; - May 20, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408651&amp;amp;Culture=en-US"&gt;St. Louis, MO&lt;/a&gt; - May 21, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409550&amp;amp;Culture=en-US"&gt;St. Louis, MO&lt;/a&gt; - May 21, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410551&amp;amp;Culture=en-US"&gt;St. Louis, MO&lt;/a&gt; - May 21, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408652&amp;amp;Culture=en-US"&gt;Nashville, TN&lt;/a&gt; - June 11, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409553&amp;amp;Culture=en-US"&gt;Nashville, TN&lt;/a&gt; - June 11, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410552&amp;amp;Culture=en-US"&gt;Nashville, TN&lt;/a&gt; - June 11, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="300"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032408653&amp;amp;Culture=en-US"&gt;Knoxville, TN&lt;/a&gt; - June 12, 2009 at 9:00am&lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409554&amp;amp;Culture=en-US"&gt;Knoxville, TN&lt;/a&gt; - June 12, 2009 at 1:00pm&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="300"&gt;         &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032410553&amp;amp;Culture=en-US"&gt;Knoxville, TN&lt;/a&gt; - June 12, 2009 at 3:10pm&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&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:0767317B-992E-4b12-91E0-4F059A8CECA8:18e96c80-6480-4238-ad38-998d9585948b" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/ArcReady" rel="tag"&gt;ArcReady&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MSDN+Events+Unleashed" rel="tag"&gt;MSDN Events Unleashed&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TechNet+Events+Unleashed" rel="tag"&gt;TechNet Events Unleashed&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+7" rel="tag"&gt;Windows 7&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Internet+Explorer+8" rel="tag"&gt;Internet Explorer 8&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-8405435748454299115?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zZasa7V-XfM:v6nMUGsaxPI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=zZasa7V-XfM:v6nMUGsaxPI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zZasa7V-XfM:v6nMUGsaxPI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zZasa7V-XfM:v6nMUGsaxPI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=zZasa7V-XfM:v6nMUGsaxPI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zZasa7V-XfM:v6nMUGsaxPI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zZasa7V-XfM:v6nMUGsaxPI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=zZasa7V-XfM:v6nMUGsaxPI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zZasa7V-XfM:v6nMUGsaxPI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=zZasa7V-XfM:v6nMUGsaxPI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/zZasa7V-XfM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/zZasa7V-XfM/windows-client-road-show-featuring.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/04/windows-client-road-show-featuring.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-6316302281195392622</guid><pubDate>Mon, 06 Apr 2009 12:52:00 +0000</pubDate><atom:updated>2009-04-07T08:54:42.167-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">robots.txt</category><category domain="http://www.blogger.com/atom/ns#">search engines</category><category domain="http://www.blogger.com/atom/ns#">live search</category><category domain="http://www.blogger.com/atom/ns#">Google Search</category><category domain="http://www.blogger.com/atom/ns#">Yahoo</category><title>Hiding Your Pages From Search Engines</title><description>&lt;center&gt;&lt;img style="margin:0 10px 10px 0;width: 500px;" src="http://jeffblankenburg.com/uploaded_images/spider-704000.jpg" border="0" alt="" /&gt;&lt;/center&gt;&lt;br /&gt;This morning, on Twitter, a question was posed about how to prevent your web pages from being indexed by the search engines' spiders.  In one of the few ways that standards have truly been adopted, we have several options for doing this.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Why would I want to exclude my pages from search?&lt;/h2&gt;There are many reasons, really.  I have created an &lt;a href="http://jeffblankenburg.com/2009/03/toughest-developer-puzzle-ever.aspx"&gt;online puzzle&lt;/a&gt;, as an example, and I do not want people to find the levels through a search engine.  Another example would be a private Wiki.  If you haven't considered the power of a Wiki to manage your life's data, I'll be writing an article on that shortly.  Finally, there are times where certain pages of your site just shouldn't be found.  I recently made a transition to .aspx pages from .html pages on my blog, and I wanted to exclude the HTML pages from the search engines.&lt;br /&gt;&lt;br /&gt;The point is that there are plenty of reasons to hide a single page or an entire site from search engines.  What's great about this is that it's SUPER easy.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;So how do we do it?&lt;/h2&gt;There's actually 3 different ways, depending on what you're trying to accomplish.  This list includes a .txt file on your server, meta tags on your pages, and additional properties on your &amp;lt;a href=""&amp;gt; tags.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Meta tags&lt;/h2&gt;I'm starting with the approach I feel is the best, and if you don't like it, there are certainly alternatives below.  Meta tags are universally supported by the search engines, and allow you page-by-page control.  There are actually four different states this meta tag can take.  Here they are:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;meta &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;="robots" &lt;/span&gt;&lt;span style="color:red"&gt;content&lt;/span&gt;&lt;span style="color:blue"&gt;="noindex,nofollow" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;By adding this tag to your page, it will not only be ignored by the search engines, but any links on the page will also not be followed.  This is the tag I wold recommend using on any page you want to be ignored.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;meta &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;="robots" &lt;/span&gt;&lt;span style="color:red"&gt;content&lt;/span&gt;&lt;span style="color:blue"&gt;="noindex,follow" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;In this case, we've changed "nofollow" to "follow."  This means that while THIS page will be ignored, any pages this one links to will be checked out.  However, if those other pages also have this meta tag on them, they will still be ignored.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;meta &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;="robots" &lt;/span&gt;&lt;span style="color:red"&gt;content&lt;/span&gt;&lt;span style="color:blue"&gt;="index,nofollow" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;Now we've flipped the bit on the "noindex" value.  This value will allow the search engines to index the page, but because we have "nofollow" specified, any pages it links to will not be found.  (If other pages without this tag link to those pages, however, they WILL be found.  You need to cover ALL of the possible paths to each page.)&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;meta &lt;/span&gt;&lt;span style="color:red"&gt;name&lt;/span&gt;&lt;span style="color:blue"&gt;="robots" &lt;/span&gt;&lt;span style="color:red"&gt;content&lt;/span&gt;&lt;span style="color:blue"&gt;="index,follow" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;Finally, we have the complete opposite of what this article is about.  These values will not only allow your page to be indexed, but it will also follow all of the links on the page, and try to index them as well.  (Again, each page will be evaluated for meta tags as the spider finds it.)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Nofollow links&lt;/h2&gt;Nofollow links are a bit of an extension from the meta tag.  Instead of telling the spider not to index the whole page, you're able to tell it not to index any of the pages it links to.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;a &lt;/span&gt;&lt;span style="color:red"&gt;href&lt;/span&gt;&lt;span style="color:blue"&gt;="http://jeffblankenburg.com/secret.aspx" &lt;/span&gt;&lt;span style="color:red"&gt;rel&lt;/span&gt;&lt;span style="color:blue"&gt;="nofollow"&amp;gt;&lt;/span&gt;Jeff's Secret Page&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;a&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;This option is technically the most flexible, because it allows you to manage what is found on a link-by-link basis.  The downside is that you need to manage it on a link-by-link basis.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Robots.txt&lt;/h2&gt;This is the most all-encompassing option, it allows you to exclude your entire site with one simple file.  Here's an example robots.txt file.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;User-agent: *&lt;br /&gt;Disallow: /secrets/&lt;br /&gt;Disallow: /tdpe/&lt;br /&gt;Disallow: secret.aspx&lt;/pre&gt;The "user-agent" section of this file allows you to even specify WHICH search engines you want to exclude.  In our example file, we're letting everyone in, but not allowing them in two specific directories, and one specific page.&lt;br /&gt;&lt;br /&gt;The upside to this approach is that we can manage our search engine inclusions and exclusions in one centralized file.  The downside is that if a search engine ignores your robots.txt file, your whole site will be indexed.&lt;br /&gt;&lt;br /&gt;It is my opinion that you should use a combination of these methods if you really want to keep some of your pages from being found.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The guaranteed solution&lt;/h2&gt;It may seem simple, but many developers still use the idea of "security by obscurity."  Just because nobody knows your page is there does NOT mean that it can't be found.  If you need your content protected, the only guaranteed way to do that is by password protecting it.  Create a wall, and make sure you don't leave any holes.  This will most certainly deter the spiders from finding your pages of content.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Removing pages that have already been indexed&lt;/h2&gt;This is a trickier conundrum.  Your pages are already showing up in search engines, and you need to get them "unlisted."  The good news?  It's relatively easy, and will happen automatically if you used one of the methods listed above.  The bad news?  If you need your pages taken down ASAP, you have to go to each individual search engine.  Here's the places to start:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Live Search&lt;/strong&gt; - &lt;a href="http://blogs.msdn.com/webmaster/archive/2009/01/28/removing-content-from-the-live-search-index.aspx"&gt;http://blogs.msdn.com/webmaster/archive/2009/01/28/removing-content-from-the-live-search-index.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Google&lt;/strong&gt; - &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?answer=61062"&gt;http://www.google.com/support/webmasters/bin/answer.py?answer=61062&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Yahoo&lt;/strong&gt; - &lt;a href="http://help.yahoo.com/l/us/yahoo/search/siteexplorer/delete/siteexplorer-46.html"&gt;http://help.yahoo.com/l/us/yahoo/search/siteexplorer/delete/siteexplorer-46.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-6316302281195392622?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nArlhn93NhU:J5Jcy_bklGk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=nArlhn93NhU:J5Jcy_bklGk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nArlhn93NhU:J5Jcy_bklGk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nArlhn93NhU:J5Jcy_bklGk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=nArlhn93NhU:J5Jcy_bklGk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nArlhn93NhU:J5Jcy_bklGk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nArlhn93NhU:J5Jcy_bklGk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=nArlhn93NhU:J5Jcy_bklGk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nArlhn93NhU:J5Jcy_bklGk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nArlhn93NhU:J5Jcy_bklGk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/nArlhn93NhU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/nArlhn93NhU/hiding-your-pages-from-search-engines.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/04/hiding-your-pages-from-search-engines.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-5952168149090269185</guid><pubDate>Mon, 30 Mar 2009 12:59:00 +0000</pubDate><atom:updated>2009-03-30T09:15:53.895-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tdpe. toughest developer puzzle ever</category><title>The Toughest Developer Puzzle Ever</title><description>&lt;a href="http://www.toughestdeveloperpuzzleever.com"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 500px;" src="http://www.toughestdeveloperpuzzleever.com/tdpe/assets/images/header_off.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;There was a bit of a leak on the interwebs this weekend, and many people are now aware of a little project I'm putting together that I'm calling the Toughest Developer Puzzle Ever.  Each level exists as a web page, and the challenge is to figure out how to get to the next level.  To do this, users will have to use ALL of the information available to them.  It's not all coding tasks, but it plays on the knowledge of someone who works in the software world.&lt;br /&gt;&lt;br /&gt;Some of the puzzles might have you debugging Javascript, others might require you to recognize a font and translate it.  The idea is that it's going to require a broad range of knowledge and problem solving skills.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;How Do I Get Started?&lt;/h2&gt;The initial levels of the puzzle can be found at &lt;a href="http://toughestdeveloperpuzzleever.com"&gt;http://toughestdeveloperpuzzleever.com&lt;/a&gt;.  We have put together about 35 levels so far, and are working with others to get this puzzle over 100 levels.  If you have questions, we also have a Twitter account set up for this:  &lt;a href="http://twitter.com/tdpe"&gt;TDPE&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;How Can I Contribute?&lt;/h2&gt;Contact me, Jeff Blankenburg, directly at &lt;a href="mailto:tdpe@jeffblankenburg.com"&gt;tdpe@jeffblankenburg.com&lt;/a&gt;.  I'm looking for challenging puzzles in the vein of the ones currently up on the site, but I'm always open to innovation and new challenges.&lt;br /&gt;&lt;br /&gt;Your puzzles will be hosted on your website, and we're expecting the traffic from this puzzle to also help drive traffic to your website.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-5952168149090269185?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nt_nsXQo7oc:37aYLGax0ZQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=nt_nsXQo7oc:37aYLGax0ZQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nt_nsXQo7oc:37aYLGax0ZQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nt_nsXQo7oc:37aYLGax0ZQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=nt_nsXQo7oc:37aYLGax0ZQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nt_nsXQo7oc:37aYLGax0ZQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nt_nsXQo7oc:37aYLGax0ZQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=nt_nsXQo7oc:37aYLGax0ZQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nt_nsXQo7oc:37aYLGax0ZQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=nt_nsXQo7oc:37aYLGax0ZQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/nt_nsXQo7oc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/nt_nsXQo7oc/toughest-developer-puzzle-ever.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">9</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/03/toughest-developer-puzzle-ever.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-7026379606654411618</guid><pubDate>Fri, 27 Mar 2009 01:30:00 +0000</pubDate><atom:updated>2009-03-26T22:00:29.376-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">mix09</category><category domain="http://www.blogger.com/atom/ns#">tim heuer</category><category domain="http://www.blogger.com/atom/ns#">mix conference</category><category domain="http://www.blogger.com/atom/ns#">stir trek</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">mix 09</category><category domain="http://www.blogger.com/atom/ns#">expression blend</category><category domain="http://www.blogger.com/atom/ns#">mix</category><title>Stir Trek  (no, that's not a typo)</title><description>&lt;a href="http://jeffblankenburg.com/uploaded_images/startreklogo-782989.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://jeffblankenburg.com/uploaded_images/startreklogo-782989.png" border="0" alt="" /&gt;&lt;/a&gt;Did you go to Mix '09?  Neither did a lot of people.  Don't get me wrong...it was well-attended, but in these tough times, it's getting harder and harder to justify the flights, hotels, meals, and conference fees for the major conferences anymore.  So I'm doing my best to help you out.&lt;br /&gt;&lt;br /&gt;On May 8th, we will be holding an event called Stir Trek.  In short, it is meant to bring the highlights of the Mix conference to a location you can afford to visit.  It will be held in Columbus, Ohio at the Marcus Crosswoods movie theater.  But there's a twist.&lt;br /&gt;&lt;br /&gt;There will be 10 sessions in two tracks, and they will run from 9am - 3pm.  At 3pm, we're going to turn off the laptops and cell phones, and lean back to enjoy a private screening of the new Star Trek movie that is opening that day.  It should be an amazing day.&lt;br /&gt;&lt;br /&gt;We will be covering Silverlight 3, Internet Explorer 8, Expression Blend 3, User Experience Design, WPF, Rapid Prototyping with SketchFlow, and ASP.NET MVC, among other topics from the Mix 09 conference.  In addition, &lt;a href="http://timheuer.com/blog/"&gt;Tim Heuer&lt;/a&gt; has agreed to join us for the day, and will be presenting the Silverlight 3 session.  This will be a great opportunity for you to have direct access to a Silverlight expert from Microsoft for the day.  Bring your questions, and be sure to ask them.  Tim is a great developer and speaker, and I think he'll definitely add to what is already going to be a spectacular event.&lt;br /&gt;&lt;br /&gt;We have put together a website for this event, and you can find it here:  &lt;a href="http://www.stirtrek.com"&gt;http://www.stirtrek.com&lt;/a&gt;.  On the site, you'll find the most updated information available about the conference, including sessions, speakers, location, sponsors, etc.&lt;br /&gt;&lt;br /&gt;I hope you'll join us for a full day of technology.  I promise there will be NO jokes about developing for "The Enterprise."&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fjeffblankenburg.com%2f2009%2f03%2fstir-trek-no-thats-not-typo.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fjeffblankenburg.com%2f2009%2f03%2fstir-trek-no-thats-not-typo.aspx" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-7026379606654411618?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yTk4xwTam_w:2bl9d40pSJQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=yTk4xwTam_w:2bl9d40pSJQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yTk4xwTam_w:2bl9d40pSJQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yTk4xwTam_w:2bl9d40pSJQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=yTk4xwTam_w:2bl9d40pSJQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yTk4xwTam_w:2bl9d40pSJQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yTk4xwTam_w:2bl9d40pSJQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=yTk4xwTam_w:2bl9d40pSJQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yTk4xwTam_w:2bl9d40pSJQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yTk4xwTam_w:2bl9d40pSJQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/yTk4xwTam_w" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/yTk4xwTam_w/stir-trek-no-thats-not-typo.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/03/stir-trek-no-thats-not-typo.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-519326488709677396</guid><pubDate>Mon, 23 Mar 2009 12:33:00 +0000</pubDate><atom:updated>2009-03-23T10:47:15.156-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">msdn unleashed</category><title>Upcoming MSDN Unleashed Events</title><description>&lt;a href="http://www.msdnevents.com/unleashed"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 500px;" src="http://www.michaelazocar.com/blog/wp-content/uploads/image0041.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;As much as I like writing posts about technology, best practices, and my random interpretations of my life experiences, sometimes I just need to tell you about stuff. This post falls in that category.&lt;br /&gt;&lt;br /&gt;If you're not aware, we offer a series of events called MSDN Unleashed each quarter of the year. This quarter, we are going to be covering &lt;a href="http://www.microsoft.com/windows/internet-explorer/default.aspx"&gt;Internet Explorer 8&lt;/a&gt; and &lt;a href="http://www.microsoft.com/windows/windows-7/default.aspx"&gt;Windows 7&lt;/a&gt;. These technologies are going to be the focal point for developers in the coming months and years, and are something you, as a software developer, should at least have a passing knowledge of, if not an in-depth understanding. Here's what the sessions will cover:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Session 1: Internet Explorer 8 for Developers&lt;/h2&gt;The Windows Internet Explorer 8 browser makes it easier to explore and interact with the web. Did you know that there will be a new standards mode by default? While it can easily be turned off, knowing the potential to impact this may have on many sites that have been crafted around various features in past versions is a good idea. Attend this session to learn which current practices you need to change and how the new standards mode affects your development techniques and your existing sites. We review tools that are built into Internet Explorer 8 to help developers debug and create Web pages. We also discuss Web Slices, Accelerators, and Search Suggestion – all of which are key new features in this latest release.&lt;br /&gt;&lt;br /&gt;In this session we’ll show you:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Developer Tools&lt;/li&gt;&lt;li&gt;Selectors API&lt;/li&gt;&lt;li&gt;Use and create accelerators&lt;/li&gt;&lt;li&gt;Use and create web slices&lt;/li&gt;&lt;li&gt;Use and create search suggestions&lt;/li&gt;&lt;li&gt;AJAX Navigation enhancements with Virtual Earth demo on history, AJAX Cross Domain Calls&lt;/li&gt;&lt;li&gt;CSS improvements (printing, counters, new pseudo classes)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Session 2: Developing on Microsoft Windows 7&lt;/h2&gt;&lt;br /&gt;Building applications that are easy to use, visually appealing, and offer high performance is a challenge that developers face every day. Innovative applications can greatly improve the user experience, empowering companies to differentiate their services and solutions. However, developers are increasingly asked to do more in less time, while also optimizing the power and performance requirements of their applications. The Windows 7 platform makes it easy for developers to create engaging, user-friendly applications by providing familiar tools and rich development features that allow them to take advantage of the latest PC capabilities. In this session we will explore the new Taskbar and Jump Lists, the Scenic Ribbon, file management with Libraries, and Windows Web Services among many other enhancements to the new operating system.&lt;br /&gt;&lt;br /&gt;In this session we’ll show you:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;New Features in Windows 7&lt;/li&gt;&lt;li&gt;Use and create jump lists&lt;/li&gt;&lt;li&gt;Scenic Ribbon API&lt;/li&gt;&lt;li&gt;Use and create Libraries&lt;/li&gt;&lt;li&gt;Windows Web Services API&lt;/li&gt;&lt;li&gt;Additional enhancements that support development&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;When and where will these events be?&lt;/h2&gt;&lt;table border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td width=200&gt;Location/Registration&lt;/td&gt;&lt;td width=150&gt;Date&lt;/td&gt;&lt;td width=150&gt;Time&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409532&amp;amp;Culture=en-US"&gt;Waukesha, WI&lt;/a&gt;&lt;/td&gt;&lt;td&gt;4/28/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409533&amp;amp;Culture=en-US"&gt;Austin, TX&lt;/a&gt;&lt;/td&gt;&lt;td&gt;4/28/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409534&amp;amp;Culture=en-US"&gt;Bloomington, MN&lt;/a&gt;&lt;/td&gt;&lt;td&gt;4/30/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409535&amp;amp;Culture=en-US"&gt;Cleveland, OH&lt;/a&gt;&lt;/td&gt;&lt;td&gt;4/30/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409536&amp;amp;Culture=en-US"&gt;Indianapolis, IN&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5/4/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409537&amp;amp;Culture=en-US"&gt;Chicago, IL&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5/5/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409540&amp;amp;Culture=en-US"&gt;Columbus, OH&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5/12/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409542&amp;amp;Culture=en-US"&gt;Houston, TX&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5/12/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409543&amp;amp;Culture=en-US"&gt;Mason, OH&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5/14/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409544&amp;amp;Culture=en-US"&gt;Overland Park, KS&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5/14/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409547&amp;amp;Culture=en-US"&gt;Dallas, TX&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5/19/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409548&amp;amp;Culture=en-US"&gt;Southfield, MI&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5/20/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409549&amp;amp;Culture=en-US"&gt;Downers Grove, IL&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5/20/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409550&amp;amp;Culture=en-US"&gt;St. Louis, MO&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5/21/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409553&amp;amp;Culture=en-US"&gt;Nashville, TN&lt;/a&gt;&lt;/td&gt;&lt;td&gt;6/11/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409554&amp;amp;Culture=en-US"&gt;Knoxville, TN&lt;/a&gt;&lt;/td&gt;&lt;td&gt;6/12/2009&lt;/td&gt;&lt;td&gt;1:00pm - 2:50pm&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-519326488709677396?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=mW4MQ4vHqd0:AxdnfBGZGx8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=mW4MQ4vHqd0:AxdnfBGZGx8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=mW4MQ4vHqd0:AxdnfBGZGx8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=mW4MQ4vHqd0:AxdnfBGZGx8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=mW4MQ4vHqd0:AxdnfBGZGx8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=mW4MQ4vHqd0:AxdnfBGZGx8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=mW4MQ4vHqd0:AxdnfBGZGx8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=mW4MQ4vHqd0:AxdnfBGZGx8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=mW4MQ4vHqd0:AxdnfBGZGx8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=mW4MQ4vHqd0:AxdnfBGZGx8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/mW4MQ4vHqd0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/mW4MQ4vHqd0/upcoming-msdn-unleashed-events.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/03/upcoming-msdn-unleashed-events.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-4408868816046888643</guid><pubDate>Thu, 05 Mar 2009 18:21:00 +0000</pubDate><atom:updated>2009-03-05T14:11:03.350-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">live services</category><category domain="http://www.blogger.com/atom/ns#">search box</category><category domain="http://www.blogger.com/atom/ns#">live search</category><category domain="http://www.blogger.com/atom/ns#">Google Search</category><category domain="http://www.blogger.com/atom/ns#">live</category><title>Adding An 800 Pound Gorilla To Your Site</title><description>In order to &lt;a href="http://jeffblankenburg.com/2009/03/adding-search-to-your-site-in-5-minutes.aspx"&gt;restore my integrity (see comments)&lt;/a&gt;, I have decided, against my completely subjective opinion, to show you how to add Google's search box to your site.&lt;br /&gt;&lt;br /&gt;Keep in mind that my previous post on this subject, &lt;a href="http://jeffblankenburg.com/2009/03/adding-search-to-your-site-in-5-minutes.aspx"&gt;Adding Search To Your Site (In 5 Minutes)&lt;/a&gt;, was written using the Live Search box for one simple reason:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;strong&gt;It's easier than using Google.&lt;/strong&gt;&lt;/blockquote&gt;Even &lt;a href="http://www.askdavetaylor.com/how_can_i_add_a_google_search_box_to_my_web_site.html"&gt;Dave Taylor&lt;/a&gt;, a well-known and respected blogger, feels that Google's "HTML samples could be cleaned up a bit, usually, so I've also recast it as proper XHTML rather than somewhat sloppy HTML."&lt;br /&gt;&lt;br /&gt;Why is it sloppy?  Why is not that intuitive?  Because &lt;a href="http://www.google.com/coop/cse/"&gt;Google also offers this service for a fee&lt;/a&gt;, and most every way you search for a "Google Search Box" leads you to the paid service.  Check this out:&lt;br /&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;" src="http://jeffblankenburg.com/uploaded_images/googlesitesearch-761707.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Having Said All That...&lt;/h2&gt;Here's how we implement the Google AJAX search box on your site.  Start by heading over to the &lt;a href="http://code.google.com/apis/ajaxsearch/signup.html"&gt;sign up page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;1. Create an AJAX Search API Key&lt;/h2&gt;You need to generate an API key that will authenticate you each time that the search service is called.  If you have more than one site, you will need more than one API key.  Check the box and enter the URL to get your key.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;2.  Copy the HTML they provide you&lt;/h2&gt;We are immediately provided with some HTML for a "sample" page to get us started.  It basically contains two javascript &amp;lt;script&amp;gt; blocks, and a &amp;lt;div&amp;gt; that needs to be placed in your page's &amp;lt;body&amp;gt;.  &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#a31515"&gt;DOCTYPE &lt;/span&gt;&lt;span style="color:red"&gt;html PUBLIC &lt;/span&gt;&lt;span style="color:blue"&gt;"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;html &lt;/span&gt;&lt;span style="color:red"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;head&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;title&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;My Google AJAX Search API Application&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;title&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;script &lt;/span&gt;&lt;span style="color:red"&gt;src&lt;/span&gt;&lt;span style="color:blue"&gt;="http://www.google.com/jsapi?key=[redacted]" &lt;/span&gt;&lt;span style="color:red"&gt;type&lt;/span&gt;&lt;span style="color:blue"&gt;="text/javascript"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;script&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;script &lt;/span&gt;&lt;span style="color:red"&gt;language&lt;/span&gt;&lt;span style="color:blue"&gt;="Javascript" &lt;/span&gt;&lt;span style="color:red"&gt;type&lt;/span&gt;&lt;span style="color:blue"&gt;="text/javascript"&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:green"&gt;//&amp;lt;![CDATA[&lt;br /&gt;        &lt;/span&gt;google.load(&lt;span style="color:#a31515"&gt;"search"&lt;/span&gt;, &lt;span style="color:#a31515"&gt;"1"&lt;/span&gt;);    &lt;br /&gt;        &lt;span style="color:blue"&gt;function &lt;/span&gt;OnLoad() {&lt;br /&gt;            &lt;span style="color:green"&gt;// Create a search control&lt;br /&gt;            &lt;/span&gt;&lt;span style="color:blue"&gt;var &lt;/span&gt;searchControl = &lt;span style="color:blue"&gt;new &lt;/span&gt;google.search.SearchControl();&lt;br /&gt;            &lt;span style="color:green"&gt;// Add in a full set of searchers&lt;br /&gt;            &lt;/span&gt;&lt;span style="color:blue"&gt;var &lt;/span&gt;localSearch = &lt;span style="color:blue"&gt;new &lt;/span&gt;google.search.LocalSearch();&lt;br /&gt;            searchControl.addSearcher(localSearch);&lt;br /&gt;            searchControl.addSearcher(&lt;span style="color:blue"&gt;new &lt;/span&gt;google.search.WebSearch());&lt;br /&gt;            searchControl.addSearcher(&lt;span style="color:blue"&gt;new &lt;/span&gt;google.search.VideoSearch());&lt;br /&gt;            searchControl.addSearcher(&lt;span style="color:blue"&gt;new &lt;/span&gt;google.search.BlogSearch());&lt;br /&gt;            &lt;span style="color:green"&gt;// Set the Local Search center point&lt;br /&gt;            &lt;/span&gt;localSearch.setCenterPoint(&lt;span style="color:#a31515"&gt;"New York, NY"&lt;/span&gt;);&lt;br /&gt;            &lt;span style="color:green"&gt;// Tell the searcher to draw itself and tell it where to attach&lt;br /&gt;            &lt;/span&gt;searchControl.draw(document.getElementById(&lt;span style="color:#a31515"&gt;"searchcontrol"&lt;/span&gt;));&lt;br /&gt;            &lt;span style="color:green"&gt;// Execute an inital search&lt;br /&gt;            &lt;/span&gt;searchControl.execute(&lt;span style="color:#a31515"&gt;"Google"&lt;/span&gt;)&lt;span style="color:#a31515"&gt;'&lt;br /&gt;        &lt;/span&gt;}&lt;br /&gt;        &lt;br /&gt;        google.setOnLoadCallback(OnLoad);&lt;br /&gt;        &lt;span style="color:green"&gt;//]]&amp;gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;script&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;head&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;body&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;div &lt;/span&gt;&lt;span style="color:red"&gt;id&lt;/span&gt;&lt;span style="color:blue"&gt;="searchcontrol"&amp;gt;&lt;/span&gt;Loading...&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;div&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;body&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;html&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This was the differentiator for me.  I now need to take this sample code apart, moving the javascript to one part of my code, and adding a div to another part.  Not everyone can look at a chunk of HTML and figure out where all of the pieces are supposed to go.  There's a link to the &lt;a href="http://code.google.com/apis/ajaxsearch/documentation/"&gt;API Documentation&lt;/a&gt;, but to a non-developer, that page might be even scarier.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;3.  Customizing the control.&lt;/h2&gt;At this point, we have a search box that searches for the term "Google," and uses "New York, NY" as our "local" location.  We need to change those values, at a minimum.  But if that's all we change, we'll still be returning results from the entire Internet, not just our website.&lt;br /&gt;&lt;br /&gt;In order to get this control to search ONLY our website, we're going to have to start reading the API Documentation.  Which means understanding the Google API Class Library, which means having a respectable background in understanding software.&lt;br /&gt;&lt;br /&gt;All of this adds up to a control that could be very useful, but just falls short in comparison to the Live alternative.  Here's how you do it though...&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:consolas;font-size:12"&gt;&lt;span style="color:blue"&gt;            var &lt;/span&gt;siteSearch = &lt;span style="color:blue"&gt;new &lt;/span&gt;google.search.WebSearch();&lt;br /&gt;            siteSearch.setUserDefinedLabel(&lt;span style="color:#a31515"&gt;"Blankenthoughts"&lt;/span&gt;);&lt;br /&gt;            siteSearch.setUserDefinedClassSuffix(&lt;span style="color:#a31515"&gt;"siteSearch"&lt;/span&gt;);&lt;br /&gt;            siteSearch.setSiteRestriction(&lt;span style="color:#a31515"&gt;"jeffblankenburg.com"&lt;/span&gt;);&lt;br /&gt;            searchControl.addSearcher(siteSearch);&lt;/pre&gt;&lt;h2&gt;Why the search engine is actually irrelevant&lt;/h2&gt;Several of the commenters on my previous post felt that I was "snubbing" Google by not discussing their search box option, and that Google was the only "true" search provider out there.  I contend that in this scenario, where I am only searching through the pages of my site, the search engine doesn't matter.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.live.com"&gt;Live Search&lt;/a&gt;, &lt;a href="http://google.com"&gt;Google&lt;/a&gt;, and &lt;A href="http://yahoo.com"&gt;Yahoo!&lt;/a&gt; are all going to have my pages indexed.  All three of them are capable of bringing back the most relevant results for my search terms.  So why does it really matter what search engine you're using?&lt;br /&gt;&lt;br /&gt;For that matter, what criteria are you using to determine which search engine is the "best?"  Live Search and Yahoo both bring me very relevant results when I use them as a search engine.  What is Google providing you as a search engine that Live and Yahoo aren't?  I'm truly interested to start a discussion here.  Sell me on why I should use Google over one of the other guys.  I'm always open to a convincing argument.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-4408868816046888643?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=A-2vxPGbEjQ:3yBUmHYZ3ME:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=A-2vxPGbEjQ:3yBUmHYZ3ME:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=A-2vxPGbEjQ:3yBUmHYZ3ME:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=A-2vxPGbEjQ:3yBUmHYZ3ME:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=A-2vxPGbEjQ:3yBUmHYZ3ME:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=A-2vxPGbEjQ:3yBUmHYZ3ME:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=A-2vxPGbEjQ:3yBUmHYZ3ME:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=A-2vxPGbEjQ:3yBUmHYZ3ME:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=A-2vxPGbEjQ:3yBUmHYZ3ME:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=A-2vxPGbEjQ:3yBUmHYZ3ME:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/A-2vxPGbEjQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/A-2vxPGbEjQ/adding-800-pound-gorilla-to-your-site.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/03/adding-800-pound-gorilla-to-your-site.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-6434233079257894303</guid><pubDate>Thu, 05 Mar 2009 13:04:00 +0000</pubDate><atom:updated>2009-03-05T14:24:53.051-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">statistics</category><category domain="http://www.blogger.com/atom/ns#">twitter</category><title>Twitter Is Not A Measuring Stick.  At All.</title><description>There are many of us out there who are driven by statistics.  Bloggers especially.  We compare the number of subscribers to our feed, the traffic we see, sometimes even the money we make.  This post is about how Twitter SHOULD NOT be something we use as a measuring stick.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The Experiment&lt;/h2&gt;I have a &lt;a href="http://cutdownthenets.com"&gt;website&lt;/a&gt; that I run every March for the NCAA March Madness tournament.  This will be the 8th year I've run it, and until now, it has grown completely organically.  Friends and colleagues told their friends and colleagues, and before I knew it, I had over 500 people filling out brackets on my website.&lt;br /&gt;&lt;br /&gt;With the rise of &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;, &lt;a href="http://facebook.com"&gt;Facebook&lt;/a&gt;, and other social networks, I thought I'd see what I could do with a little promotion.&lt;br /&gt;&lt;br /&gt;So I created a new Twitter handle:  &lt;a href="http://twitter.com/cutdownthenets"&gt;cutdownthenets&lt;/a&gt;.  I started by following about 25 some of my close friends on Twitter.  But that seemed silly, because they were already going to know about my site.  I am trying to reach people that I've never met before.&lt;br /&gt;&lt;br /&gt;How do I find a huge number of people that are interested in sports, brackets, or the NCAA tournament?  Well, &lt;a href="http://twitter.com/espn"&gt;ESPN&lt;/a&gt; has a Twitter presence, what if I just follow everyone that is following ESPN?  They've got over 40,000 followers.  Surely some of them will be interested in my site.  Heck, if I got 1% of them, that would be 400 new participants in my little office pool.&lt;br /&gt;&lt;br /&gt;So I opened ESPN's "followers" page, and started following every single person I could.  Fatigue started setting in around 1,000 though.  So I left it at that.  Based on my expectations, if I only got 1% of those people, I'd  have 10 new followers the next day.&lt;br /&gt;&lt;br /&gt;When I woke up this morning, &lt;a href="http://twitter.com/cutdownthenets"&gt;cutdownthenets&lt;/a&gt; had over 200 followers.&lt;br /&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;" src="http://jeffblankenburg.com/uploaded_images/200-743068.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;Are you kidding me?  Surely this can't be right.  As it turns out, it is.  About 20% of a random sample of Twitter users followed me back, without knowing anything about me, and certainly without reading any of my posts.  (I'd only made 5 posts TOTAL at that point).&lt;br /&gt;&lt;br /&gt;In fact, my 1% number did come into play in all of this.  About 1% of the users that I followed had an automatic follow and DM action set up somewhere.  I got lots of messages like these:&lt;br /&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;" src="http://jeffblankenburg.com/uploaded_images/dm-715924.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;What This All Means&lt;/h2&gt;What this little experiment has made me realize is that the number of followers someone has is almost completely artificial.  There's TONS of services that try to compare people based on the number of Twitter followers they have, and that's just wrong.  If I wanted more followers, all I need to do is start following a ton of people.  Heck, I could even "unfollow" those people the next day to really inflate my &lt;a href="http://twitterratio.com/"&gt;Twitter Ratio&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The quality of a Twitter user should be determined by how relevant their content is to their followers.  There are plenty of popular users that have a signal/noise ration approaching ZERO.  They don't participate in the conversation, it's just a constant stream of noise in the form of links, messages, and more links.  (I'm looking at you, &lt;a href="http://twitter.com/guykawasaki"&gt;Guy Kawasaki&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;So the next time you get followed by someone, take the time to look at their posts.  Read their bio.  Truly determine whether listening to that person is valuable to you.  I'm re-evaluating the people I follow because of this.  There's a bunch of noise out there, and I'm in search of value.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;How This Can Be Harnessed For Good&lt;/h2&gt;Twitter could be a very valuable tool for companies.  Some, like &lt;a href="http://www.dell.com/twitter"&gt;Dell&lt;/a&gt;, really seem to get that.  They can provide valuable information and resources directly to their customers.  But this can be taken a step further.&lt;br /&gt;&lt;br /&gt;What if every time someone mentioned your product on Twitter, you knew about it?  What if every time someone had a negative experience with your company, you heard about it, and could help to remedy the situation?  Using the Search features at &lt;a href="http://search.twitter.com"&gt;http://search.twitter.com&lt;/a&gt;, or a desktop application like &lt;a href="http://www.tweetdeck.com/beta/"&gt;TweetDeck&lt;/a&gt;, I am able to pay attention to the specific terms that I am interested in, and interact with people that use those terms.  The terms I am currently following are "Zune", "March Madness", and "Microsoft Tag."  If ANY Twitter user mentions one of those things, I immediately get a notification in TweetDeck, and can reply to them, follow them, etc.&lt;br /&gt;&lt;br /&gt;It allows me to meet and interact with other people that have similar interests to me.  THIS is where the value of Twitter is.  Finding common interests, and having conversations about them.  Just getting a HUGE number of followers is not.&lt;br /&gt;&lt;br /&gt;I no longer care about how many followers you have.  It doesn't matter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-6434233079257894303?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=ftGG_qLtyFY:qjRVGhf6qck:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=ftGG_qLtyFY:qjRVGhf6qck:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=ftGG_qLtyFY:qjRVGhf6qck:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=ftGG_qLtyFY:qjRVGhf6qck:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=ftGG_qLtyFY:qjRVGhf6qck:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=ftGG_qLtyFY:qjRVGhf6qck:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=ftGG_qLtyFY:qjRVGhf6qck:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=ftGG_qLtyFY:qjRVGhf6qck:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=ftGG_qLtyFY:qjRVGhf6qck:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=ftGG_qLtyFY:qjRVGhf6qck:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/ftGG_qLtyFY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/ftGG_qLtyFY/twitter-is-not-measuring-stick-at-all.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/03/twitter-is-not-measuring-stick-at-all.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-2274379344285101796</guid><pubDate>Wed, 04 Mar 2009 14:17:00 +0000</pubDate><atom:updated>2009-03-05T07:38:18.623-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">live services</category><category domain="http://www.blogger.com/atom/ns#">search box</category><category domain="http://www.blogger.com/atom/ns#">live search</category><category domain="http://www.blogger.com/atom/ns#">Google Search</category><category domain="http://www.blogger.com/atom/ns#">live</category><title>Adding Search To Your Site (In 5 Minutes)</title><description>Many of us today have a website.  Some of them function as blogs, some are link repositories, and some are just shrines to our interests, but all of them have content of some kind.  And when people come to our site, they want to be able to find the content they're looking for:&lt;br /&gt;&lt;br /&gt;"Where is that great article he wrote comparing the &lt;a href="http://jeffblankenburg.com/2008/11/10-reasons-zune-beats-ipod-seriously.aspx"&gt;Zune to the iPod&lt;/a&gt;?"&lt;br /&gt;&lt;br /&gt;"I want to find that article he wrote on &lt;a href="http://jeffblankenburg.com/2008/08/top-10-things-new-twitter-users-need-to.aspx"&gt;tips for new Twitter users&lt;/a&gt;.  Where do I start?"&lt;br /&gt;&lt;br /&gt;This article is about adding that functionality to your site, for FREE, in about 5 minutes.  There's only THREE steps, in fact.  And believe it or not, this simple, free solution is from &lt;strong&gt;Microsoft&lt;/strong&gt;.  There is a &lt;a href="http://code.google.com/apis/ajaxsearch/web.html"&gt;Google solution&lt;/a&gt; as well, but requires API keys, and a more intimate knowledge of Javascript and writing code.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;So where do I start?&lt;/h2&gt;You can start here:  &lt;a href="http://search.live.com/siteowner"&gt;http://search.live.com/siteowner&lt;/a&gt;.  The rest of my example will walk you through the "Advanced Search Box" option, but there is also a "Basic Search Box" as well.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Step 1:  Pick a search type&lt;/h2&gt;In this first step, you need to choose a "Display Name" for your search box, as well as the site you want to search.  In my case, I am going to use jeffblankenburg.com.  I also have another website at &lt;a href="http://juxtaposeblog.com"&gt;juxtaposeblog.com&lt;/a&gt; that is a little outdated, but has some good content as well.  I clicked the "Add Another Site" button, and now my box will search both sites.&lt;br /&gt;&lt;br /&gt;Once you've got your site entered, you can already test your search box.  There's a button the bottom right side of the screen.  Once you're done, you can click Next. (&lt;a href="http://help.live.com/help.aspx?project=WL_Searchv1&amp;market=en-us&amp;querytype=topic&amp;query=WL_SEARCH_CONC_Macros.htm"&gt;If you're interested in the Search Macros that are available, you can read about them here.&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;" src="http://jeffblankenburg.com/uploaded_images/step1-701804.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Step 2: Customize it&lt;/h2&gt;This step just allows you to choose a size and color for your search box.  I went with Blue, but there's a few other colors for you to choose as well.  Make your choices, and proceed to the next page.  That's where you'll get your HTML for your web site.&lt;br /&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;" src="http://jeffblankenburg.com/uploaded_images/step2-793667.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Step 3:  Copy the HTML snippet&lt;/h2&gt;This step is as straighforward as the title.  Copy the HTML they provide you, and paste it into your pages.  In my case, I just added it to the right navigation of my Master Page, and it was magically on every page of my blog.  Hopefully it's that simple for you as well.  You can see my new search box on the top right side of my &lt;a href="http://jeffblankenburg.com"&gt;blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-2274379344285101796?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=in4sSDGqqS4:Xgt3MAkQwPs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=in4sSDGqqS4:Xgt3MAkQwPs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=in4sSDGqqS4:Xgt3MAkQwPs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=in4sSDGqqS4:Xgt3MAkQwPs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=in4sSDGqqS4:Xgt3MAkQwPs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=in4sSDGqqS4:Xgt3MAkQwPs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=in4sSDGqqS4:Xgt3MAkQwPs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=in4sSDGqqS4:Xgt3MAkQwPs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=in4sSDGqqS4:Xgt3MAkQwPs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=in4sSDGqqS4:Xgt3MAkQwPs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/in4sSDGqqS4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/in4sSDGqqS4/adding-search-to-your-site-in-5-minutes.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/03/adding-search-to-your-site-in-5-minutes.aspx</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-20740090.post-4235512747327981732</guid><pubDate>Thu, 26 Feb 2009 18:03:00 +0000</pubDate><atom:updated>2009-02-26T22:02:24.458-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">career success</category><category domain="http://www.blogger.com/atom/ns#">codestock</category><category domain="http://www.blogger.com/atom/ns#">devlink</category><category domain="http://www.blogger.com/atom/ns#">conferences</category><title>Speaking Opportunities Abound in the Heartland!</title><description>&lt;img style="float:left; margin:0 10px 10px 0;" src="http://jeffblankenburg.com/uploaded_images/jeffblankenburgspeaking-775636.jpg" border="0" alt="" /&gt;Do you have an idea for a talk?  Maybe you just made some major strides with jQuery on your current project.  Maybe you just found a great way to dynamically create XAML objects.  Maybe you built a WPF framework.  Whatever your current accomplishments, you've got a story to tell.  So why not tell it?&lt;br /&gt;&lt;br /&gt;There are several great conferences coming up in the next few months, and most of them are still looking for speakers.  What's holding you back?  You're an expert on something, so share that expertise with your community!  It will be well received and greatly appreciated.&lt;br /&gt;&lt;br /&gt;Here's a quick list of the events that are coming up, and how to get on the speaker lists that are still open.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2 style="display:block;"&gt;Cincinnati Silverlight Firestarter&lt;/h2&gt;&lt;img src="http://blogs.msdn.com/blogfiles/mithund/WindowsLiveWriter/SilverlightFirestartereventinRedmondWARe_EA7A/Untitled.jpg" border="0" height="150"&gt;&lt;br /&gt;March 28, 2009, Mason, OH - This event will be held at the Microsoft office in Mason, OH.  It will cover the basics of getting started with Silverlight, including XAML, Expression Tools, and server communication basics.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.clicktoattend.com/invitation.aspx?code=136101"&gt;Click here to register, and for more information on the event.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Central Ohio Day of .NET&lt;/h2&gt;&lt;img src="http://cinnug.org/images/CentralOhioDoDNLogo_small.png" border="0"&gt;&lt;br /&gt;April 18, 2009, Wilmington, OH - This event is taking place at the Roberts Centre, right off of I-71, between Cincinnati and Columbus.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codingbandit.com/SpeakerSubmission"&gt;Click here to submit a topic to speak on.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cinnug.org/cododn/"&gt;Click here to read more about the event.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Kalamazoo X Conference&lt;/h2&gt;&lt;img src="http://www.blindbackup.com/themes/brushed_steel/logo.png"&gt;&lt;br /&gt;April 25, 2009, Kalamazoo, MI - The Kalamazoo X Conference intends to uniquely complement standard technical conferences by enabling attendees to boost their process, design, and communication skills.  I'm looking forward to this one.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kalamazoox.org/"&gt;Click here to read more about the conference.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;CodeStock&lt;/h2&gt;&lt;img src="http://codestock.org/App_Themes/CodeStock09/images/nerdSkull_logo.png" border="0"&gt;&lt;br /&gt;June 26-27, 2009, Knoxville, TN - This is the second year of CodeStock, and they've even added an extra day this year.  It will be held at Pellissippi State University, and will certainly be another great event.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://codestock.org/Speakers.aspx"&gt;Click here to get involved as a speaker.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://codestock.org/"&gt;Click here to get more information about the event.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;DevLink&lt;/h2&gt;&lt;img src="http://lh6.ggpht.com/_GKAbJtL3OyM/SW17wo06GiI/AAAAAAAAAG8/rNRnwnbmZWU/devLinkLogo_thumb%5B2%5D.png?imgmax=800" border="0" width="250"&gt;&lt;br /&gt;August 13-15, 2009, Nashville, TN - This huge event is being held at Lipscomb University, and is anticipating as many as 800 attendees.  Last year, there was a bus chartered to bring people to Nashville from as far as Grand Rapids, MI.  Expect a "who's who" of software developers to be in attendance at this event.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://devlink.net/"&gt;Click here to become a speaker and to learn more about DevLink.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20740090-4235512747327981732?l=jeffblankenburg.com%2Fdefault.aspx'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yMrESETaXl8:nXuJ237__rI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=yMrESETaXl8:nXuJ237__rI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yMrESETaXl8:nXuJ237__rI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yMrESETaXl8:nXuJ237__rI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=yMrESETaXl8:nXuJ237__rI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yMrESETaXl8:nXuJ237__rI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yMrESETaXl8:nXuJ237__rI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?i=yMrESETaXl8:nXuJ237__rI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yMrESETaXl8:nXuJ237__rI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Blankenthoughts?a=yMrESETaXl8:nXuJ237__rI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Blankenthoughts?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Blankenthoughts/~4/yMrESETaXl8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Blankenthoughts/~3/yMrESETaXl8/speaking-opportunities-abound-in.aspx</link><author>noreply@blogger.com (Jeff Blankenburg)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jeffblankenburg.com/2009/02/speaking-opportunities-abound-in.aspx</feedburner:origLink></item></channel></rss>
