<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-682979582715341480</id><updated>2011-12-07T16:16:10.482+11:00</updated><category term='Behaviors'/><category term='Facebook'/><category term='Tricks'/><category term='Editor'/><category term='Silverlight'/><category term='Badge'/><title type='text'>Brandon Truong</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-8001745375741157174</id><published>2011-02-19T19:33:00.001+11:00</published><updated>2011-02-19T19:33:06.590+11:00</updated><title type='text'>What's the first thing you think of when you wake up in the morning?</title><content type='html'>&lt;p class="formspringmeAnswer"&gt;could I get back to sleep again? lol&lt;/p&gt;&lt;p class="formspringmeFooter"&gt;    &lt;a href="http://www.formspring.me/tranphuctruong?utm_medium=social&amp;utm_source=blogger&amp;utm_campaign=shareanswer"&gt;Ask me anything&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-8001745375741157174?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/8001745375741157174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=8001745375741157174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/8001745375741157174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/8001745375741157174'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2011/02/what-first-thing-you-think-of-when-you.html' title='What&amp;#39;s the first thing you think of when you wake up in the morning?'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-4990397414675453664</id><published>2010-07-28T20:20:00.000+10:00</published><updated>2010-07-28T21:20:06.402+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Winamp Tool kills Silverlight application</title><content type='html'>&lt;p&gt;I have experienced something really strange. When I installed &lt;a href="http://www.winamp.com/media-player/en"&gt;Winamp&lt;/a&gt;, a music player, my Silverlight application cant run in Debug mode any more.&lt;/p&gt;  &lt;p&gt;Anyway, I am just posting about this, so if any one has their Silverlight app can’t run in Debug mode all of the sudden, you might check if you have installed Winamp tool or not?&lt;/p&gt;  &lt;p&gt;Cheers,&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-4990397414675453664?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/4990397414675453664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=4990397414675453664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/4990397414675453664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/4990397414675453664'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/07/winamp-tool-kills-silverlight.html' title='Winamp Tool kills Silverlight application'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-6894876281550713351</id><published>2010-04-08T23:14:00.004+10:00</published><updated>2010-04-16T21:47:38.925+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Use Enum as ItemsSource</title><content type='html'>&lt;p&gt;Imagine we have an Enum type and we want to use that Enum type to be an ItemsSource of ListBox or ComboBox. Bolow is an example of an Enum type called AirFareBookingStatus&lt;/p&gt;  &lt;div   style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; padding-left: 4px; width: 97.04%; padding-right: 4px; direction: ltr; height: 167px;  max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solidfont-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;   &lt;div   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 99.66%; padding-right: 0px; direction: ltr; border-top-style: none; height: 1px;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;" id="codeSnippet"&gt;     &lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; AirFareBookingStatus&lt;/pre&gt;    &lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;    &lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt;     AlreadyPaid,&lt;/pre&gt;    &lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 18.96%; padding-right: 0px; direction: ltr; border-top-style: none; height: 16px;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum4"  style="color:#606060;"&gt;   4:&lt;/span&gt;     Cancelled,&lt;/pre&gt;    &lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum5"  style="color:#606060;"&gt;   5:&lt;/span&gt;     Delayed,&lt;/pre&gt;    &lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum6"  style="color:#606060;"&gt;   6:&lt;/span&gt;     Deleted,&lt;/pre&gt;    &lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum7"  style="color:#606060;"&gt;   7:&lt;/span&gt;     InProcessing,&lt;/pre&gt;    &lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum8"  style="color:#606060;"&gt;   8:&lt;/span&gt;     New&lt;/pre&gt;    &lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum9"  style="color:#606060;"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;What we want to achieve is to populate all the statuses from the Enum to a ListBox or ComboBox.&lt;br /&gt;&lt;br /&gt;There is already a solution for this from the &lt;a href="http://forums.silverlight.net/forums/p/88981/205256.aspx" target="_blank"&gt;Silverlight forum&lt;/a&gt;. The idea is to go through all the Field and put them into a IEnumerable of KeyValuepair&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div   style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; padding-left: 4px; width: 97.5%; padding-right: 4px; direction: ltr;  max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solidfont-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 104.27%; padding-right: 0px; direction: ltr; border-top-style: none; height: 94px;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;" id="codeSnippet"&gt;    &lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; IEnumerable&amp;lt;KeyValuePair&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, AirFareBookingStatus&amp;gt;&amp;gt; results; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt; var x = &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(AirFareBookingStatus).GetFields().Where(info =&amp;gt; info.FieldType.Equals(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(AirFareBookingStatus)));&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt; results = from field &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; x&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum4"  style="color:#606060;"&gt;   4:&lt;/span&gt;           select &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; KeyValuePair&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, AirFareBookingStatus&amp;gt;(field.Name, (AirFareBookingStatus) Enum.Parse(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(AirFareBookingStatus), field.Name, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;)); &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="line-height: 16px" class="Apple-style-span"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="line-height: normal" class="Apple-style-span"&gt;Then all we have to do is assign the result to ListBox or ComboBox ItemsSource&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div   style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; padding-left: 4px; width: 97.5%; padding-right: 4px; direction: ltr; height: 45px;  max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solidfont-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;  &lt;div   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 97.44%; padding-right: 0px; direction: ltr; border-top-style: none; height: 46px;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; lstStatus.ItemsSource = results;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 91.2%; padding-right: 0px; direction: ltr; border-top-style: none; height: 16px;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt; cmbStatus.ItemsSource = results;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="line-height: 16px" class="Apple-style-span"&gt;&lt;br /&gt;&lt;span style="line-height: normal" class="Apple-style-span"&gt;That would be good enough for it to work.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;But we can even make it more generic by creating a helper function as below&lt;br /&gt;&lt;br /&gt;&lt;div   style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; padding-left: 4px; width: 97.5%; padding-right: 4px; direction: ltr;  max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solidfont-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Helper&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;KeyValuePair&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, T&amp;gt;&amp;gt; GetEnumList&amp;lt;T&amp;gt;()&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum4"  style="color:#606060;"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum5"  style="color:#606060;"&gt;   5:&lt;/span&gt;         var x = &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(T).GetFields().Where(info =&amp;gt; info.FieldType.Equals(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(T)));&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum6"  style="color:#606060;"&gt;   6:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; from field &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; x&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum7"  style="color:#606060;"&gt;   7:&lt;/span&gt;                select &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; KeyValuePair&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, T&amp;gt;(field.Name, (T) Enum.Parse(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(T), field.Name, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;)); &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum8"  style="color:#606060;"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum9"  style="color:#606060;"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Then, we can call that function for every Enum type we have. For example&lt;/p&gt;&lt;div   style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; padding-left: 4px; width: 97.77%; padding-right: 4px; direction: ltr; height: 35px;  max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solidfont-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 96.38%; padding-right: 0px; direction: ltr; border-top-style: none; height: 48px;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; lstStatus.ItemsSource = Helper.GetEnumList&amp;lt;AirFareBookingStatus&amp;gt;();&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt; cmbColors.ItemsSource = Helper.GetEnumList&amp;lt;ColorEnum&amp;gt;();&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;There is still one problem left &lt;span style="font-size:78%;"&gt;we&lt;/span&gt; have. The item still displays the whole object, so make it display correctly, we need to create DataTemplate resource&lt;/p&gt;&lt;div   style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; padding-left: 4px; width: 97.61%; padding-right: 4px; direction: ltr; height: 68px;  max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solidfont-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 81.13%; padding-right: 0px; direction: ltr; border-top-style: none; height: 50px;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 94.06%; padding-right: 0px; direction: ltr; border-top-style: none; height: 16px;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; &amp;lt;DataTemplate x:Key=&lt;span style="color:#006080;"&gt;"KeyValuePairDataTemplate"&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt;     &amp;lt;TextBlock Text=&lt;span style="color:#006080;"&gt;"{Binding Key}"&lt;/span&gt; /&amp;gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 94.17%; padding-right: 0px; direction: ltr; border-top-style: none; height: 16px;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt; &amp;lt;/DataTemplate&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Then apply that DataTemplate to the ItemTemplate of ListBox or ComboBox as below&lt;/p&gt;&lt;div   style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; padding-left: 4px; width: 97.5%; padding-right: 4px; direction: ltr;  max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solidfont-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; &amp;lt;ListBox x:Name=&lt;span style="color:#006080;"&gt;"lstStatus"&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt;     ItemTemplate=&lt;span style="color:#006080;"&gt;"{StaticResource KeyValuePairDataTemplate}"&lt;/span&gt; /&amp;gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt;  &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum4"  style="color:#606060;"&gt;   4:&lt;/span&gt; &amp;lt;ComboBox x:Name=&lt;span style="color:#006080;"&gt;"cmbColors"&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre   style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; direction: ltr; border-top-style: none;   border-left-style: none; overflow: visiblefont-size:8pt;color:black;"&gt;&lt;span id="lnum5"  style="color:#606060;"&gt;   5:&lt;/span&gt;     ItemTemplate=&lt;span style="color:#006080;"&gt;"{StaticResource KeyValuePairDataTemplate}"&lt;/span&gt; /&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;That’s it. Hope that helps. &lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;Continue …&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Now, I have run into another problem. Doing that way above is all good, except the name won’t be as flexible. So, I am going to  &lt;strong&gt;&lt;em&gt;&lt;u&gt;Description&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt; attribute to display data instead of the normal name of the Enum. To do that, I’ve changed a bit of my Enum like below&lt;/p&gt;&lt;div    style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background- margin: 20px 0px 10px; padding-left: 4px; width: 98.52%; padding-right: 4px;  direction: ltr; height: 266px; max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; AirFareBookingStatus&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt;     [Description(&lt;span style="color:#006080;"&gt;"Already Paid"&lt;/span&gt;)]&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum4"  style="color:#606060;"&gt;   4:&lt;/span&gt;     AlreadyPaid,&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum5"  style="color:#606060;"&gt;   5:&lt;/span&gt;     [Description(&lt;span style="color:#006080;"&gt;"i am cancelled"&lt;/span&gt;)]&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum6"  style="color:#606060;"&gt;   6:&lt;/span&gt;     Cancelled,&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum7"  style="color:#606060;"&gt;   7:&lt;/span&gt;     [Description(&lt;span style="color:#006080;"&gt;"I got delayed"&lt;/span&gt;)]&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum8"  style="color:#606060;"&gt;   8:&lt;/span&gt;     Delayed,&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum9"  style="color:#606060;"&gt;   9:&lt;/span&gt;     [Description(&lt;span style="color:#006080;"&gt;"oh man i am about to be deleted"&lt;/span&gt;)]&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum10"  style="color:#606060;"&gt;  10:&lt;/span&gt;     Deleted,&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum11"  style="color:#606060;"&gt;  11:&lt;/span&gt;     [Description(&lt;span style="color:#006080;"&gt;"who is processing me"&lt;/span&gt;)]&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum12"  style="color:#606060;"&gt;  12:&lt;/span&gt;     InProcessing,&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum13"  style="color:#606060;"&gt;  13:&lt;/span&gt;     [Description(&lt;span style="color:#006080;"&gt;"I am brand new babe"&lt;/span&gt;)]&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum14"  style="color:#606060;"&gt;  14:&lt;/span&gt;     New&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum15"  style="color:#606060;"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: normal; "&gt;Next, I changed a bit in my helper function as well. It’ll get the Description attribute and make it to be Key&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div    style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background- margin: 20px 0px 10px; padding-left: 4px; width: 99.12%; padding-right: 4px;  direction: ltr; height: 304px; max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;KeyValuePair&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, T&amp;gt;&amp;gt; GetEnumList&amp;lt;T&amp;gt;()&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt;        {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt;            var x = &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(T).GetFields().Where(info =&amp;gt; info.FieldType.Equals(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(T)));&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum4"  style="color:#606060;"&gt;   4:&lt;/span&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; from field &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; x&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum5"  style="color:#606060;"&gt;   5:&lt;/span&gt;                   select &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; KeyValuePair&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, T&amp;gt;(GetEnumDescription(field), (T)Enum.Parse(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(T), field.Name, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;)); &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum6"  style="color:#606060;"&gt;   6:&lt;/span&gt;        }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum7"  style="color:#606060;"&gt;   7:&lt;/span&gt;  &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum8"  style="color:#606060;"&gt;   8:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GetEnumDescription(FieldInfo field)&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum9"  style="color:#606060;"&gt;   9:&lt;/span&gt;        {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum10"  style="color:#606060;"&gt;  10:&lt;/span&gt;            DescriptionAttribute[] attributes = (DescriptionAttribute[])field.GetCustomAttributes(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(DescriptionAttribute), &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum11"  style="color:#606060;"&gt;  11:&lt;/span&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (attributes.Length &amp;gt; 0)&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum12"  style="color:#606060;"&gt;  12:&lt;/span&gt;            {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum13"  style="color:#606060;"&gt;  13:&lt;/span&gt;                &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; attributes[0].Description;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum14"  style="color:#606060;"&gt;  14:&lt;/span&gt;            }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum15"  style="color:#606060;"&gt;  15:&lt;/span&gt;            &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum16"  style="color:#606060;"&gt;  16:&lt;/span&gt;            {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum17"  style="color:#606060;"&gt;  17:&lt;/span&gt;                &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; field.Name;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum18"  style="color:#606060;"&gt;  18:&lt;/span&gt;            }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum19"  style="color:#606060;"&gt;  19:&lt;/span&gt;        }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Finally, we will have something like this&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_9GiyZFWb_Ys/S8hLKJ7kNeI/AAAAAAAADHM/pkHg_5wHJ4o/s1600-h/Enum%5B2%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Enum" border="0" alt="Enum" src="http://lh3.ggpht.com/_9GiyZFWb_Ys/S8hLN7ZLhbI/AAAAAAAADHQ/4jCjL62LyyI/Enum_thumb.gif?imgmax=800" width="197" height="136" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;That’s it. Let me know if you have any comments.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-6894876281550713351?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/6894876281550713351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=6894876281550713351' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/6894876281550713351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/6894876281550713351'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/04/use-enum-as-itemssource.html' title='Use Enum as ItemsSource'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_9GiyZFWb_Ys/S8hLN7ZLhbI/AAAAAAAADHQ/4jCjL62LyyI/s72-c/Enum_thumb.gif?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-5276334362325647329</id><published>2010-02-03T11:44:00.001+11:00</published><updated>2010-02-03T11:44:56.518+11:00</updated><title type='text'>Creating a Three-Column Silverlight ListBox</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;a href='http://posterous.com/getfile/files.posterous.com/brandontruong/fbfmoHecnedhGsjrHevhyhiGFzlFsvDxsevIdokswIgtIIyeciwJjqdIBcDy/media_httpiexpression_tpimd.jpg.scaled1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/brandontruong/fbfmoHecnedhGsjrHevhyhiGFzlFsvDxsevIdokswIgtIIyeciwJjqdIBcDy/media_httpiexpression_tpimd.jpg.scaled500.jpg" width="500" height="489"/&gt;&lt;/a&gt; &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://expression.microsoft.com/en-us/ee942883.aspx?=mexpnl"&gt;expression.microsoft.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/creating-a-three-column-silverlight-listbox"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-5276334362325647329?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/5276334362325647329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=5276334362325647329' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5276334362325647329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5276334362325647329'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/02/creating-three-column-silverlight.html' title='Creating a Three-Column Silverlight ListBox'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-2133049381380891422</id><published>2010-02-01T10:20:00.001+11:00</published><updated>2010-02-01T10:20:30.609+11:00</updated><title type='text'>jQuery source viewer</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;div class="posterous_quote_citation"&gt;  Check out this website I found at &lt;a href="http://james.padolsey.com/jquery/"&gt;james.padolsey.com&lt;/a&gt;&lt;/div&gt;     &lt;p&gt;This is extremely useful for jQuery developers&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/jquery-source-viewer"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-2133049381380891422?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/2133049381380891422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=2133049381380891422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2133049381380891422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2133049381380891422'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/02/jquery-source-viewer.html' title='jQuery source viewer'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-6270072711064030372</id><published>2010-01-27T15:39:00.001+11:00</published><updated>2010-01-27T15:39:40.124+11:00</updated><title type='text'>jQuery UI DatePicker: Disable Specified Days</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div&gt;    	  	  	  	&lt;h3&gt;jQuery UI DatePicker:  Disable Specified&amp;nbsp;Days&lt;/h3&gt;  	&lt;p style="color: rgb(153, 153, 153);"&gt;&lt;em&gt;Written by David Walsh on Tuesday, January 26, 2010&lt;/em&gt;&lt;/p&gt;  	  	  	&lt;div&gt;  		&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#comments"&gt;&lt;span style="text-indent: 0pt; padding-left: 20px;"&gt;9 &amp;nbsp;Comments&lt;/span&gt;&lt;/a&gt;  		&lt;a href="http://delicious.com/save?url=http://davidwalsh.name/jquery-datepicker-disable-days&amp;amp;title=jQuery+UI+DatePicker:++Disable+Specified%C2%A0Days"&gt;&lt;span style="text-indent: 0pt; padding-left: 20px; padding-right: 5px; text-align: right;"&gt;3&lt;/span&gt;&lt;/a&gt;  		&lt;a href="http://digg.com/submit?phase=2&amp;amp;url=http://davidwalsh.name/jquery-datepicker-disable-days&amp;amp;title=jQuery+UI+DatePicker:++Disable+Specified%C2%A0Days"&gt;&lt;span style=""&gt;Digg&lt;/span&gt;&lt;/a&gt;  		&lt;a href="http://www.facebook.com/sharer.php?u=davidwalsh.name/jquery-datepicker-disable-days&amp;amp;t=jQuery+UI+DatePicker:++Disable+Specified%C2%A0Days"&gt;&lt;span style=""&gt;Facebook&lt;/span&gt;&lt;/a&gt;  		&lt;a href="http://reddit.com/submit?url=http://davidwalsh.name/jquery-datepicker-disable-days&amp;amp;title=jQuery+UI+DatePicker:++Disable+Specified%C2%A0Days"&gt;&lt;span style=""&gt;Reddit&lt;/span&gt;&lt;/a&gt;  		&lt;a href="http://stumbleupon.com/submit?url=http://davidwalsh.name/jquery-datepicker-disable-days&amp;amp;title=jQuery+UI+DatePicker:++Disable+Specified%C2%A0Days"&gt;&lt;span style=""&gt;StumbleUpon&lt;/span&gt;&lt;/a&gt;  		&lt;a href="http://scriptandstyle.com/submit?url=http://davidwalsh.name/jquery-datepicker-disable-days&amp;amp;title=jQuery+UI+DatePicker:++Disable+Specified%C2%A0Days"&gt;&lt;span style=""&gt;S&amp;amp;S&lt;/span&gt;&lt;/a&gt;  		&lt;a href="http://twitter.com/home?status=David+Walsh:+jQuery+UI+DatePicker:++Disable+Specified%C2%A0Days:+%3Ca%20href="&gt;http://davidwalsh.name/jquery-datepicker-disable-days&lt;/a&gt;"&amp;gt;&lt;span style=""&gt;Twitter&lt;/span&gt;  		&lt;a href="http://davidwalsh.name/wp-content/plugins/as-pdf/generate.php?post=4673"&gt;&lt;span style=""&gt;PDF&lt;/span&gt;&lt;/a&gt;  	&lt;/div&gt;  	&lt;div&gt;&lt;/div&gt;&lt;br /&gt;  	  		  	&lt;a href="http://davidwalsh.name/dw-content/jquery-datepicker.php"&gt;&lt;img src="http://davidwalsh.name/dw-content/jqueryuicalpicker.jpg" height="164" alt="jQuery Calendar Picker" width="196" /&gt;&lt;/a&gt;&lt;p&gt;    &lt;/p&gt;&lt;p&gt;One project I’m currently working on requires jQuery.  The project also features a datepicker for requesting a visit to their location.  jQuery UI’s DatePicker plugin was the natural choice and it does a really nice job.  One challenge I encountered was the need to prevent specific days from being picked.  Here’s the jQuery javascript I used to accomplish that.&lt;/p&gt;    &lt;div&gt;&lt;a href="http://davidwalsh.name/dw-content/jquery-datepicker.php"&gt;View Demo&lt;/a&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;The jQuery Javascript&lt;/h3&gt;    &lt;pre style="display: none;"&gt;/* create an array of days which need to be disabled */  var disabledDays = ["2-21-2010","2-24-2010","2-27-2010","2-28-2010","3-3-2010","3-17-2010","4-2-2010","4-3-2010","4-4-2010","4-5-2010"];    /* utility functions */  function nationalDays(date) {  	var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();  	//console.log('Checking (raw): ' + m + '-' + d + '-' + y);  	for (i = 0; i &amp;lt; disabledDays.length; i++) {  		if(ArrayContains(disabledDays,(m+1) + '-' + d + '-' + y) || new Date() &amp;gt; date) {  			//console.log('bad:  ' + (m+1) + '-' + d + '-' + y + ' / ' + disabledDays[i]);  			return [false];  		}  	}  	//console.log('good:  ' + (m+1) + '-' + d + '-' + y);  	return [true];  }  function noWeekendsOrHolidays(date) {  	var noWeekend = jQuery.datepicker.noWeekends(date);  	return noWeekend[0] ? nationalDays(date) : noWeekend;  }    /* taken from mootools */  function ArrayIndexOf(array,item,from){  	var len = array.length;  	for (var i = (from &amp;lt; 0) ? Math.max(0, len + from) : from || 0; i &amp;lt; len; i++){  		if (array[i] === item) return i;  	}  	return -1;  }  /* taken from mootools */  function ArrayContains(array,item,from){  	return ArrayIndexOf(array,item,from) != -1;  }    /* create datepicker */  jQuery(document).ready(function() {  	jQuery('#date').datepicker({  		minDate: new Date(2010, 0, 1),  		maxDate: new Date(2010, 5, 31),  		dateFormat: 'DD, MM, d, yy',  		constrainInput: true,  		beforeShowDay: noWeekendsOrHolidays  	});  });  &lt;/pre&gt;&lt;div&gt;&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#" title="Click here to copy this code to the clipboard" style=""&gt;Click here to copy this code to the clipboard&lt;/a&gt;&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#" title="Click here to add this snippet to Coda" style=""&gt;Click here to add this snippet to Coda&lt;/a&gt;&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#" title="Click here to add this snippet to TextMate" style=""&gt;Click here to add this snippet to TextMate&lt;/a&gt;&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#" title="Get the raw code" style=""&gt;Get the raw code&lt;/a&gt;&lt;div&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;/* create an array of days which need to be disabled */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; disabledDays &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;"2-21-2010"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;"2-24-2010"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;"2-27-2010"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;"2-28-2010"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;"3-3-2010"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;"3-17-2010"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;"4-2-2010"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;"4-3-2010"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;"4-4-2010"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;"4-5-2010"&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;&lt;span&gt;/* utility functions */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; nationalDays&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; m &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; date.&lt;/span&gt;&lt;span&gt;getMonth&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; d &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; date.&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; y &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; date.&lt;/span&gt;&lt;span&gt;getFullYear&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; //console.log('Checking (raw): ' + m + '-' + d + '-' + y);&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; disabledDays.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ArrayContains&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;disabledDays&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'-'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; d &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'-'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; y&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; date&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt; //console.log('bad:  ' + (m+1) + '-' + d + '-' + y + ' / ' + disabledDays[i]);&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;14&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; //console.log('good:  ' + (m+1) + '-' + d + '-' + y);&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;16&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;17&lt;/span&gt;&lt;span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; noWeekendsOrHolidays&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;18&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; noWeekend &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; jQuery.&lt;/span&gt;&lt;span&gt;datepicker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;noWeekends&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;19&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; noWeekend&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; nationalDays&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; noWeekend&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;21&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;22&lt;/span&gt;&lt;span&gt;&lt;span&gt;/* taken from mootools */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;23&lt;/span&gt;&lt;span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; ArrayIndexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; len &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; array.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;25&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;from &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; Math.&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; len &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; from&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;26&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;27&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;28&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;29&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;&lt;span&gt;/* taken from mootools */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; ArrayContains&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;32&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; ArrayIndexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;33&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;34&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;35&lt;/span&gt;&lt;span&gt;&lt;span&gt;/* create datepicker */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;36&lt;/span&gt;&lt;span&gt;&lt;span&gt;jQuery&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ready&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;37&lt;/span&gt;&lt;span&gt;&lt;span&gt;  jQuery&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'#date'&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;datepicker&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;38&lt;/span&gt;&lt;span&gt;&lt;span&gt;    minDate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2010&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;39&lt;/span&gt;&lt;span&gt;&lt;span&gt;    maxDate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2010&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;40&lt;/span&gt;&lt;span&gt;&lt;span&gt;    dateFormat&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'DD, MM, d, yy'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;41&lt;/span&gt;&lt;span&gt;&lt;span&gt;    constrainInput&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;42&lt;/span&gt;&lt;span&gt;&lt;span&gt;    beforeShowDay&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; noWeekendsOrHolidays&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;43&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;44&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;The base code is taken from &lt;a href="http://stackoverflow.com/questions/677976/jquery-ui-datepicker-disable-specific-days"&gt;this forum post&lt;/a&gt;.  You’ll note that I created an array of dates in string format which also accommodates for comparing year.&lt;/p&gt;    &lt;div&gt;&lt;a href="http://davidwalsh.name/dw-content/jquery-datepicker.php"&gt;View Demo&lt;/a&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;I’d like to see jQuery UI implement a standard way of disabling days.  Their DatePicker is very nice though so I can’t complain too much!&lt;/p&gt;  &lt;div&gt;  &lt;a href="http://davidwalsh.name/wp-content/plugins/as-pdf/generate.php?post=4673"&gt;  &lt;span&gt;Download PDF&lt;/span&gt;  &lt;/a&gt;  &lt;/div&gt;  	  	  	  	  	  		&lt;br /&gt;  	&lt;div&gt;  		&lt;h3&gt;Related Posts&lt;/h3&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://davidwalsh.name/add-dates-mysql" title="Permanent Link: Adding Days To Dates In&amp;amp;nbsp;MySQL" rel="bookmark"&gt;Adding Days To Dates In&amp;nbsp;MySQL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://davidwalsh.name/jquery-create-element" title="Permanent Link: MooTools-Like Element Creation in&amp;amp;nbsp;jQuery" rel="bookmark"&gt;MooTools-Like Element Creation in&amp;nbsp;jQuery&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://davidwalsh.name/how-to-sniff-firebug-disable" title="Permanent Link: How to Sniff &amp;amp; Disable&amp;amp;nbsp;Firebug" rel="bookmark"&gt;How to Sniff &amp;amp; Disable&amp;nbsp;Firebug&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://davidwalsh.name/php-function-calculating-days-in-a-month" title="Permanent Link: PHP Function – Calculating Days In A&amp;amp;nbsp;Month" rel="bookmark"&gt;PHP Function – Calculating Days In A&amp;nbsp;Month&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://davidwalsh.name/firebug-console-log" title="Permanent Link: Logging Information to the Firebug Javascript&amp;amp;nbsp;Console" rel="bookmark"&gt;Logging Information to the Firebug Javascript&amp;nbsp;Console&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;	&lt;/div&gt;  		  		  			  --&amp;gt;  	        	&lt;div style="margin: 20px auto 0pt;"&gt;  		&lt;div&gt;&lt;a href="http://www.elegantthemes.com" title="Premium Wordpress Themes" target="_blank"&gt;&lt;img src="http://s3.buysellads.com/1242453/11106-1259737184.jpg" height="75" alt="Premium Wordpress Themes" width="390" /&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;  	&lt;/div&gt;  	&lt;div&gt;&lt;/div&gt;  	&lt;h3&gt;  		&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days/feed/" title="Comments::Follow the discussion of this article."&gt;Follow via RSS&lt;/a&gt;  				Epic Discussion	&lt;/h3&gt;  	  	&lt;a name="comments"&gt;&lt;/a&gt;  	&lt;div&gt;  				   			&lt;a name="comment-15622"&gt;&lt;/a&gt;  			&lt;div rel="Mark"&gt;	  				&lt;div&gt;  											&lt;img src="http://www.gravatar.com/avatar.php?gravatar_id=47d98a77609dd74e1f0a4570b38fb2f9&amp;amp;size=80&amp;amp;rating=G&amp;amp;default=http%3A%2F%2Fdavidwalsh.name%2Fwp-content%2Fthemes%2Fwalshbook3%2Fimages%2Fnoperson.png" height="78" alt="Commenter Avatar" width="80" /&gt;  										&lt;span&gt;January 26 / &lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#comment-15622"&gt;#&lt;/a&gt;&lt;/span&gt;  				&lt;/div&gt;  				&lt;div&gt;  						&lt;div&gt;&lt;span&gt;&lt;a href="http://markernst.eu" rel="external nofollow"&gt;Mark&lt;/a&gt;&lt;/span&gt; says:&lt;/div&gt;  						&lt;p&gt;I have to admit, I wish Mootools came with such a wide variaty of UI plugins…&lt;/p&gt;  &lt;p&gt;All and all, I think you accomplished your goal very well! Good stuff.&lt;/p&gt;  				&lt;/div&gt;  				&lt;div&gt;&lt;/div&gt;  			&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#"&gt;Reply&lt;/a&gt;&lt;/div&gt;  			&lt;div&gt;&lt;/div&gt;  				   			&lt;a name="comment-15623"&gt;&lt;/a&gt;  			&lt;div rel="Salih Gedik"&gt;	  				&lt;div&gt;  											&lt;img src="http://www.gravatar.com/avatar.php?gravatar_id=99e081825c99b05900fd4b02faa05737&amp;amp;size=80&amp;amp;rating=G&amp;amp;default=http%3A%2F%2Fdavidwalsh.name%2Fwp-content%2Fthemes%2Fwalshbook3%2Fimages%2Fnoperson.png" height="80" alt="Commenter Avatar" width="80" /&gt;  										&lt;span&gt;January 26 / &lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#comment-15623"&gt;#&lt;/a&gt;&lt;/span&gt;  				&lt;/div&gt;  				&lt;div&gt;  						&lt;div&gt;&lt;span&gt;Salih Gedik&lt;/span&gt; says:&lt;/div&gt;  						&lt;p&gt;Nice. But I rarely need jQ. Mootools FTW isn’t it?&lt;/p&gt;  				&lt;/div&gt;  				&lt;div&gt;&lt;/div&gt;  			&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#"&gt;Reply&lt;/a&gt;&lt;/div&gt;  			&lt;div&gt;&lt;/div&gt;  				   			&lt;a name="comment-15624"&gt;&lt;/a&gt;  			&lt;div rel="Simeon"&gt;	  				&lt;div&gt;  											&lt;img src="http://www.gravatar.com/avatar.php?gravatar_id=154590dd68aea0003457ef8c08054c0e&amp;amp;size=80&amp;amp;rating=G&amp;amp;default=http%3A%2F%2Fdavidwalsh.name%2Fwp-content%2Fthemes%2Fwalshbook3%2Fimages%2Fnoperson.png" height="80" alt="Commenter Avatar" width="80" /&gt;  										&lt;span&gt;January 26 / &lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#comment-15624"&gt;#&lt;/a&gt;&lt;/span&gt;  				&lt;/div&gt;  				&lt;div&gt;  						&lt;div&gt;&lt;span&gt;&lt;a href="http://scriptsndip.com" rel="external nofollow"&gt;Simeon&lt;/a&gt;&lt;/span&gt; says:&lt;/div&gt;  						&lt;p&gt;Nice post! Can be easily expanded by populating he “disabledDays” using PHP to find all weekends, holidays, etc.  I wonder what the performance impact is though if you span across several years as a typical selection might allow?&lt;/p&gt;  				&lt;/div&gt;  				&lt;div&gt;&lt;/div&gt;  			&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#"&gt;Reply&lt;/a&gt;&lt;/div&gt;  			&lt;div&gt;&lt;/div&gt;  				   			&lt;a name="comment-15625"&gt;&lt;/a&gt;  			&lt;div rel="Savageman"&gt;	  				&lt;div&gt;  											&lt;img src="http://www.gravatar.com/avatar.php?gravatar_id=b8aa1050fad545fe278326879649a1e5&amp;amp;size=80&amp;amp;rating=G&amp;amp;default=http%3A%2F%2Fdavidwalsh.name%2Fwp-content%2Fthemes%2Fwalshbook3%2Fimages%2Fnoperson.png" height="80" alt="Commenter Avatar" width="80" /&gt;  										&lt;span&gt;January 26 / &lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#comment-15625"&gt;#&lt;/a&gt;&lt;/span&gt;  				&lt;/div&gt;  				&lt;div&gt;  						&lt;div&gt;&lt;span&gt;&lt;a href="http://www.zcorrecteurs.fr" rel="external nofollow"&gt;Savageman&lt;/a&gt;&lt;/span&gt; says:&lt;/div&gt;  						&lt;p&gt;@mark: you should try this Mootools DatePicker (also works for time): &lt;a href="http://www.monkeyphysics.com/mootools/script/2/datepicker" rel="nofollow"&gt;http://www.monkeyphysics.com/mootools/script/2/datepicker&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Doesn’t have a beforeShowDay option though…&lt;/p&gt;  				&lt;/div&gt;  				&lt;div&gt;&lt;/div&gt;  			&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#"&gt;Reply&lt;/a&gt;&lt;/div&gt;  			&lt;div&gt;&lt;/div&gt;  				   			&lt;a name="comment-15626"&gt;&lt;/a&gt;  			&lt;div rel="Douglas Neiner"&gt;	  				&lt;div&gt;  											&lt;img src="http://www.gravatar.com/avatar.php?gravatar_id=6868c2908859c318f4fa0911eb6029b0&amp;amp;size=80&amp;amp;rating=G&amp;amp;default=http%3A%2F%2Fdavidwalsh.name%2Fwp-content%2Fthemes%2Fwalshbook3%2Fimages%2Fnoperson.png" height="80" alt="Commenter Avatar" width="80" /&gt;  										&lt;span&gt;January 26 / &lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#comment-15626"&gt;#&lt;/a&gt;&lt;/span&gt;  				&lt;/div&gt;  				&lt;div&gt;  						&lt;div&gt;&lt;span&gt;&lt;a href="http://pixelgraphics.us" rel="external nofollow"&gt;Douglas Neiner&lt;/a&gt;&lt;/span&gt; says:&lt;/div&gt;  						&lt;p&gt;I would remove all the MooTools helpers :) and just use the jQuery native $.inArray function:&lt;/p&gt;  &lt;p&gt;Change this line: ArrayContains(disabledDays,(m+1) + ‘-’ + d + ‘-’ + y) to this instead: $.inArray(disabledDays,(m+1) + ‘-’ + d + ‘-’ + y) != -1&lt;/p&gt;  &lt;p&gt;Then you don’t need to two other functions from MooTools.&lt;/p&gt;  				&lt;/div&gt;  				&lt;div&gt;&lt;/div&gt;  			&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#"&gt;Reply&lt;/a&gt;&lt;/div&gt;  			&lt;div&gt;&lt;/div&gt;  				   			&lt;a name="comment-15627"&gt;&lt;/a&gt;  			&lt;div rel="Douglas Neiner"&gt;	  				&lt;div&gt;  											&lt;img src="http://davidwalsh.name/jquery-datepicker-disable-days/wp-content/themes/walshbook3/images/blank.gif" height="1" alt="Commenter Avatar" width="1" /&gt;  										&lt;span&gt;January 26 / &lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#comment-15627"&gt;#&lt;/a&gt;&lt;/span&gt;  				&lt;/div&gt;  				&lt;div&gt;  						&lt;div&gt;&lt;span&gt;&lt;a href="http://pixelgraphics.us" rel="external nofollow"&gt;Douglas Neiner&lt;/a&gt;&lt;/span&gt; says:&lt;/div&gt;  						&lt;p&gt;@Douglas Neiner:  Sorry, flip the arguments. $.inArray( value, array )&lt;/p&gt;  				&lt;/div&gt;  				&lt;div&gt;&lt;/div&gt;  			&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#"&gt;Reply&lt;/a&gt;&lt;/div&gt;  			&lt;div&gt;&lt;/div&gt;  				   			&lt;a name="comment-15628"&gt;&lt;/a&gt;  			&lt;div rel="David Walsh"&gt;	  				&lt;div&gt;  											&lt;img src="http://davidwalsh.name/jquery-datepicker-disable-days/wp-content/themes/walshbook3/images/blank.gif" height="1" alt="David Walsh" width="1" /&gt;  										&lt;span&gt;January 26 / &lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#comment-15628"&gt;#&lt;/a&gt;&lt;/span&gt;  				&lt;/div&gt;  				&lt;div&gt;  						&lt;div&gt;&lt;span&gt;&lt;a href="http://davidwalsh.name" rel="external nofollow"&gt;David Walsh&lt;/a&gt;&lt;/span&gt; says:&lt;/div&gt;  						&lt;p&gt;@Douglas Neiner:  I’m a complete MooTools nerd — I didn’t even think to check the jQuery API.  Will update.&lt;/p&gt;  				&lt;/div&gt;  				&lt;div&gt;&lt;/div&gt;  			&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#"&gt;Reply&lt;/a&gt;&lt;/div&gt;  			&lt;div&gt;&lt;/div&gt;  				   			&lt;a name="comment-15637"&gt;&lt;/a&gt;  			&lt;div rel="Josh Stauffer"&gt;	  				&lt;div&gt;  											&lt;img src="http://davidwalsh.name/jquery-datepicker-disable-days/wp-content/themes/walshbook3/images/blank.gif" height="1" alt="Commenter Avatar" width="1" /&gt;  										&lt;span&gt;January 26 / &lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#comment-15637"&gt;#&lt;/a&gt;&lt;/span&gt;  				&lt;/div&gt;  				&lt;div&gt;  						&lt;div&gt;&lt;span&gt;&lt;a href="http://www.joshstauffer.com" rel="external nofollow"&gt;Josh Stauffer&lt;/a&gt;&lt;/span&gt; says:&lt;/div&gt;  						&lt;p&gt;Interesting dilema and solution. My problem with the jQuery Datepicker is figuring out how to store selected start and end dates in a cookie.&lt;/p&gt;  				&lt;/div&gt;  				&lt;div&gt;&lt;/div&gt;  			&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#"&gt;Reply&lt;/a&gt;&lt;/div&gt;  			&lt;div&gt;&lt;/div&gt;  						   			&lt;a name="comment-15645"&gt;&lt;/a&gt;  			&lt;div rel="Brad Zickafoose"&gt;	  				&lt;div&gt;  											&lt;img src="http://davidwalsh.name/jquery-datepicker-disable-days/wp-content/themes/walshbook3/images/blank.gif" height="1" alt="Commenter Avatar" width="1" /&gt;  										&lt;span&gt;January 26 / &lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#comment-15645"&gt;#&lt;/a&gt;&lt;/span&gt;  				&lt;/div&gt;  				&lt;div&gt;  						&lt;div&gt;&lt;span&gt;Brad Zickafoose&lt;/span&gt; says:&lt;/div&gt;  						&lt;p&gt;Is it possible to have the DatePicker block out today’s date as well as past dates from being selected, only allowing tomorrow and future dates available for selection?&lt;/p&gt;  				&lt;/div&gt;  				&lt;div&gt;&lt;/div&gt;  			&lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days#"&gt;Reply&lt;/a&gt;&lt;/div&gt;  			&lt;div&gt;&lt;/div&gt;  			&lt;/div&gt;  	  &lt;div&gt;&lt;/div&gt;    	  &lt;h3&gt;Be Heard!&lt;/h3&gt;  	  	&lt;p&gt;  		I want to hear what you have to say!  Share your comments and questions below.  	&lt;/p&gt;  	  	&lt;p&gt;&lt;/p&gt;&lt;p&gt;  	  	  	        &lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://davidwalsh.name/jquery-datepicker-disable-days"&gt;davidwalsh.name&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/jquery-ui-datepicker-disable-specified-days"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-6270072711064030372?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/6270072711064030372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=6270072711064030372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/6270072711064030372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/6270072711064030372'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/jquery-ui-datepicker-disable-specified.html' title='jQuery UI DatePicker: Disable Specified Days'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-1160948956090227578</id><published>2010-01-27T14:08:00.001+11:00</published><updated>2010-01-27T14:08:07.643+11:00</updated><title type='text'>Silverlight Unit Testing Framework: Asynchronous Testing of Behaviors</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div&gt;  &lt;p&gt;Last month, I bogged about &lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html" target="_blank"&gt;Unit Testing ViewModels AND Views&lt;/a&gt; using the &lt;a href="http://code.msdn.microsoft.com/silverlightut/" title="Silverlight Unit Testing Framework" target="_blank"&gt;Silverlight Unit Testing Framework&lt;/a&gt;. I wanted to take that post a step further and talk about some more advanced testing scenarios that are possible.  &lt;/p&gt;&lt;p&gt;The site itself provides a lot of information about how to get started and what is available with the framework. One thing to keep in mind that is a radical shift from other testing frameworks is that the Silverlight testing framework runs on the UI thread. This means it does not spawn multiple threads for multiple tests and in fact requires the tests to run "one at a time" so they can take advantage of the test surface that is supplied.   &lt;/p&gt;&lt;p&gt;This is a bit different than other frameworks but in my opinion, makes a lot of sense when dealing with Silverlight. The framework provides incredible flexibility for configuring and categorizing your tests.   &lt;/p&gt;&lt;p&gt;If you are searching for a very comprehensive example of the framework in use, look no further than the &lt;a href="http://www.codeplex.com/Silverlight" target="_blank"&gt;Silverlight Toolkit&lt;/a&gt;. This comes with all source code and in fact uses the testing framework for its tests. You will find not only advanced scenarios for testing, but thousands upon thousands of tests! (I also am guessing that a new standard for PC performance has been invented by mistake ... let's all compile the entire toolkit and compare how long it takes!)   &lt;/p&gt;&lt;p&gt;&lt;b&gt;Tagging Tests&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;One thing you'll find if you run the toolkit tests is that you can enter a tag to filter tests. For example, type in "Accordion" to only run the 800 or so unit tests for accordion-type controls.   &lt;/p&gt;&lt;p&gt;To use tag functionality, simply "tag" your test like this:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestClass] &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;2.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[Tag(&lt;/code&gt;&lt;code&gt;"MEF"&lt;/code&gt;&lt;code&gt;)]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;3.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;PartModuleTest &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;4.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;5.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;I've tagged the test to be a MEF-related test. When I wire up the framework, I can filter the tag like this:  &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;UnitTestSettings settings = UnitTestSystem.CreateDefaultSettings();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;2.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;settings.TagExpression = &lt;/code&gt;&lt;code&gt;"MEF"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;3.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;this&lt;/code&gt;&lt;code&gt;.RootVisual = UnitTestSystem.CreateTestPage(settings);&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;When I run the tests, only my tests tagged with MEF will run! The toolkit provides an example of a UI that allows you to select the tag, then run the test.  &lt;/p&gt;&lt;p&gt;&lt;b&gt;Asynchronous Tests&lt;/b&gt;&lt;/p&gt;   &lt;p&gt;It is often necessary to test methods that are asynchronous or require event coordination. An example may be a service that must wait on return values, or a user control that must be loaded into the framework before you can test it. The Silverlight Unit Testing Framework provides the &lt;code&gt;Asynchronous&lt;/code&gt; tag to facilitate this type of test. This tells the framework not to move onto the next test nor consider the current test method complete until an explicit call to &lt;code&gt;TestComplete&lt;/code&gt; is made.    &lt;/p&gt;&lt;p&gt;There are several "helper" methods supplied for asynchronous processing that we'll explore in a minute. To use these methods requires inheriting from one of the base test classes such as &lt;code&gt;SilverlightTest&lt;/code&gt; which provides the methods as well as the test surface to add controls to.   &lt;/p&gt;&lt;p&gt;In &lt;a href="http://csharperimage.jeremylikness.com/2009/12/prism-mef-and-mvvm-part-1-of-3-unity.html" title="PRISM, MEF, and MVVM: Unity Glue" target="_blank"&gt;PRISM, MEF, and MVVM Part 1 of 3: Unity Glue&lt;/a&gt; I explored various options for binding the view model to the view. The 3rd and final method I reviewed was using an attached behavior. I would like to write some unit tests for that behavior (indeed, if I were a test-driven development or TDD purist, I would have written those tests first).   &lt;/p&gt;&lt;p&gt;In order to test the behavior, I need to attach it to a &lt;code&gt;FrameworkElement&lt;/code&gt; and then validate it has done what I expected it to do. But how do I go about doing that in our unit test environment?   &lt;/p&gt;&lt;p&gt;&lt;b&gt;Attached Behaviors&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Similar to other controls in other frameworks, Silverlight controls have a distinct life cycle. It varies slightly depending on whether the control has been generated in XAML or through code. There is a great summary table of these events on &lt;a href="http://blogs.msdn.com/devdave/archive/2008/10/11/control-lifecycle.aspx" target="_blank"&gt;Dave's Blog&lt;/a&gt;. What's important to note is that values and properties are set as soon as you, well, set them, but bindings don't take effect until they are inserted into the visual tree. In XAML, the XAML node becomes part of the tree and fires the &lt;code&gt;Loaded&lt;/code&gt; event once it is fully integrated. In code, this happens after the element is added as the child of some other element that is in the tree. This allows Silverlight to parse the hierarchy and propagate dependency properties.   &lt;/p&gt;&lt;p&gt;So what we essentially want to do is take our behavior, attach it to an element, and then wait for the &lt;code&gt;Loaded&lt;/code&gt; event to fire so we can inspect the element and see that it has been modified accordingly (in this case, we expect that the &lt;code&gt;DataContext&lt;/code&gt; property has been set to our view model).   &lt;/p&gt;&lt;p&gt;&lt;b&gt;Setting up the Project&lt;/b&gt;  &lt;/p&gt;&lt;p&gt;The testing framework provides some handy templates for getting started. I add a new project and select the Silverlight Test Project template. I then add references to the projects I'll be testing and the supporting frameworks like PRISM and MEF.  &lt;/p&gt;&lt;p&gt;Next, I'll want to build some helper classes to help me test my functionality.  &lt;/p&gt;&lt;p&gt;&lt;b&gt;Helper Classes&lt;/b&gt;  &lt;/p&gt;&lt;p&gt;I like to create a folder called &lt;code&gt;Helper&lt;/code&gt; and place my stubs, mocks, and other helper classes there. These may be utilities, like the &lt;a href="http://csharperimage.jeremylikness.com/2009/08/exception-expected-asserttrue.html" target="_blank"&gt;Exception Expected&lt;/a&gt; utility I use, or classes that are used for the testing framework.  &lt;/p&gt;&lt;p&gt;First, I'll create a test view model with a simple string and string collection property for testing:  &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;TestViewModel &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;TestViewModel()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;ListOfItems = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt;();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;TestViewModel(List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; items)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;ListOfItems = items;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;Property { &lt;/code&gt;&lt;code&gt;get&lt;/code&gt;&lt;code&gt;; &lt;/code&gt;&lt;code&gt;set&lt;/code&gt;&lt;code&gt;; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; ListOfItems { &lt;/code&gt;&lt;code&gt;get&lt;/code&gt;&lt;code&gt;; &lt;/code&gt;&lt;code&gt;set&lt;/code&gt;&lt;code&gt;; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;If my view models have common methods described in a base class or interface, I might use a mocking framework to mock the class instead.   &lt;/p&gt;&lt;p&gt;&lt;b&gt;The Test Class&lt;/b&gt;  &lt;/p&gt;&lt;p&gt;The behavior I created has an affinity to the Unity inversion of control (IoC) container. It could be refactored otherwise, but it made sense for the sake of the demonstration. Therefore, I'll need to have a container for testing, as well as the view model. My test class starts out looking like this (notice I base it on &lt;code&gt;SilverlightTest&lt;/code&gt;):   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestClass]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;ViewModelBehaviorTest : SilverlightTest&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;const&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;TESTPROP = &lt;/code&gt;&lt;code&gt;"Test Property"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;IUnityContainer _container;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;TestViewModel _viewModel; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;[ClassInitialize]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;ClassInitialize()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_container = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;UnityContainer();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_viewModel = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;TestViewModel() { Property = TESTPROP }; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_container.RegisterInstance&amp;lt;TestViewModel&amp;gt;(_viewModel); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;17.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;18.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;ViewModelBehavior.Container = _container; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;19.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;20.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;I create a reference to the entire test class for the container and the test view model. When the class is initialized (this is one-time setup, before all tests are run) I create a container, a view model, and tell the container that anytime someone asks for the view model, give them the specific instance I created. I also set the container on the type for the view model behavior class, so it knows what to use when resolving the view model.   &lt;/p&gt;&lt;p&gt;&lt;b&gt;The Code Behind Test&lt;/b&gt;  &lt;/p&gt;&lt;p&gt;For my first test, I'll programmatically attach the behavior and test that it works. The view model behavior takes in a string that is the fully qualified type name for the view model, and then uses the unity container to resolve it. Therefore, my test looks like this:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestMethod]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[Asynchronous]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[Description(&lt;/code&gt;&lt;code&gt;"Test creating an element and attaching in code behind."&lt;/code&gt;&lt;code&gt;)]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestAttach()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;TextBlock textBlock = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;TextBlock();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;textBlock.SetValue(ViewModelBehavior.ViewModelProperty, &lt;/code&gt;&lt;code&gt;typeof&lt;/code&gt;&lt;code&gt;(TestViewModel).AssemblyQualifiedName);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;textBlock.Loaded += (o, e) =&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsNotNull(textBlock.DataContext, &lt;/code&gt;&lt;code&gt;"The data context was never bound."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.AreSame(textBlock.DataContext, _viewModel, &lt;/code&gt;&lt;code&gt;"The data context was not bound to the correct view model."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;EnqueueTestComplete();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;};&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;17.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;TestPanel.Children.Add(textBlock);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;18.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;There's a few things going on here, so let's break them down!   &lt;/p&gt;&lt;p&gt;The &lt;code&gt;TestMethod&lt;/code&gt; attribute tags this method to be run by the framework. It is decorated with a description, which I can view on the output when the test is run and helps make the test more, ah, descriptive. The first thing I do is create a test block and attach the view model property. Here, I'm taking the test view model and getting the fully qualified name and using that to set the attached property. We want to make sure everything works fine and there are no errors during binding, so this is where the asynchronous pieces come into play.   &lt;/p&gt;&lt;p&gt;The &lt;code&gt;Asynchronous&lt;/code&gt; tag tells the framework that we're waiting on events, so don't consider this test complete until we explicitly tell the framework it's complete. When the text block fires the &lt;code&gt;Loaded&lt;/code&gt; event, we confirm that the data context is not null and that it in fact contains the exact instance of the view model we created in the class initialization. Then we tell the framework the test is complete by calling &lt;code&gt;EnqueueTestComplete&lt;/code&gt;, which is provided by the base class.   &lt;/p&gt;&lt;p&gt;Finally, if you were to run this without the last line, the test would stall because the text block would never get loaded. We add it as a child of the test surface, and this injects it into the visual tree and fires the loaded event.   &lt;/p&gt;&lt;p&gt;&lt;b&gt;The XAML Test&lt;/b&gt;  &lt;/p&gt;&lt;p&gt;I'm not completely confident with this test because the whole reason for creating a behavior was so I could attach the view model in XAML and not use code behind. Therefore, I should really test attaching this behavior through XAML. So, at the top of the test class we'll create the necessary XAML and wrap it in a &lt;code&gt;UserControl&lt;/code&gt;:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;const&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;TESTXAML = &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"&amp;lt;UserControl "&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"xmlns=\"&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/a&gt;\" "&lt;/code&gt;&amp;nbsp; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"xmlns:x=\"&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/a&gt;\" "&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"xmlns:vm=\"clr-namespace:PRISMMEF.Common.Behavior;assembly=PRISMMEF.Common\"&amp;gt;"&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"&amp;lt;Grid x:Name=\"LayoutRoot\" Background=\"White\" "&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"vm:ViewModelBehavior.ViewModel=\"PRISMMEF.Tests.Helper.TestViewModel, PRISMMEF.Tests, Version=1.0.0.0\"&amp;gt;"&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"&amp;lt;ListBox x:Name=\"ListBox\" ItemsSource=\"{Binding ListOfItems}\"/&amp;gt;"&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"&amp;lt;/Grid&amp;gt;&amp;lt;/UserControl&amp;gt;"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;If you think the constant is ugly, you can always add an actual XAML file, set it as an embedded resource, then read it in instead. That would give you the full functionality of the editor to tweak the test code. Here, we simply create a control with a grid and a list box. The list box uses the attached behavior and also binds the list.  &lt;/p&gt;&lt;p&gt;I want to test the list binding as well, so I add a collection to my test class:  &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;.&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;2.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;static&lt;/code&gt; &lt;code&gt;readonly&lt;/code&gt; &lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; _testCollection = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; { &lt;/code&gt;&lt;code&gt;"test1"&lt;/code&gt;&lt;code&gt;, &lt;/code&gt;&lt;code&gt;"test2"&lt;/code&gt; &lt;code&gt;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;3.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;.&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;In the class initialize method, I'll pass this into the view model's constructor so it is set on the &lt;code&gt;ListOfItems&lt;/code&gt; property.   &lt;/p&gt;&lt;p&gt;Now, we can create the control from XAML, load it, and test it:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestMethod]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[Asynchronous]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[Description(&lt;/code&gt;&lt;code&gt;"Test creating from XAML"&lt;/code&gt;&lt;code&gt;)]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestFromXaml()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;UserControl control = XamlReader.Load(TESTXAML) &lt;/code&gt;&lt;code&gt;as&lt;/code&gt; &lt;code&gt;UserControl;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;control.Loaded += (o, e) =&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;ListBox listBox = control.FindName(&lt;/code&gt;&lt;code&gt;"ListBox"&lt;/code&gt;&lt;code&gt;) &lt;/code&gt;&lt;code&gt;as&lt;/code&gt; &lt;code&gt;ListBox;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsNotNull(listBox, &lt;/code&gt;&lt;code&gt;"ListBox was not found."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsNotNull(listBox.DataContext, &lt;/code&gt;&lt;code&gt;"The data context was never bound."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.AreSame(listBox.DataContext, _viewModel, &lt;/code&gt;&lt;code&gt;"The data context was not bound to the correct view model."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;IEnumerable&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; list = listBox.ItemsSource &lt;/code&gt;&lt;code&gt;as&lt;/code&gt; &lt;code&gt;IEnumerable&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt;; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;17.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; targetList = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt;(list); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;18.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;CollectionAssert.AreEquivalent(targetList, _testCollection, &lt;/code&gt;&lt;code&gt;"Collection not properly bound."&lt;/code&gt;&lt;code&gt;); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;19.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;20.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;EnqueueTestComplete(); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;21.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;};&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;22.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;23.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;TestPanel.Children.Add(control);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;24.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;   &lt;p&gt;Now we load the control from XAML and wire in the &lt;code&gt;Loaded&lt;/code&gt; event to test for the data context and the instance. Then, I take the items from the list box itself and compare them with the original list using &lt;code&gt;CollectionAssert&lt;/code&gt;. The &lt;code&gt;AreEquivalent&lt;/code&gt; does a set comparison. Then we signal the test is complete.  &lt;/p&gt;&lt;p&gt;There's no code for this example because it was very straightforward and I'll likely be posting a more comprehensive example in the future as the result of a talk I'll be giving. Be sure to tune into &lt;a href="http://blogs.msdn.com/geekspeak/" target="_blank"&gt;MSDN's geekSpeak&lt;/a&gt; on Wednesday, February 17th, 2010 when I will be the guest to cover exclusively the topic of the Silverlight Unit Testing Framework (the talks are all stored on the site in case you read this after the event).  &lt;/p&gt;&lt;p&gt;Thanks!  &lt;/p&gt;&lt;p&gt;&lt;a href="http://jeremylikness.com/" title="Jeremy Likness"&gt;&lt;img title="Jeremy Likness" src="http://jeremylikness.com/signature.gif" border="0" height="39" alt="Jeremy Likness" width="197" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;  &lt;div style="clear: both;"&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/blockquote&gt;&lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html"&gt;csharperimage.jeremylikness.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/silverlight-unit-testing-framework-asynchrono-1"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-1160948956090227578?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/1160948956090227578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=1160948956090227578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/1160948956090227578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/1160948956090227578'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/silverlight-unit-testing-framework_4663.html' title='Silverlight Unit Testing Framework: Asynchronous Testing of Behaviors'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-1809220376681655886</id><published>2010-01-27T13:33:00.001+11:00</published><updated>2010-01-27T13:33:24.659+11:00</updated><title type='text'>Silverlight Unit Testing Framework: Asynchronous Testing of Behaviors</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div&gt;  &lt;p&gt;Last month, I bogged about &lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html" target="_blank"&gt;Unit Testing ViewModels AND Views&lt;/a&gt; using the &lt;a href="http://code.msdn.microsoft.com/silverlightut/" title="Silverlight Unit Testing Framework" target="_blank"&gt;Silverlight Unit Testing Framework&lt;/a&gt;. I wanted to take that post a step further and talk about some more advanced testing scenarios that are possible.  &lt;/p&gt;&lt;p&gt;The site itself provides a lot of information about how to get started and what is available with the framework. One thing to keep in mind that is a radical shift from other testing frameworks is that the Silverlight testing framework runs on the UI thread. This means it does not spawn multiple threads for multiple tests and in fact requires the tests to run "one at a time" so they can take advantage of the test surface that is supplied.   &lt;/p&gt;&lt;p&gt;This is a bit different than other frameworks but in my opinion, makes a lot of sense when dealing with Silverlight. The framework provides incredible flexibility for configuring and categorizing your tests.   &lt;/p&gt;&lt;p&gt;If you are searching for a very comprehensive example of the framework in use, look no further than the &lt;a href="http://www.codeplex.com/Silverlight" target="_blank"&gt;Silverlight Toolkit&lt;/a&gt;. This comes with all source code and in fact uses the testing framework for its tests. You will find not only advanced scenarios for testing, but thousands upon thousands of tests! (I also am guessing that a new standard for PC performance has been invented by mistake ... let's all compile the entire toolkit and compare how long it takes!)   &lt;/p&gt;&lt;p&gt;&lt;b&gt;Tagging Tests&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;One thing you'll find if you run the toolkit tests is that you can enter a tag to filter tests. For example, type in "Accordion" to only run the 800 or so unit tests for accordion-type controls.   &lt;/p&gt;&lt;p&gt;To use tag functionality, simply "tag" your test like this:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestClass] &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;2.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[Tag(&lt;/code&gt;&lt;code&gt;"MEF"&lt;/code&gt;&lt;code&gt;)]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;3.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;PartModuleTest &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;4.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;5.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;I've tagged the test to be a MEF-related test. When I wire up the framework, I can filter the tag like this:  &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;UnitTestSettings settings = UnitTestSystem.CreateDefaultSettings();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;2.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;settings.TagExpression = &lt;/code&gt;&lt;code&gt;"MEF"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;3.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;this&lt;/code&gt;&lt;code&gt;.RootVisual = UnitTestSystem.CreateTestPage(settings);&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;When I run the tests, only my tests tagged with MEF will run! The toolkit provides an example of a UI that allows you to select the tag, then run the test.  &lt;/p&gt;&lt;p&gt;&lt;b&gt;Asynchronous Tests&lt;/b&gt;&lt;/p&gt;   &lt;p&gt;It is often necessary to test methods that are asynchronous or require event coordination. An example may be a service that must wait on return values, or a user control that must be loaded into the framework before you can test it. The Silverlight Unit Testing Framework provides the &lt;code&gt;Asynchronous&lt;/code&gt; tag to facilitate this type of test. This tells the framework not to move onto the next test nor consider the current test method complete until an explicit call to &lt;code&gt;TestComplete&lt;/code&gt; is made.    &lt;/p&gt;&lt;p&gt;There are several "helper" methods supplied for asynchronous processing that we'll explore in a minute. To use these methods requires inheriting from one of the base test classes such as &lt;code&gt;SilverlightTest&lt;/code&gt; which provides the methods as well as the test surface to add controls to.   &lt;/p&gt;&lt;p&gt;In &lt;a href="http://csharperimage.jeremylikness.com/2009/12/prism-mef-and-mvvm-part-1-of-3-unity.html" title="PRISM, MEF, and MVVM: Unity Glue" target="_blank"&gt;PRISM, MEF, and MVVM Part 1 of 3: Unity Glue&lt;/a&gt; I explored various options for binding the view model to the view. The 3rd and final method I reviewed was using an attached behavior. I would like to write some unit tests for that behavior (indeed, if I were a test-driven development or TDD purist, I would have written those tests first).   &lt;/p&gt;&lt;p&gt;In order to test the behavior, I need to attach it to a &lt;code&gt;FrameworkElement&lt;/code&gt; and then validate it has done what I expected it to do. But how do I go about doing that in our unit test environment?   &lt;/p&gt;&lt;p&gt;&lt;b&gt;Attached Behaviors&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Similar to other controls in other frameworks, Silverlight controls have a distinct life cycle. It varies slightly depending on whether the control has been generated in XAML or through code. There is a great summary table of these events on &lt;a href="http://blogs.msdn.com/devdave/archive/2008/10/11/control-lifecycle.aspx" target="_blank"&gt;Dave's Blog&lt;/a&gt;. What's important to note is that values and properties are set as soon as you, well, set them, but bindings don't take effect until they are inserted into the visual tree. In XAML, the XAML node becomes part of the tree and fires the &lt;code&gt;Loaded&lt;/code&gt; event once it is fully integrated. In code, this happens after the element is added as the child of some other element that is in the tree. This allows Silverlight to parse the hierarchy and propagate dependency properties.   &lt;/p&gt;&lt;p&gt;So what we essentially want to do is take our behavior, attach it to an element, and then wait for the &lt;code&gt;Loaded&lt;/code&gt; event to fire so we can inspect the element and see that it has been modified accordingly (in this case, we expect that the &lt;code&gt;DataContext&lt;/code&gt; property has been set to our view model).   &lt;/p&gt;&lt;p&gt;&lt;b&gt;Setting up the Project&lt;/b&gt;  &lt;/p&gt;&lt;p&gt;The testing framework provides some handy templates for getting started. I add a new project and select the Silverlight Test Project template. I then add references to the projects I'll be testing and the supporting frameworks like PRISM and MEF.  &lt;/p&gt;&lt;p&gt;Next, I'll want to build some helper classes to help me test my functionality.  &lt;/p&gt;&lt;p&gt;&lt;b&gt;Helper Classes&lt;/b&gt;  &lt;/p&gt;&lt;p&gt;I like to create a folder called &lt;code&gt;Helper&lt;/code&gt; and place my stubs, mocks, and other helper classes there. These may be utilities, like the &lt;a href="http://csharperimage.jeremylikness.com/2009/08/exception-expected-asserttrue.html" target="_blank"&gt;Exception Expected&lt;/a&gt; utility I use, or classes that are used for the testing framework.  &lt;/p&gt;&lt;p&gt;First, I'll create a test view model with a simple string and string collection property for testing:  &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;TestViewModel &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;TestViewModel()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;ListOfItems = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt;();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;TestViewModel(List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; items)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;ListOfItems = items;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;Property { &lt;/code&gt;&lt;code&gt;get&lt;/code&gt;&lt;code&gt;; &lt;/code&gt;&lt;code&gt;set&lt;/code&gt;&lt;code&gt;; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; ListOfItems { &lt;/code&gt;&lt;code&gt;get&lt;/code&gt;&lt;code&gt;; &lt;/code&gt;&lt;code&gt;set&lt;/code&gt;&lt;code&gt;; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;If my view models have common methods described in a base class or interface, I might use a mocking framework to mock the class instead.   &lt;/p&gt;&lt;p&gt;&lt;b&gt;The Test Class&lt;/b&gt;  &lt;/p&gt;&lt;p&gt;The behavior I created has an affinity to the Unity inversion of control (IoC) container. It could be refactored otherwise, but it made sense for the sake of the demonstration. Therefore, I'll need to have a container for testing, as well as the view model. My test class starts out looking like this (notice I base it on &lt;code&gt;SilverlightTest&lt;/code&gt;):   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestClass]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;ViewModelBehaviorTest : SilverlightTest&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;const&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;TESTPROP = &lt;/code&gt;&lt;code&gt;"Test Property"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;IUnityContainer _container;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;TestViewModel _viewModel; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;[ClassInitialize]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;ClassInitialize()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_container = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;UnityContainer();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_viewModel = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;TestViewModel() { Property = TESTPROP }; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_container.RegisterInstance&amp;lt;TestViewModel&amp;gt;(_viewModel); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;17.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;18.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;ViewModelBehavior.Container = _container; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;19.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;20.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;I create a reference to the entire test class for the container and the test view model. When the class is initialized (this is one-time setup, before all tests are run) I create a container, a view model, and tell the container that anytime someone asks for the view model, give them the specific instance I created. I also set the container on the type for the view model behavior class, so it knows what to use when resolving the view model.   &lt;/p&gt;&lt;p&gt;&lt;b&gt;The Code Behind Test&lt;/b&gt;  &lt;/p&gt;&lt;p&gt;For my first test, I'll programmatically attach the behavior and test that it works. The view model behavior takes in a string that is the fully qualified type name for the view model, and then uses the unity container to resolve it. Therefore, my test looks like this:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestMethod]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[Asynchronous]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[Description(&lt;/code&gt;&lt;code&gt;"Test creating an element and attaching in code behind."&lt;/code&gt;&lt;code&gt;)]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestAttach()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;TextBlock textBlock = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;TextBlock();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;textBlock.SetValue(ViewModelBehavior.ViewModelProperty, &lt;/code&gt;&lt;code&gt;typeof&lt;/code&gt;&lt;code&gt;(TestViewModel).AssemblyQualifiedName);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;textBlock.Loaded += (o, e) =&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsNotNull(textBlock.DataContext, &lt;/code&gt;&lt;code&gt;"The data context was never bound."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.AreSame(textBlock.DataContext, _viewModel, &lt;/code&gt;&lt;code&gt;"The data context was not bound to the correct view model."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;EnqueueTestComplete();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;};&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;17.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;TestPanel.Children.Add(textBlock);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;18.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;There's a few things going on here, so let's break them down!   &lt;/p&gt;&lt;p&gt;The &lt;code&gt;TestMethod&lt;/code&gt; attribute tags this method to be run by the framework. It is decorated with a description, which I can view on the output when the test is run and helps make the test more, ah, descriptive. The first thing I do is create a test block and attach the view model property. Here, I'm taking the test view model and getting the fully qualified name and using that to set the attached property. We want to make sure everything works fine and there are no errors during binding, so this is where the asynchronous pieces come into play.   &lt;/p&gt;&lt;p&gt;The &lt;code&gt;Asynchronous&lt;/code&gt; tag tells the framework that we're waiting on events, so don't consider this test complete until we explicitly tell the framework it's complete. When the text block fires the &lt;code&gt;Loaded&lt;/code&gt; event, we confirm that the data context is not null and that it in fact contains the exact instance of the view model we created in the class initialization. Then we tell the framework the test is complete by calling &lt;code&gt;EnqueueTestComplete&lt;/code&gt;, which is provided by the base class.   &lt;/p&gt;&lt;p&gt;Finally, if you were to run this without the last line, the test would stall because the text block would never get loaded. We add it as a child of the test surface, and this injects it into the visual tree and fires the loaded event.   &lt;/p&gt;&lt;p&gt;&lt;b&gt;The XAML Test&lt;/b&gt;  &lt;/p&gt;&lt;p&gt;I'm not completely confident with this test because the whole reason for creating a behavior was so I could attach the view model in XAML and not use code behind. Therefore, I should really test attaching this behavior through XAML. So, at the top of the test class we'll create the necessary XAML and wrap it in a &lt;code&gt;UserControl&lt;/code&gt;:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;const&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;TESTXAML = &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"&amp;lt;UserControl "&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"xmlns=\"&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/a&gt;\" "&lt;/code&gt;&amp;nbsp; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"xmlns:x=\"&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/a&gt;\" "&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"xmlns:vm=\"clr-namespace:PRISMMEF.Common.Behavior;assembly=PRISMMEF.Common\"&amp;gt;"&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"&amp;lt;Grid x:Name=\"LayoutRoot\" Background=\"White\" "&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"vm:ViewModelBehavior.ViewModel=\"PRISMMEF.Tests.Helper.TestViewModel, PRISMMEF.Tests, Version=1.0.0.0\"&amp;gt;"&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"&amp;lt;ListBox x:Name=\"ListBox\" ItemsSource=\"{Binding ListOfItems}\"/&amp;gt;"&lt;/code&gt; &lt;code&gt;+&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;"&amp;lt;/Grid&amp;gt;&amp;lt;/UserControl&amp;gt;"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;If you think the constant is ugly, you can always add an actual XAML file, set it as an embedded resource, then read it in instead. That would give you the full functionality of the editor to tweak the test code. Here, we simply create a control with a grid and a list box. The list box uses the attached behavior and also binds the list.  &lt;/p&gt;&lt;p&gt;I want to test the list binding as well, so I add a collection to my test class:  &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;.&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;2.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;static&lt;/code&gt; &lt;code&gt;readonly&lt;/code&gt; &lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; _testCollection = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; { &lt;/code&gt;&lt;code&gt;"test1"&lt;/code&gt;&lt;code&gt;, &lt;/code&gt;&lt;code&gt;"test2"&lt;/code&gt; &lt;code&gt;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;3.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;.&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;In the class initialize method, I'll pass this into the view model's constructor so it is set on the &lt;code&gt;ListOfItems&lt;/code&gt; property.   &lt;/p&gt;&lt;p&gt;Now, we can create the control from XAML, load it, and test it:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestMethod]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[Asynchronous]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[Description(&lt;/code&gt;&lt;code&gt;"Test creating from XAML"&lt;/code&gt;&lt;code&gt;)]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestFromXaml()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;UserControl control = XamlReader.Load(TESTXAML) &lt;/code&gt;&lt;code&gt;as&lt;/code&gt; &lt;code&gt;UserControl;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;control.Loaded += (o, e) =&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;ListBox listBox = control.FindName(&lt;/code&gt;&lt;code&gt;"ListBox"&lt;/code&gt;&lt;code&gt;) &lt;/code&gt;&lt;code&gt;as&lt;/code&gt; &lt;code&gt;ListBox;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsNotNull(listBox, &lt;/code&gt;&lt;code&gt;"ListBox was not found."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsNotNull(listBox.DataContext, &lt;/code&gt;&lt;code&gt;"The data context was never bound."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.AreSame(listBox.DataContext, _viewModel, &lt;/code&gt;&lt;code&gt;"The data context was not bound to the correct view model."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;IEnumerable&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; list = listBox.ItemsSource &lt;/code&gt;&lt;code&gt;as&lt;/code&gt; &lt;code&gt;IEnumerable&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt;; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;17.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt; targetList = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;List&amp;lt;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;&amp;gt;(list); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;18.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;CollectionAssert.AreEquivalent(targetList, _testCollection, &lt;/code&gt;&lt;code&gt;"Collection not properly bound."&lt;/code&gt;&lt;code&gt;); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;19.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;20.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;EnqueueTestComplete(); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;21.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;};&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;22.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;23.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;TestPanel.Children.Add(control);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;24.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;   &lt;p&gt;Now we load the control from XAML and wire in the &lt;code&gt;Loaded&lt;/code&gt; event to test for the data context and the instance. Then, I take the items from the list box itself and compare them with the original list using &lt;code&gt;CollectionAssert&lt;/code&gt;. The &lt;code&gt;AreEquivalent&lt;/code&gt; does a set comparison. Then we signal the test is complete.  &lt;/p&gt;&lt;p&gt;There's no code for this example because it was very straightforward and I'll likely be posting a more comprehensive example in the future as the result of a talk I'll be giving. Be sure to tune into &lt;a href="http://blogs.msdn.com/geekspeak/" target="_blank"&gt;MSDN's geekSpeak&lt;/a&gt; on Wednesday, February 17th, 2010 when I will be the guest to cover exclusively the topic of the Silverlight Unit Testing Framework (the talks are all stored on the site in case you read this after the event).  &lt;/p&gt;&lt;p&gt;Thanks!  &lt;/p&gt;&lt;p&gt;&lt;a href="http://jeremylikness.com/" title="Jeremy Likness"&gt;&lt;img title="Jeremy Likness" src="http://jeremylikness.com/signature.gif" border="0" height="39" alt="Jeremy Likness" width="197" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;  &lt;div style="clear: both;"&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/blockquote&gt;&lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html"&gt;csharperimage.jeremylikness.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/silverlight-unit-testing-framework-asynchrono-0"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-1809220376681655886?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/1809220376681655886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=1809220376681655886' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/1809220376681655886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/1809220376681655886'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/silverlight-unit-testing-framework_27.html' title='Silverlight Unit Testing Framework: Asynchronous Testing of Behaviors'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-5200725137657961341</id><published>2010-01-27T13:07:00.001+11:00</published><updated>2010-01-27T13:07:59.343+11:00</updated><title type='text'>Unit Tests for ViewModels AND Views in Silverlight</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div&gt;  &lt;p&gt;Over the past few posts I've been exploring models for modularized Silverlight applications that follow the MVVM pattern (using &lt;a href="http://compositewpf.codeplex.com/" target="_blank"&gt;Prism/CAL&lt;/a&gt;). In this post, I'd like to cover unit testing, and writing appropriate tests not just for the view model, but the view itself.  &lt;/p&gt;&lt;p&gt;Before we continue, I'm going to assume you've read:  &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/11/dynamic-module-loading-with-silverlight.html" target="_blank"&gt;Dynamic Module Loading with Silverlight Navigation using Prism&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/mvvm-composition-in-silverlight-3-with.html" target="_blank"&gt;MVVM Composition in Silverlight&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/simplifying-asynchronous-calls-in.html" target="_blank"&gt;Simplifying Asynchronous Calls in Silverlight using Action&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;These articles form the core of what I'm about to discuss. I also want to make sure you're familiar with the Silverlight unit testing framework. You can download it and review some articles about how to use it over at the &lt;a href="http://code.msdn.microsoft.com/silverlightut/" target="_blank"&gt;Unit Test Framework for Microsoft Silverlight&lt;/a&gt; page. I highly recommend pulling down the project and class templates as they will make your life easier!   &lt;/p&gt;&lt;p&gt;The testing framework for Silverlight sets up a project that you run, and that project will then create a visual page that displays the results of tests. What's important is that the test framework will not only support class tests, but can also host controls and test the hosted controls as well. Do we even want to do this? I think so.   &lt;/p&gt;&lt;p&gt;Set up your test project and make it the runnable one by adding a new project to your existing Silverlight solution, using the Silverlight project template, then right-clicking on the project and setting it as the start-up project.  &lt;/p&gt;&lt;p&gt;Let's get started with a real example. I want to control the visibility of a control based on a boolean value in the view model, so I create a converter that takes in a boolean and returns visibility. I can bind the visibility like this:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;code&gt;TextBlock&lt;/code&gt; &lt;code&gt;Text&lt;/code&gt;&lt;code&gt;=&lt;/code&gt;&lt;code&gt;"Conditional Text"&lt;/code&gt; &lt;code&gt;Visibility&lt;/code&gt;&lt;code&gt;=&lt;/code&gt;&lt;code&gt;"{Binding ConditionFlag,Converter={StaticResource BoolVisibilityConverter}}"&lt;/code&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;The code for the converter is simple:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;object&lt;/code&gt; &lt;code&gt;Convert(&lt;/code&gt;&lt;code&gt;object&lt;/code&gt; &lt;code&gt;value, Type targetType, &lt;/code&gt;&lt;code&gt;object&lt;/code&gt; &lt;code&gt;parameter, System.Globalization.CultureInfo culture)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;2.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;3.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;bool&lt;/code&gt;&lt;code&gt;)value ? Visibility.Visible : Visibility.Collapsed;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;4.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;To test that we get what we want, simply add a new class in your test project (use the Silverlight Test Class template). With a little bit of typing  you will end up with something like this:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestClass]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;BoolVisibilityConverterTest&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;BoolVisibilityConverter _target;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;[TestInitialize]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;Initialize()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_target = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;BoolVisibilityConverter();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;[TestMethod]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestTrue()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;object&lt;/code&gt; &lt;code&gt;result = _target.Convert(&lt;/code&gt;&lt;code&gt;true&lt;/code&gt;&lt;code&gt;, &lt;/code&gt;&lt;code&gt;typeof&lt;/code&gt;&lt;code&gt;(&lt;/code&gt;&lt;code&gt;bool&lt;/code&gt;&lt;code&gt;), &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;, CultureInfo.CurrentCulture);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsNotNull(result, &lt;/code&gt;&lt;code&gt;"Converter returned null."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;17.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.AreEqual(Visibility.Visible, result, &lt;/code&gt;&lt;code&gt;"Converter returned invalid result."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;18.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;19.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;20.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;[TestMethod]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;21.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestFalseNoParameter()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;22.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;23.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;object&lt;/code&gt; &lt;code&gt;result = _target.Convert(&lt;/code&gt;&lt;code&gt;false&lt;/code&gt;&lt;code&gt;, &lt;/code&gt;&lt;code&gt;typeof&lt;/code&gt;&lt;code&gt;(&lt;/code&gt;&lt;code&gt;bool&lt;/code&gt;&lt;code&gt;), &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;, CultureInfo.CurrentCulture);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;24.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsNotNull(result, &lt;/code&gt;&lt;code&gt;"Converter returned null."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;25.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.AreEqual(Visibility.Collapsed, result, &lt;/code&gt;&lt;code&gt;"Converter returned invalid result."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;26.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;27.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Not rocket science there ... but it's nice to start out with a few green lights. When you run it, you'll see that your two tests passed and all is well (you can, of course, assert something invalid to see what a failure looks like).   &lt;/p&gt;&lt;p&gt;Now let's test a view model. Our view model takes in a &lt;code&gt;IService&lt;/code&gt; reference so that it can log a user in. It has bindings for username and password and a login command. The service looks like this:  &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;interface&lt;/code&gt; &lt;code&gt;IService &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;2.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;3.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;void&lt;/code&gt; &lt;code&gt;Login(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;username, &lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;password, Action&amp;lt;&lt;/code&gt;&lt;code&gt;bool&lt;/code&gt;&lt;code&gt;&amp;gt; result); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;4.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;    So the view model looks like this:   &lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;001.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;ViewModel : INotifyPropertyChanged &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;002.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;003.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;IService _service;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;004.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;005.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;ViewModel(IService service)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;006.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;007.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_service = service;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;008.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;009.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;LoginCommand = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;DelegateCommand&amp;lt;&lt;/code&gt;&lt;code&gt;object&lt;/code&gt;&lt;code&gt;&amp;gt;( o=&amp;gt;CommandLogin );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;010.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;011.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;012.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;bool&lt;/code&gt; &lt;code&gt;_isDirty;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;013.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;014.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;bool&lt;/code&gt; &lt;code&gt;IsDirty&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;015.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;016.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;get&lt;/code&gt; &lt;code&gt;{ &lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;_isDirty; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;017.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;018.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;019.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;_username, _password;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;020.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;021.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;Username&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;022.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;023.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;get&lt;/code&gt; &lt;code&gt;{ &lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;_username; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;024.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;set&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;025.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;026.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(value != &lt;/code&gt;&lt;code&gt;null&lt;/code&gt; &lt;code&gt;&amp;amp;&amp;amp; !value.Equals(_username))&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;027.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;028.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_username = value;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;029.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;OnPropertyChanged(&lt;/code&gt;&lt;code&gt;"UserName"&lt;/code&gt;&lt;code&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;030.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;031.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;032.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;033.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;034.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;Password&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;035.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;036.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;get&lt;/code&gt; &lt;code&gt;{ &lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;_password; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;037.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;set&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;038.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;039.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(value != &lt;/code&gt;&lt;code&gt;null&lt;/code&gt; &lt;code&gt;&amp;amp;&amp;amp; !value.Equals(_password))&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;040.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;041.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_password = value;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;042.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;OnPropertyChanged(&lt;/code&gt;&lt;code&gt;"Password"&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;043.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;044.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;045.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;046.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;047.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;DelegateCommand&amp;lt;&lt;/code&gt;&lt;code&gt;object&lt;/code&gt;&lt;code&gt;&amp;gt; LoginCommand { &lt;/code&gt;&lt;code&gt;get&lt;/code&gt;&lt;code&gt;; &lt;/code&gt;&lt;code&gt;set&lt;/code&gt;&lt;code&gt;; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;048.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;049.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;CommandLogin()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;050.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;051.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;.IsNullOrEmpty(_username))&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;052.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;053.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;throw&lt;/code&gt; &lt;code&gt;new&lt;/code&gt; &lt;code&gt;ValidationException(&lt;/code&gt;&lt;code&gt;"Username is required."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;054.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;055.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;056.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;.IsNullOrEmpty(_password))&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;057.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;058.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;throw&lt;/code&gt; &lt;code&gt;new&lt;/code&gt; &lt;code&gt;ValidationException(&lt;/code&gt;&lt;code&gt;"Password is required."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;059.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;060.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;061.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_service.Login(_username, _password, (result) =&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;062.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;063.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(result)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;064.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;065.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;// logic to navigate to a new page&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;066.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;067.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;else&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;068.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;069.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;throw&lt;/code&gt; &lt;code&gt;new&lt;/code&gt; &lt;code&gt;ValidationException(&lt;/code&gt;&lt;code&gt;"The username/password combination is invalid."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;070.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;071.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;});&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;072.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;} &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;073.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;074.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;protected&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;OnPropertyChanged(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;property)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;075.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;076.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;PropertyChangedEventHandler handler = PropertyChanged;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;077.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(handler != &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;078.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;079.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;handler(&lt;/code&gt;&lt;code&gt;this&lt;/code&gt;&lt;code&gt;, &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;PropertyChangedEventArgs(property));&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;080.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;081.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(!_isDirty)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;082.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;083.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_isDirty = &lt;/code&gt;&lt;code&gt;true&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;084.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(handler != &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;085.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;086.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;handler(&lt;/code&gt;&lt;code&gt;this&lt;/code&gt;&lt;code&gt;, &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;PropertyChangedEventArgs(&lt;/code&gt;&lt;code&gt;"IsDirty"&lt;/code&gt;&lt;code&gt;)); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;087.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;088.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;089.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;090.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;091.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;ResetDirtyFlag()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;092.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;093.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(_isDirty)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;094.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;095.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_isDirty = &lt;/code&gt;&lt;code&gt;false&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;096.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;PropertyChangedEventHandler handler = PropertyChanged;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;097.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(handler != &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;098.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;099.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;handler(&lt;/code&gt;&lt;code&gt;this&lt;/code&gt;&lt;code&gt;, &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;PropertyChangedEventArgs(&lt;/code&gt;&lt;code&gt;"IsDirty"&lt;/code&gt;&lt;code&gt;));&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;100.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;101.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;102.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;} &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;103.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Notice how properties being set should automatically set the "dirty" flag as well. I may want to bind my login button to the flag so it only becomes available when the user has changed something, for example. There is also a public method to reset the flag.   &lt;/p&gt;&lt;p&gt;In order to satisfy my service, I'll create a "mock" object. Why a mock, and not a stub? A stub is a piece of code you put in place to allow something to happen. If I wanted to stub my service, I'd do this:  &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;ServiceStub : IService&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;2.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;3.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;Login(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;username, &lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;password, Action&amp;lt;&lt;/code&gt;&lt;code&gt;bool&lt;/code&gt;&lt;code&gt;&amp;gt; result)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;4.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;5.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;result(&lt;/code&gt;&lt;code&gt;true&lt;/code&gt;&lt;code&gt;); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;6.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;7.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;This would always call back with a valid user and stubs out the functionality so I don't have to implement a real login. A mock object, on the other hand, changes. To make this a mock, I do this:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;ServiceMock : IService &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;bool&lt;/code&gt; &lt;code&gt;LoginCalled { &lt;/code&gt;&lt;code&gt;get&lt;/code&gt;&lt;code&gt;; &lt;/code&gt;&lt;code&gt;set&lt;/code&gt;&lt;code&gt;; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;Login(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;username, &lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;password, Action&amp;lt;&lt;/code&gt;&lt;code&gt;bool&lt;/code&gt;&lt;code&gt;&amp;gt; result)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;LoginCalled = &lt;/code&gt;&lt;code&gt;true&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;result(&lt;/code&gt;&lt;code&gt;true&lt;/code&gt;&lt;code&gt;); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;The class is a mock because it changes based on how it is used, and then we can query that change to see if our code is doing what we want. So let's set up some tests with the view model:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestClass]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;ViewModelTest&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;ViewModel _target;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;ServiceMock _service;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;[TestInitialize] &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;Initialize()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_service = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;ServiceMock();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_target = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;ViewModel(_service);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;[TestMethod]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;17.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestConstructor()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;18.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;19.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsFalse(_target.IsDirty,&lt;/code&gt;&lt;code&gt;"Dirty flag should not be set."&lt;/code&gt;&lt;code&gt;); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;20.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsFalse(_service.LoginCalled,&lt;/code&gt;&lt;code&gt;"Login should not have been called."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;21.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsNotNull(_service.LoginCommand, &lt;/code&gt;&lt;code&gt;"Login command was not set up."&lt;/code&gt;&lt;code&gt;); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;22.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;23.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;You can test that the username hasn't been populated, for example. Now we can do a little more. In the example, we throw a &lt;code&gt;ValidationException&lt;/code&gt; (a custom class) when the username is invalid. The Silverlight 3 validation framework can capture this based on data binding and show appropriate error messages to the client. We want to make sure if we try to login, we throw the exception, so we can do this:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;1.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestMethod]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;2.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[ExpectedException(&lt;/code&gt;&lt;code&gt;typeof&lt;/code&gt;&lt;code&gt;(ValidationException))]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;3.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestLoginValidation()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;4.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;5.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_target.CommandLogin(); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;6.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Here we call the login command on the empty object and it should throw (and catch) the exception we're looking for.  &lt;/p&gt;&lt;p&gt;Finally, to use our mock object, we can set a valid user name and password and call the login command, then verify that the mock object was called:   &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestMethod]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestLogin()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_target.Username = &lt;/code&gt;&lt;code&gt;"Valid Username"&lt;/code&gt;&lt;code&gt;; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;//bonus test: check that the dirty flag got set&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsTrue(_target.IsDirty, &lt;/code&gt;&lt;code&gt;"Dirty flag was not set on update."&lt;/code&gt;&lt;code&gt;); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_target.Password = &lt;/code&gt;&lt;code&gt;"Password"&lt;/code&gt;&lt;code&gt;; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_target.CommandLogin();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsTrue(_service.LoginCalled); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;After testing your view model, you can then begin to work on testing the view itself. In the "required reading" I discussed having a generic view base that would interact with a navigation manager to swap views into and out of view. The views are all contained in an &lt;code&gt;ItemsControl&lt;/code&gt;, and register to a view change event. If the view goes out of focus, it moves to a hidden state. If the view comes into focus, it moves to a visible state. While this allows more control over the way the states appear and how to transition between states, there is also the chance someone may add a view and forget wire in the visual state groups. The &lt;code&gt;VisualStateManager&lt;/code&gt; won't complain, but it can look ugly. We need to test for things like this!   &lt;/p&gt;&lt;p&gt;Fortunately, the testing framework allows for us to host actual views. It provides a testing surface that we add controls to, and those controls are rendered so you can then inspect the visual tree. In this case, we want to emulate a view navigating to a new view and test that it is moved to the correct state.   &lt;/p&gt;&lt;p&gt;Create a new test class. This time, however, we will inherit from the base class &lt;code&gt;SilverlightTest&lt;/code&gt; which provides our class with a test panel to host controls on. The set up is a bit more involved, because we need to fold the mock services into the view model, then create the view and glue it all together.  &lt;/p&gt;&lt;p&gt;Before we do this, we'll create a helper class called &lt;code&gt;QueryableVisualStateManager&lt;/code&gt;. This class is one I borrowed from Justin Angel's fantastic blog post about &lt;a href="http://blogs.silverlight.net/blogs/justinangel/archive/2008/12/25/custom-vsm-visualstatemanagers-in-silverlight-2-0.aspx" target="_blank"&gt;Custom Visual State Managers&lt;/a&gt;. In his post, he details how to create a custom visual state manager that holds a dictionary of the control states so they can be queried later on (in case you've been pulling your hair out in frustration, the framework does not provide direct access to query the current visual state of controls).   &lt;/p&gt;&lt;p&gt;I created the class verbatim, but don't care to use it in production code. Instead, we'll inject it in our test class. Here's the setup:  &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestClass]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;LoginTest : SilverlightTest&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;Login _login;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;ViewModel _viewModel;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;ServiceMock _service;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;NavigationManager _navigationManager;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;private&lt;/code&gt; &lt;code&gt;QueryableVisualStateManager _customStateManager; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;[TestInitialize]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestInitialize()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_login = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;Login();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;FrameworkElement root = VisualTreeHelper.GetChild(_login, 0) &lt;/code&gt;&lt;code&gt;as&lt;/code&gt; &lt;code&gt;FrameworkElement;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;root.SetValue(VisualStateManager.CustomVisualStateManagerProperty, &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;QueryableVisualStateManager()); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;17.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;18.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_service = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;ServiceMock();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;19.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_navigationManager = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;NavigationManager();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;20.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_viewModel = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;ViewModel(_service);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;21.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_viewModel.Navigation = _navigationManager;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;22.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_login.DataContext = _viewModel;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;23.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;TestPanel.Children.Add(_login);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;24.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;25.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;What happened? &lt;code&gt;Login&lt;/code&gt; is my user control ... it is the view I inject into the shell to show the login page. Here I create an instance of it. Then, I use my friend the &lt;code&gt;VisualTreeHelper&lt;/code&gt; to parse the the first child, which is going to be the grid or stack panel or whatever "host" control you have inside your user control. Then, I simply set the attached property for the custom view manager to point to the queryable helper class. This will ensure any visual state transitions are recorded in the internal dictionary. Then I wire up my mocks, databind, and finally add the login control to the &lt;code&gt;TestPanel&lt;/code&gt;. It now gets hosted on a real test surface and can initialize and display.  &lt;/p&gt;&lt;p&gt;Let's assume that the navigation manager I injected is responsible for swapping the view state of the control. The control goes into a &lt;code&gt;HideState&lt;/code&gt; when not visible and a &lt;code&gt;ShowState&lt;/code&gt; when visible. What I want to test is a simulated login command. We already tested this in the view model, so we can be confident it is going to hit the service and do what it is supposed to do. There is a piece of code that then calls the navigation manager and changes the control's state to hidden. We want to test that this hook actually gets fired when the user clicks login, so the login view disappears. Here's how:    &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#viewSource" title="view source" style="height: 16px;"&gt;view source&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#printSource" title="print" style="height: 16px;"&gt;print&lt;/a&gt;&lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html#about" title="?" style="height: 16px;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;01.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;[TestMethod]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;02.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;TestLogin()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;03.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;04.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;const&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;SHOWSTATE = &lt;/code&gt;&lt;code&gt;"VisualStates.ShowState"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;05.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;const&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;HIDESTATE = &lt;/code&gt;&lt;code&gt;"VisualStates.HideState"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;06.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;07.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;// set up this view&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;08.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_navigationManager.NavigateToPage(NavigationManager.NavigationPage.Login);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;09.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;10.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;state = QueryableVisualStateManager.QueryState(_login);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;11.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsTrue(state.Contains(SHOWSTATE) &amp;amp;&amp;amp; !state.Contains(HIDESTATE), &lt;/code&gt;&lt;code&gt;"Invalid visual state."&lt;/code&gt;&lt;code&gt;); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;12.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;13.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;// trigger login &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;14.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_viewModel.Username = &lt;/code&gt;&lt;code&gt;"user"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;15.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_viewModel.Password = &lt;/code&gt;&lt;code&gt;"password"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;16.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;_viewModel.CommandLogin();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;17.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;18.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;state = QueryableVisualStateManager.QueryState(_login);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;19.&lt;/code&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style=""&gt;&lt;code&gt;Assert.IsTrue(state.Contains(HIDESTATE) &amp;amp;&amp;amp; !state.Contains(SHOWSTATE), &lt;/code&gt;&lt;code&gt;"Invalid visual state."&lt;/code&gt;&lt;code&gt;); &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;20.&lt;/code&gt;&lt;span&gt;&lt;span style=""&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;We first test the pre-condition by navigating to the login page and confirming it has the &lt;code&gt;ShowState&lt;/code&gt; and not the &lt;code&gt;HideState&lt;/code&gt;. Then, we simulate a login action (this is why command binding and view models are so powerful) and query the state again, testing to make sure we went into a hidden state.  &lt;/p&gt;&lt;p&gt;When you run this test, you might actually see the control flicker for a moment on the screen as it gets initialized on the test surface before it is manipulated and then discarded for other tests. With the right architecture, you are now able to test from the view down to the backend services that drive your application. Now that's powerful!  &lt;/p&gt;&lt;p&gt;&lt;a href="http://jeremylikness.com/" title="Jeremy Likness"&gt;&lt;img title="Jeremy Likness" src="http://jeremylikness.com/signature.gif" border="0" height="39" alt="Jeremy Likness" width="197" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;  &lt;div style="clear: both;"&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/blockquote&gt;&lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://csharperimage.jeremylikness.com/2009/12/unit-tests-for-viewmodels-and-views-in.html"&gt;csharperimage.jeremylikness.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/unit-tests-for-viewmodels-and-views-in-silver"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-5200725137657961341?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/5200725137657961341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=5200725137657961341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5200725137657961341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5200725137657961341'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/unit-tests-for-viewmodels-and-views-in.html' title='Unit Tests for ViewModels AND Views in Silverlight'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-7398217364440336788</id><published>2010-01-27T12:55:00.001+11:00</published><updated>2010-01-27T12:55:32.673+11:00</updated><title type='text'>ondrejsv | How to: Create a new format for sample data in Blend/SketchFlow</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;img src="http://posterous.com/getfile/files.posterous.com/brandontruong/wwjeAFqmsuxHtqagmwrbjinHcmnrdEEdohjnDhqpaJqCAdvnakhlsHqjHGJa/media_httpblogondrejs_Jrynn.jpg.scaled500.jpg" width="303" height="484"/&gt; &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://blog.ondrejsv.com/post/How-to-Create-a-new-format-for-sample-data-in-BlendSketchFlow.aspx"&gt;blog.ondrejsv.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/ondrejsv-how-to-create-a-new-format-for-sampl"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-7398217364440336788?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/7398217364440336788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=7398217364440336788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/7398217364440336788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/7398217364440336788'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/ondrejsv-how-to-create-new-format-for.html' title='ondrejsv | How to: Create a new format for sample data in Blend/SketchFlow'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-312581815314773400</id><published>2010-01-27T12:31:00.001+11:00</published><updated>2010-01-27T12:31:12.900+11:00</updated><title type='text'>Jeremy Likness' Blog : Simple Dialog Service in Silverlight</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;div class="posterous_quote_citation"&gt;  Check out this website I found at &lt;a href="http://www.wintellect.com/CS/blogs/jlikness/archive/2010/01/23/simple-dialog-service-in-silverlight.aspx"&gt;wintellect.com&lt;/a&gt;&lt;/div&gt;     &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/jeremy-likness-blog-simple-dialog-service-in"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-312581815314773400?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/312581815314773400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=312581815314773400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/312581815314773400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/312581815314773400'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/jeremy-likness-blog-simple-dialog.html' title='Jeremy Likness&amp;#39; Blog : Simple Dialog Service in Silverlight'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-4968893224889520511</id><published>2010-01-27T10:55:00.001+11:00</published><updated>2010-01-27T10:55:10.729+11:00</updated><title type='text'>Dynamic tabs using jQuery - why and how to create it</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;a href='http://posterous.com/getfile/files.posterous.com/brandontruong/fzwJGDEFvsBkieJDuCoFfEFblvcvaAJqoaHDuvglzbIdJJCgjzfIkbxltbEd/media_httpwwwjankoatw_BEaJy.jpg.scaled1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/brandontruong/fzwJGDEFvsBkieJDuCoFfEFblvcvaAJqoaHDuvglzbIdJJCgjzfIkbxltbEd/media_httpwwwjankoatw_BEaJy.jpg.scaled500.jpg" width="500" height="192"/&gt;&lt;/a&gt;     &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://www.jankoatwarpspeed.com/post/2010/01/26/dynamic-tabs-jquery.aspx"&gt;jankoatwarpspeed.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/dynamic-tabs-using-jquery-why-and-how-to-crea"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-4968893224889520511?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/4968893224889520511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=4968893224889520511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/4968893224889520511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/4968893224889520511'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/dynamic-tabs-using-jquery-why-and-how.html' title='Dynamic tabs using jQuery - why and how to create it'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-5104503912795296376</id><published>2010-01-27T09:26:00.001+11:00</published><updated>2010-01-27T09:26:27.801+11:00</updated><title type='text'>Avatar Now the Biggest Movie Ever Worldwide</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;embed type="application/x-shockwave-flash" src="http://cnettv.cnet.com/av/video/cbsnews/atlantis2/player-dest.swf" allowfullscreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="linkUrl=http://www.cbsnews.com/video/watch/?id=6142509n&amp;amp;tag=related;photovideo&amp;amp;releaseURL=http://cnettv.cnet.com/av/video/cbsnews/atlantis2/player-dest.swf&amp;amp;videoId=50082754,50082753,50082752,50082751,50082756,50082755&amp;amp;partner=news&amp;amp;vert=News&amp;amp;si=254&amp;amp;autoPlayVid=false&amp;amp;name=cbsPlayer&amp;amp;allowScriptAccess=always&amp;amp;wmode=opaque&amp;amp;embedded=y&amp;amp;scale=noscale&amp;amp;rv=n&amp;amp;salign=tl" height="324" width="425"&gt;&lt;/embed&gt;    &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://feedproxy.google.com/~r/Mashable/~3/J6xQh_SH-6A/"&gt;feedproxy.google.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/avatar-now-the-biggest-movie-ever-worldwide-0"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-5104503912795296376?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/5104503912795296376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=5104503912795296376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5104503912795296376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5104503912795296376'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/avatar-now-biggest-movie-ever-worldwide.html' title='Avatar Now the Biggest Movie Ever Worldwide'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-1541408575808526394</id><published>2010-01-27T07:24:00.001+11:00</published><updated>2010-01-27T07:24:17.899+11:00</updated><title type='text'>Google Voice Arrives on iPhone With HTML5-Powered Web App</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;object height="300" width="500"&gt;&lt;param name="movie" value="http://www.youtube.com/v/neiOa38DuqI&amp;#038;hl=en_US&amp;#038;fs=1&amp;#038;" /&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.youtube.com/v/neiOa38DuqI&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" allowfullscreen="true" allowscriptaccess="always" height="300" wmode="opaque" width="500"&gt;&lt;/embed&gt;&lt;/object&gt;    &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://feedproxy.google.com/~r/Mashable/~3/2h-AbeKV56s/"&gt;feedproxy.google.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/google-voice-arrives-on-iphone-with-html5-pow-4"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-1541408575808526394?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/1541408575808526394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=1541408575808526394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/1541408575808526394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/1541408575808526394'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/google-voice-arrives-on-iphone-with.html' title='Google Voice Arrives on iPhone With HTML5-Powered Web App'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-5729643159223378017</id><published>2010-01-26T22:45:00.001+11:00</published><updated>2010-01-26T22:45:07.616+11:00</updated><title type='text'>Designer Developed Social Sharing Tool Userscript Released - Flash Web Design and Design Photography | DesignOra - StumbleUpon</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;div class="posterous_quote_citation"&gt;  Check out this website I found at &lt;a href="http://www.stumbleupon.com/su/3BQNVv/designora.com/tools/designers-social-share-tool/"&gt;stumbleupon.com&lt;/a&gt;&lt;/div&gt;     &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/designer-developed-social-sharing-tool-usersc"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-5729643159223378017?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/5729643159223378017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=5729643159223378017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5729643159223378017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5729643159223378017'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/designer-developed-social-sharing-tool.html' title='Designer Developed Social Sharing Tool Userscript Released - Flash Web Design and Design Photography | DesignOra - StumbleUpon'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-2231922224335823884</id><published>2010-01-26T22:41:00.001+11:00</published><updated>2010-01-26T22:41:35.339+11:00</updated><title type='text'>js-hotkeys - Project Hosting on Google Code</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div style="padding: 0pt 3em 1.2em 0pt;"&gt;  &lt;h3&gt;&lt;a name="Javascript_jQuery_Hotkeys_Plugin"&gt;Javascript jQuery Hotkeys Plugin&lt;/a&gt;&lt;/h3&gt;&lt;h3&gt;&lt;a name="Cross_Browser_Module_(Works_with_Safari,_Opera,_Firefox,_Chrome"&gt;Cross Browser Module (Works with Safari, Opera, Firefox, &lt;strong&gt;&lt;/strong&gt;Chrome&lt;strong&gt;&lt;/strong&gt; and IE)&lt;/a&gt;&lt;/h3&gt;&lt;h3&gt;&lt;a name="The_latest_Version_is_0.7.8"&gt;The latest Version is 0.7.8&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a name="The_latest_Version_is_0.7.8"&gt;jQuery.Hotkeys plugin lets you easily add and remove handlers for keyboard events anywhere in your code supporting almost any key combination.  It takes one line of code to bind/unbind a hot key combination. &lt;/a&gt;&lt;/p&gt;&lt;h3&gt;&lt;a name="Example:"&gt;Example:&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a name="Example:"&gt;&lt;strong&gt;Binding 'Ctrl+c'&lt;/strong&gt; &lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;a name="Example:"&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;bind&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'keydown'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'ctrl+c'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; fn&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/a&gt;&lt;/pre&gt;&lt;p&gt;&lt;a name="Example:"&gt;&lt;strong&gt;Unbinding 'Ctrl+c'&lt;/strong&gt; &lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;a name="Example:"&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;unbind&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'keydown'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'ctrl+c'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; fn&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/a&gt;&lt;/pre&gt;&lt;h3&gt;&lt;a name="Known_Issues"&gt;Known Issues&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a name="Known_Issues"&gt;KeyPress is not working well owe to the fact that keycodes varies between key[down|up] and key press (lower and upper case). see example at &lt;/a&gt;&lt;a href="http://afro.systems.googlepages.com/test-static-08.html" rel="nofollow"&gt;Test #6&lt;/a&gt;. This should be solved in the next version &lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;&lt;a name="More_info"&gt;More info&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a name="More_info"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href="http://github.com/tzuryby/jquery.hotkeys/tree/master" rel="nofollow"&gt;Public Git Repository at GitHub&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://jshotkeys.googlepages.com/test-static-01.html" rel="nofollow"&gt;Live Demo&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/js-hotkeys/wiki/about" rel="nofollow"&gt;Read More...&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;/div&gt;&lt;/blockquote&gt;    &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://code.google.com/p/js-hotkeys/"&gt;code.google.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/js-hotkeys-project-hosting-on-google-code"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-2231922224335823884?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/2231922224335823884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=2231922224335823884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2231922224335823884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2231922224335823884'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/js-hotkeys-project-hosting-on-google.html' title='js-hotkeys - Project Hosting on Google Code'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-8196677092360829622</id><published>2010-01-26T22:30:00.001+11:00</published><updated>2010-01-26T22:30:33.110+11:00</updated><title type='text'>15 jQuery Plugins Giving Web Interfaces Drag ‘N Drop Capabilities | tripwire magazine</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;a href='http://posterous.com/getfile/files.posterous.com/brandontruong/zaJwxybnEwfHazIaavjykBlvouEkFFozntcbiBitAiimpJzDaCpvuxkAFfqk/media_httpwwwtripwire_ntECC.jpg.scaled1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/brandontruong/zaJwxybnEwfHazIaavjykBlvouEkFFozntcbiBitAiimpJzDaCpvuxkAFfqk/media_httpwwwtripwire_ntECC.jpg.scaled500.jpg" width="500" height="200"/&gt;&lt;/a&gt; &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://www.tripwiremagazine.com/2010/01/15-jquery-plugins-giving-web-interfaces-drag-n-drop-capabilities.html"&gt;tripwiremagazine.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/15-jquery-plugins-giving-web-interfaces-drag"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-8196677092360829622?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/8196677092360829622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=8196677092360829622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/8196677092360829622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/8196677092360829622'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/15-jquery-plugins-giving-web-interfaces.html' title='15 jQuery Plugins Giving Web Interfaces Drag ‘N Drop Capabilities | tripwire magazine'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-5856633557187408825</id><published>2010-01-26T17:52:00.003+11:00</published><updated>2010-01-26T17:52:42.612+11:00</updated><title type='text'>Behaviors, Triggers and Actions in Silverlight And WPF Made Simple – Part 2 – Triggers : Amazedsaint's .net journal</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;a href='http://posterous.com/getfile/files.posterous.com/brandontruong/xkaetgeGduyslwIIixakDijJBBfajwnaBzEHBouglbknghhfoIxBGgqJFxlf/media_httplh6ggphtcom_BwsJx.png.scaled1000.png'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/brandontruong/xkaetgeGduyslwIIixakDijJBBfajwnaBzEHBouglbknghhfoIxBGgqJFxlf/media_httplh6ggphtcom_BwsJx.png.scaled500.png" width="500" height="329"/&gt;&lt;/a&gt;     &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://amazedsaint.blogspot.com/2010/01/behaviors-triggers-and-actions-in_24.html"&gt;amazedsaint.blogspot.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/behaviors-triggers-and-actions-in-silverlight-0"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-5856633557187408825?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/5856633557187408825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=5856633557187408825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5856633557187408825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5856633557187408825'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/behaviors-triggers-and-actions-in_26.html' title='Behaviors, Triggers and Actions in Silverlight And WPF Made Simple – Part 2 – Triggers : Amazedsaint&amp;#39;s .net journal'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-2497445931985075201</id><published>2010-01-26T17:52:00.001+11:00</published><updated>2010-01-26T17:52:36.791+11:00</updated><title type='text'>Behaviors, Triggers and Actions in Silverlight And WPF Made Simple – Part I - Behaviors : Amazedsaint's .net journal</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;a href='http://posterous.com/getfile/files.posterous.com/brandontruong/BifDnEyfJsFvzxowockHjqzJCwJCoqnniesldgzpvCkmhfJlDCJjpkpuAusz/media_httplh3ggphtcom_DiAhv.png.scaled1000.png'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/brandontruong/BifDnEyfJsFvzxowockHjqzJCwJCoqnniesldgzpvCkmhfJlDCJjpkpuAusz/media_httplh3ggphtcom_DiAhv.png.scaled500.png" width="500" height="428"/&gt;&lt;/a&gt;     &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://amazedsaint.blogspot.com/2010/01/behaviors-triggers-and-actions-in.html"&gt;amazedsaint.blogspot.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/behaviors-triggers-and-actions-in-silverlight"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-2497445931985075201?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/2497445931985075201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=2497445931985075201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2497445931985075201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2497445931985075201'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/behaviors-triggers-and-actions-in.html' title='Behaviors, Triggers and Actions in Silverlight And WPF Made Simple – Part I - Behaviors : Amazedsaint&amp;#39;s .net journal'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-1250396821066050166</id><published>2010-01-26T17:22:00.001+11:00</published><updated>2010-01-26T17:22:42.016+11:00</updated><title type='text'>ScrollSpy | David Walsh Blog</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div&gt;  	  	  	  	&lt;h3&gt;ScrollSpy&lt;/h3&gt;  	  	&lt;p&gt;ScrollSpy is a small but powerful MooTools plugin that allows you to listen to scrolling within any DOM element and execute functions based upon the element's scroll position.&lt;/p&gt;&lt;h3&gt;MooTools Javascript Class&lt;/h3&gt;&lt;pre style="display: none;"&gt;/*  ---  description:     ScrollSpy    authors:  - David Walsh (&lt;a href="http://davidwalsh.name"&gt;http://davidwalsh.name&lt;/a&gt;)    license:  - MIT-style license    requires:  core/1.2.1:   '*'    provides:  - ScrollSpy  ...  */  var ScrollSpy = new Class({    	/* implements */  	Implements: [Options,Events],    	/* options */  	options: {  		min: 0,  		mode: 'vertical',  		max: 0,  		container: window,  		onEnter: $empty,  		onLeave: $empty,  		onTick: $empty  	},    	/* initialization */  	initialize: function(options) {  		/* set options */  		this.setOptions(options);  		this.container = document.id(this.options.container);  		this.enters = this.leaves = 0;  		this.max = this.options.max;  	  		/* fix max */  		if(this.max == 0) {   			var ss = this.container.getScrollSize();  			this.max = this.options.mode == 'vertical' ? ss.y : ss.x;  		}  		/* make it happen */  		this.addListener();  	},    	/* a method that does whatever you want */  	addListener: function() {  		/* state trackers */  		this.inside = false;  		this.container.addEvent('scroll',function() {  			/* if it has reached the level */  			var position = this.container.getScroll();  			var xy = this.options.mode == 'vertical' ? position.y : position.x;  			/* if we reach the minimum and are still below the max... */  			if(xy &amp;gt;= this.options.min &amp;amp;&amp;amp; xy &amp;lt;= this.max) {  					/* trigger Enter event if necessary */  					if(!this.inside) {  						/* record as inside */  						this.inside = true;  						this.enters++;  						/* fire enter event */  						this.fireEvent('enter',[position,this.enters]);  					}  					/* trigger the "tick", always */  					this.fireEvent('tick',[position,this.inside,this.enters,this.leaves]);  			}  			else {  				/* trigger leave */  				if(this.inside)  {  					this.inside = false;  					this.leaves++;  					this.fireEvent('leave',[position,this.leaves]);  				}  			}  		}.bind(this));  	}  });&lt;/pre&gt;&lt;div&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to copy this code to the clipboard" style=""&gt;Click here to copy this code to the clipboard&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to add this snippet to Coda" style=""&gt;Click here to add this snippet to Coda&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to add this snippet to TextMate" style=""&gt;Click here to add this snippet to TextMate&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Get the raw code" style=""&gt;Get the raw code&lt;/a&gt;&lt;div&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;/*&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;&lt;span&gt;description:     ScrollSpy&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;&lt;span&gt;authors:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;&lt;span&gt;  - David Walsh (&lt;a href="http://davidwalsh.name"&gt;http://davidwalsh.name&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;&lt;span&gt;license:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;&lt;span&gt;  - MIT-style license&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;&lt;span&gt;requires:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;&lt;span&gt;  core/1.2.1:   '*'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;14&lt;/span&gt;&lt;span&gt;&lt;span&gt;provides:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;&lt;span&gt;  - ScrollSpy&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;16&lt;/span&gt;&lt;span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;17&lt;/span&gt;&lt;span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;18&lt;/span&gt;&lt;span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; ScrollSpy &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; Class&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;19&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* implements */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;21&lt;/span&gt;&lt;span&gt;&lt;span&gt;  Implements&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Options&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;Events&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;22&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;23&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* options */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt;&lt;span&gt;  options&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;25&lt;/span&gt;&lt;span&gt;&lt;span&gt;    min&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;26&lt;/span&gt;&lt;span&gt;&lt;span&gt;    mode&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'vertical'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;27&lt;/span&gt;&lt;span&gt;&lt;span&gt;    max&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;28&lt;/span&gt;&lt;span&gt;&lt;span&gt;    container&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; window&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;29&lt;/span&gt;&lt;span&gt;&lt;span&gt;    onEnter&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; $empty&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;&lt;span&gt;    onLeave&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; $empty&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;&lt;span&gt;    onTick&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; $empty&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;32&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;33&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;34&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* initialization */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;35&lt;/span&gt;&lt;span&gt;&lt;span&gt;  initialize&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;36&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;/* set options */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;37&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setOptions&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;38&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; document.&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;container&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;39&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;enters&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;leaves&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;40&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;41&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;42&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;/* fix max */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;43&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;44&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; ss &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;container&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getScrollSize&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;45&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'vertical'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; ss.&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ss.&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;46&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;47&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;/* make it happen */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;48&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;49&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;50&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;51&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* a method that does whatever you want */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;52&lt;/span&gt;&lt;span&gt;&lt;span&gt;  addListener&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;53&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;/* state trackers */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;54&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;inside&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;55&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;container&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addEvent&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'scroll'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;56&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;/* if it has reached the level */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;57&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; position &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;container&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getScroll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;58&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; xy &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'vertical'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; position.&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; position.&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;59&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;/* if we reach the minimum and are still below the max... */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;xy &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;min&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; xy &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;61&lt;/span&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;/* trigger Enter event if necessary */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;62&lt;/span&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;inside&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;63&lt;/span&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;/* record as inside */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;64&lt;/span&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;inside&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;65&lt;/span&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;enters&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;66&lt;/span&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;/* fire enter event */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;67&lt;/span&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fireEvent&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'enter'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;enters&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;68&lt;/span&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;69&lt;/span&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;/* trigger the "tick", always */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;70&lt;/span&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fireEvent&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'tick'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;inside&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;enters&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;leaves&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;71&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;72&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;73&lt;/span&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;/* trigger leave */&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;74&lt;/span&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;inside&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;75&lt;/span&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;inside&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;76&lt;/span&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;leaves&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;77&lt;/span&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fireEvent&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'leave'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;leaves&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;78&lt;/span&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;79&lt;/span&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;80&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;bind&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;81&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;82&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Class: ScrollSpy&lt;/h3&gt;    &lt;h3&gt;Implements:&lt;/h3&gt;    &lt;p&gt;Options, Events&lt;/p&gt;    &lt;h3&gt;ScrollSpy Method: constructor&lt;/h3&gt;    &lt;h3&gt;Notes:&lt;/h3&gt;    &lt;ul&gt;  &lt;li&gt;&lt;em&gt;ScrollSpy&lt;/em&gt; debuted Wednesday, May 27, 2009 on the David Walsh Blog:  &lt;a href="http://davidwalsh.name/scrollspy"&gt;http://davidwalsh.name/scrollspy&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;em&gt;ScrollSpy&lt;/em&gt; requires MooTools Core only -- no MooTools More dependencies.&lt;/li&gt;  &lt;li&gt;Visit &lt;a href="http://davidwalsh.name/scrollspy"&gt;http://davidwalsh.name/scrollspy&lt;/a&gt; for example usages.&lt;/li&gt;  &lt;/ul&gt;    &lt;h3&gt;Syntax:&lt;/h3&gt;    &lt;pre style="display: none;"&gt;var myScrollSpy = new ScrollSpy(options);  &lt;/pre&gt;&lt;div&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to copy this code to the clipboard" style=""&gt;Click here to copy this code to the clipboard&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to add this snippet to Coda" style=""&gt;Click here to add this snippet to Coda&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to add this snippet to TextMate" style=""&gt;Click here to add this snippet to TextMate&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Get the raw code" style=""&gt;Get the raw code&lt;/a&gt;&lt;div&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; myScrollSpy &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; ScrollSpy&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;Arguments:&lt;/h3&gt;    &lt;ol&gt;  &lt;li&gt;options - (&lt;em&gt;object&lt;/em&gt;, optional) Initial options for the class.&lt;/li&gt;  &lt;/ol&gt;    &lt;h3&gt;Options:&lt;/h3&gt;    &lt;ul&gt;  &lt;li&gt;min - (&lt;em&gt;integer&lt;/em&gt;, defaults to 0)  The minimum value of the X or Y coordinate, depending on mode.&lt;/li&gt;  &lt;li&gt;mode - (&lt;em&gt;string&lt;/em&gt;, defaults to 'vertical')  Defines whether to listen to X or Y scrolling.&lt;/li&gt;  &lt;li&gt;max - (&lt;em&gt;integer&lt;/em&gt;, defaults to 0)  The maximum value of the X or Y coordinate, depending on mode.&lt;/li&gt;  &lt;li&gt;container - (&lt;em&gt;element&lt;/em&gt;, defaults to window)  The element whose scrolling to listen to.&lt;/li&gt;  &lt;/ul&gt;    &lt;h3&gt;Returns:&lt;/h3&gt;    &lt;ul&gt;  &lt;li&gt;(&lt;em&gt;object&lt;/em&gt;) A new &lt;em&gt;ScrollSpy&lt;/em&gt; instance.&lt;/li&gt;  &lt;/ul&gt;    &lt;h3&gt;Events:&lt;/h3&gt;    &lt;h3&gt;enter&lt;/h3&gt;    &lt;ul&gt;  &lt;li&gt;(&lt;em&gt;function&lt;/em&gt;) Function to execute when the element's designated area is scrolled into.&lt;/li&gt;  &lt;/ul&gt;    &lt;h3&gt;Signature&lt;/h3&gt;    &lt;pre style="display: none;"&gt;onEnter(position, enters)  &lt;/pre&gt;&lt;div&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to copy this code to the clipboard" style=""&gt;Click here to copy this code to the clipboard&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to add this snippet to Coda" style=""&gt;Click here to add this snippet to Coda&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to add this snippet to TextMate" style=""&gt;Click here to add this snippet to TextMate&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Get the raw code" style=""&gt;Get the raw code&lt;/a&gt;&lt;div&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;onEnter&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; enters&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h4&gt;Arguments:&lt;/h4&gt;    &lt;ol&gt;  &lt;li&gt;position - (&lt;em&gt;object&lt;/em&gt;) The container's scroll position object.&lt;/li&gt;  &lt;li&gt;enters - (&lt;em&gt;integer&lt;/em&gt;) The number of times the scroll area has been entered.&lt;/li&gt;  &lt;/ol&gt;    &lt;h3&gt;leave&lt;/h3&gt;    &lt;ul&gt;  &lt;li&gt;(&lt;em&gt;function&lt;/em&gt;) Function to execute when the element's designated area is scrolled out of.&lt;/li&gt;  &lt;/ul&gt;    &lt;h3&gt;Signature&lt;/h3&gt;    &lt;pre style="display: none;"&gt;onLeave(position, enters)  &lt;/pre&gt;&lt;div&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to copy this code to the clipboard" style=""&gt;Click here to copy this code to the clipboard&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to add this snippet to Coda" style=""&gt;Click here to add this snippet to Coda&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to add this snippet to TextMate" style=""&gt;Click here to add this snippet to TextMate&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Get the raw code" style=""&gt;Get the raw code&lt;/a&gt;&lt;div&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;onLeave&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; enters&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h4&gt;Arguments:&lt;/h4&gt;    &lt;ol&gt;  &lt;li&gt;position - (&lt;em&gt;object&lt;/em&gt;) The container's scroll position object.&lt;/li&gt;  &lt;li&gt;enters - (&lt;em&gt;integer&lt;/em&gt;) The number of times the scroll area has been left.&lt;/li&gt;  &lt;/ol&gt;    &lt;h3&gt;tick&lt;/h3&gt;    &lt;ul&gt;  &lt;li&gt;(&lt;em&gt;function&lt;/em&gt;) Function to execute on each scroll event when the scroll position is between the enter and exit.&lt;/li&gt;  &lt;/ul&gt;    &lt;h3&gt;Signature&lt;/h3&gt;    &lt;pre style="display: none;"&gt;onTick(position, inside, enters, leave)  &lt;/pre&gt;&lt;div&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to copy this code to the clipboard" style=""&gt;Click here to copy this code to the clipboard&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to add this snippet to Coda" style=""&gt;Click here to add this snippet to Coda&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Click here to add this snippet to TextMate" style=""&gt;Click here to add this snippet to TextMate&lt;/a&gt;&lt;a href="http://davidwalsh.name/js/scrollspy#" title="Get the raw code" style=""&gt;Get the raw code&lt;/a&gt;&lt;div&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;onTick&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; inside&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; enters&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; leave&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h4&gt;Arguments:&lt;/h4&gt;    &lt;ol&gt;  &lt;li&gt;position - (&lt;em&gt;object&lt;/em&gt;) The container's scroll position object.&lt;/li&gt;  &lt;li&gt;inside - (&lt;em&gt;boolean&lt;/em&gt;) Represents whether or not the scroll is within the designated min and max area.&lt;/li&gt;  &lt;li&gt;enters - (&lt;em&gt;integer&lt;/em&gt;) The number of enters.&lt;/li&gt;  &lt;li&gt;leaves - (&lt;em&gt;integer&lt;/em&gt;) The number of leaves.&lt;/li&gt;  &lt;/ol&gt;	      			  --&gt;    &lt;/div&gt;&lt;/blockquote&gt;    &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://davidwalsh.name/js/scrollspy"&gt;davidwalsh.name&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/scrollspy-david-walsh-blog"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-1250396821066050166?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/1250396821066050166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=1250396821066050166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/1250396821066050166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/1250396821066050166'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/scrollspy-david-walsh-blog.html' title='ScrollSpy | David Walsh Blog'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-2802225604939077196</id><published>2010-01-26T11:47:00.001+11:00</published><updated>2010-01-26T11:47:48.755+11:00</updated><title type='text'>Microsoft releases an awesome Silverlight 4 Beta Client for Facebook for Windows and OS X | ithinkdifferent</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;img src="http://posterous.com/getfile/files.posterous.com/brandontruong/HGizgICppqGmIoJiImlzctBfzypkhCBEdFramgEGlwnBgdqBvbFdEFhGpJCA/media_httpwwwithinkdi_olsdj.jpg.scaled500.jpg" width="456" height="273"/&gt; &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://www.ithinkdiff.com/microsoft-releases-an-awesome-silverlight-4-beta-client-for-facebook-for-windows-and-os-x/"&gt;ithinkdiff.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/microsoft-releases-an-awesome-silverlight-4-b"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-2802225604939077196?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/2802225604939077196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=2802225604939077196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2802225604939077196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2802225604939077196'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/microsoft-releases-awesome-silverlight.html' title='Microsoft releases an awesome Silverlight 4 Beta Client for Facebook for Windows and OS X | ithinkdifferent'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-3728139714181782277</id><published>2010-01-26T11:13:00.001+11:00</published><updated>2010-01-26T11:13:40.652+11:00</updated><title type='text'>The Typemock Insider Blog: How to run NUnit tests created with VS2010 and .NET 4</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div&gt;  &lt;p&gt;&lt;/p&gt;&lt;p&gt;Today when writing tests for a new project built using VS2010 I had an interesting problem:&lt;/p&gt;  &lt;p&gt;NUnit would not run my unit tests because the assembly that contained my unit tests was compiled using a newer version of the .NET runtime.&lt;/p&gt;  &lt;p&gt;There are several solutions to solve this issue from downgrading my project to use earlier version of .NET to &lt;a href="http://www.lhotka.net/weblog/nunitToMstestForCSLANET4.aspx" target="_blank"&gt;migrate my unit tests to MSTest&lt;/a&gt; but luckily for me no such drastic move was needed.&lt;/p&gt;  &lt;p&gt;The new &lt;a href="http://nunit.com/index.php?p=download" target="_blank"&gt;NUnit (2.5.x)&lt;/a&gt; have support for running tests using .NET 4 it’s just hidden inside a pile of xml.&lt;/p&gt;  &lt;h3&gt;The solution&lt;/h3&gt;  &lt;p&gt;To run .NET 4.0 test assembly add the lines below to the relevant config file, so if you’re using &lt;em&gt;NUnit.exe&lt;/em&gt; update &lt;em&gt;nunit.exe.config&lt;/em&gt; or if you’re using &lt;em&gt;nunit-console.exe &lt;/em&gt;use &lt;em&gt;nunit-console.exe.config &lt;/em&gt;– you get the point.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Under &amp;lt;configuration&amp;gt; add:      &lt;br /&gt;&amp;lt;startup&amp;gt;&amp;lt;requiredRuntime version="v4.0.21006" /&amp;gt;&amp;lt;/startup&amp;gt; &lt;/li&gt;    &lt;li&gt;Under &amp;lt;runtime&amp;gt; add:      &lt;br /&gt;&amp;lt;loadFromRemoteSources enabled="true" /&amp;gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I’m using the latest VS2010 RC2 If you have a different version of Visual Studio installed change the &lt;em&gt;version&lt;/em&gt; value to the version of the .NET 4 installed on your machine – look at C:\Windows\Microsoft.NET\Framework to find out which version you have.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;That’s it!&lt;/p&gt;    &lt;div style="clear: both;"&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/blockquote&gt;&lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://blog.typemock.com/2010/01/how-to-run-nunit-tests-created-with.html"&gt;blog.typemock.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/the-typemock-insider-blog-how-to-run-nunit-te"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-3728139714181782277?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/3728139714181782277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=3728139714181782277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/3728139714181782277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/3728139714181782277'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/typemock-insider-blog-how-to-run-nunit.html' title='The Typemock Insider Blog: How to run NUnit tests created with VS2010 and .NET 4'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-3902852472060028249</id><published>2010-01-26T10:11:00.001+11:00</published><updated>2010-01-26T10:11:24.593+11:00</updated><title type='text'>Google Chrome 4.0 For Windows Adds Extensions and Bookmark Sync</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;img src="http://posterous.com/getfile/files.posterous.com/brandontruong/hminAbuJxdBwekgEyzqqjFknmbDbhgkoBmgsksoyfrHDyycreckolIzhiezI/media_httpcdnmashable_vybIb.png.scaled500.png" width="300" height="250"/&gt;     &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://mashable.com/2010/01/25/google-chrome-4-extensions/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+Mashable+%28Mashable%29"&gt;mashable.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/google-chrome-40-for-windows-adds-extensions-0"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-3902852472060028249?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/3902852472060028249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=3902852472060028249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/3902852472060028249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/3902852472060028249'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/google-chrome-40-for-windows-adds.html' title='Google Chrome 4.0 For Windows Adds Extensions and Bookmark Sync'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-2366789650162916411</id><published>2010-01-25T22:18:00.001+11:00</published><updated>2010-01-25T22:18:26.821+11:00</updated><title type='text'>Silverlight and non-IIS hosted WCF-services</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;div class="posterous_quote_citation"&gt;  Check out this website I found at &lt;a href="http://chris.59north.com/post/Silverlight-and-non-IIS-hosted-WCF-services.aspx"&gt;chris.59north.com&lt;/a&gt;&lt;/div&gt;     &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/silverlight-and-non-iis-hosted-wcf-services"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-2366789650162916411?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/2366789650162916411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=2366789650162916411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2366789650162916411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2366789650162916411'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/silverlight-and-non-iis-hosted-wcf.html' title='Silverlight and non-IIS hosted WCF-services'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-774174926800249366</id><published>2010-01-25T21:03:00.001+11:00</published><updated>2010-01-25T21:03:30.103+11:00</updated><title type='text'>An Excel file Viewer in Silverlight 4</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;a href='http://posterous.com/getfile/files.posterous.com/brandontruong/AvuECxBEmbhnweIfkEjusxhzryqpvIbvzInxeAHyjwyDaoJqapyeawyrmlzv/media_httpwwwsilverli_twdag.jpg.scaled1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/brandontruong/AvuECxBEmbhnweIfkEjusxhzryqpvIbvzInxeAHyjwyDaoJqapyeawyrmlzv/media_httpwwwsilverli_twdag.jpg.scaled500.jpg" width="500" height="304"/&gt;&lt;/a&gt; &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://www.silverlightshow.net/items/An-Excel-file-Viewer-in-Silverlight-4.aspx?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+silverlightshow+%28SilverlightShow%3A+Silverlight+Community%29"&gt;silverlightshow.net&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/an-excel-file-viewer-in-silverlight-4"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-774174926800249366?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/774174926800249366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=774174926800249366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/774174926800249366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/774174926800249366'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/excel-file-viewer-in-silverlight-4.html' title='An Excel file Viewer in Silverlight 4'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-7062219711643275296</id><published>2010-01-25T20:55:00.001+11:00</published><updated>2010-01-25T20:55:26.881+11:00</updated><title type='text'>How Fast Do Friendfeed Results Appear in Google Web Search?</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div&gt;&lt;h3&gt;Monday, January 25, 2010&lt;/h3&gt;&lt;h3&gt;How Fast Do Friendfeed Results Appear in Google Web Search?&lt;/h3&gt;&lt;p&gt;I just got my phone&amp;#8217;s stop watch ready and posted the following sentence into &lt;a href="http://friendfeed.com/philipp/c00da2cd/this-is-unique-sentence-with-number-321192301"&gt;Friendfeed&lt;/a&gt; (one of Google&amp;#8217;s &lt;a href="http://googleblog.blogspot.com/2009/12/relevance-meets-real-time-web.html"&gt;special partners&lt;/a&gt;):&lt;/p&gt;    &lt;p&gt;&amp;#8220;This is a unique sentence with the number 321192301 that has never been written before according to Google.&amp;#8221;&lt;/p&gt;    &lt;p&gt;I made sure this sentence was not yet available in Google web search:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://blogoscoped.com/archive/2010-01-25-n52.html/files/unique-friendfeed-sentence-before.png" alt="" /&gt;&lt;/p&gt;    &lt;p&gt;Refreshing web search twice in brief intervals, the sentence was already appearing, and I hadn&amp;#8217;t even pasted my explanatory comment to Friendfeed yet. The watch showed 13 seconds had passed, but it might have been appearing earlier:&lt;/p&gt;    &lt;p&gt;&lt;img src="http://blogoscoped.com/archive/2010-01-25-n52.html/files/unique-friendfeed-sentence-after.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogoscoped.com/archive/2010-01-25-n52.html#"&gt;How Fast Do Friendfeed Re ...&lt;/a&gt; by Philipp Lenssen | &lt;a href="http://blogoscoped.com/archive/2010-01-25-n52.html#"&gt;Comments&amp;nbsp;(4)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&amp;gt;&amp;gt; &lt;a href="http://blogoscoped.com/archive/2010-01-25-n52.html#"&gt;More posts&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: 11px; color: #777;"&gt;Advertisement&lt;/span&gt;&lt;br /&gt;    &lt;/p&gt;&lt;p /&gt;&lt;/div&gt;&lt;/blockquote&gt;    &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://blogoscoped.com/archive/2010-01-25-n52.html"&gt;blogoscoped.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/how-fast-do-friendfeed-results-appear-in-goog-0"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-7062219711643275296?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/7062219711643275296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=7062219711643275296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/7062219711643275296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/7062219711643275296'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/how-fast-do-friendfeed-results-appear.html' title='How Fast Do Friendfeed Results Appear in Google Web Search?'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-6182125972600046909</id><published>2010-01-25T16:16:00.001+11:00</published><updated>2010-01-25T16:16:52.883+11:00</updated><title type='text'>Silverlight Unit Testing Framework: Asynchronous Testing of Behaviors</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;a href='http://posterous.com/getfile/files.posterous.com/brandontruong/yHcukeAlnwpCAslrhHnuiBqmBqiIwuFpemwpifjjsleFyAwgszIyyfybbaCs/media_http1bpblogspot_jGAdq.jpg.scaled1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/brandontruong/yHcukeAlnwpCAslrhHnuiBqmBqiIwuFpemwpifjjsleFyAwgszIyyfybbaCs/media_http1bpblogspot_jGAdq.jpg.scaled500.jpg" width="500" height="109"/&gt;&lt;/a&gt; &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://csharperimage.jeremylikness.com/2010/01/silverlight-unit-testing-framework.html"&gt;csharperimage.jeremylikness.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;Great article about Silverlight testing&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/silverlight-unit-testing-framework-asynchrono"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-6182125972600046909?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/6182125972600046909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=6182125972600046909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/6182125972600046909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/6182125972600046909'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/silverlight-unit-testing-framework.html' title='Silverlight Unit Testing Framework: Asynchronous Testing of Behaviors'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-2505842723115056456</id><published>2010-01-25T16:06:00.001+11:00</published><updated>2010-01-25T16:06:08.100+11:00</updated><title type='text'>My First Posterous Post</title><content type='html'>&lt;div class='posterous_autopost'&gt;   Hello world &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://brandontruong.posterous.com/my-first-posterous-post-1102"&gt;brandontruong's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-2505842723115056456?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/2505842723115056456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=2505842723115056456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2505842723115056456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2505842723115056456'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2010/01/my-first-posterous-post.html' title='My First Posterous Post'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-6550727208963450734</id><published>2009-08-30T21:33:00.001+10:00</published><updated>2009-08-30T21:33:58.480+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Behaviors'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Default Focus Behavior</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I would love to share with you guys about Default Focus Behavior which I just created an hour ago because I thought this behavior would be very handy.&lt;br/&gt;&lt;br/&gt;With this behavior, we would be able to set focus to any controls when we trigger any control events.&lt;br/&gt;&lt;br/&gt;For example, &lt;span style='color: rgb(0, 0, 0);'&gt;&lt;span style='text-decoration: underline;'&gt;&lt;strong&gt;whenever &lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;we click the button, we want to textbox got focused, or when we select the Option 1 for the very &lt;span style='color: rgb(0, 0, 0);'&gt;&lt;span style='text-decoration: underline;'&gt;&lt;strong&gt;first time&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;, the textbox will get focused as below image&lt;br/&gt;&lt;br/&gt;&lt;img width='315' height='89' alt='defaultfocusbehavior_demo' src='http://brandontruong.wordpress.com/files/2009/08/defaultfocusbehavior_demo1.gif' title='defaultfocusbehavior_demo' style=''/&gt;&lt;br/&gt;&lt;br/&gt;Click the icon below for the source code&lt;br/&gt;&lt;br/&gt;&lt;img width='93' height='96' alt='' src='http://msc.wlxrs.com/lQNgXBQYoayUK1wMOhAgVw/images/icons/Large/Zip.png' title='Source Code Icon' class='alignnone'/&gt;&lt;br/&gt;&lt;br/&gt;Hopes this helpful :)Technorati Tags: &lt;a rel='tag' href='http://technorati.com/tag/Behaviors' class='performancingtags'&gt;Behaviors&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=81270385-43a2-8dc9-9fa9-c40c92470484' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-6550727208963450734?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/6550727208963450734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=6550727208963450734' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/6550727208963450734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/6550727208963450734'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2009/08/default-focus-behavior.html' title='Default Focus Behavior'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-3075653965169620192</id><published>2009-08-29T09:57:00.001+10:00</published><updated>2009-08-29T09:57:38.138+10:00</updated><title type='text'>TextWraping in Silverlight</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Just a little thing I came across when I am trying to set &lt;font color='#ff0000'&gt;TextWraping&lt;/font&gt; property for a &lt;font color='#000099'&gt;TextBox&lt;/font&gt;, but the text doesn't seem to be wrapped. Then I realized if the &lt;font color='#000099'&gt;TextBox &lt;/font&gt;is setting with &lt;font color='#ff0000'&gt;TextWraping &lt;/font&gt;greater than 1, the text won't be wrapped. Just a little thing to keep in mind :)&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=8edb9c29-2401-883e-92a5-346b1a467b90' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-3075653965169620192?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/3075653965169620192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=3075653965169620192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/3075653965169620192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/3075653965169620192'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2009/08/textwraping-in-silverlight.html' title='TextWraping in Silverlight'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-1162600666245601579</id><published>2009-08-20T23:20:00.000+10:00</published><updated>2009-08-20T23:21:15.115+10:00</updated><title type='text'>Datagrid Missing Binding Error</title><content type='html'>I have run into this silly mistake, and it took me 2 hours to figure it out :(&lt;br /&gt;&lt;br /&gt;I  am writing it down here for my own reference, and if you ever ran into this problem, hope that this can help you fix your problem quickly.&lt;br /&gt;&lt;br /&gt;The problem is I had a datagrid column with the Header but not the Binding, for example&lt;div&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;data:datagridtextcolumn header="MyProperty"&gt;&lt;/data:datagridtextcolumn&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;&lt;br /&gt;&lt;/span&gt;This will cause the below error at &lt;span class="zem_slink"&gt;runtime&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img class="alignnone size-full wp-image-69" title="Datagrid Missing Binding Error" src="http://brandontruong.wordpress.com/files/2009/08/error.gif" alt="Datagrid Missing Binding Error" width="634" height="437" /&gt;&lt;br /&gt;&lt;br /&gt;To fix it, all I had to do is to put the Binding in it&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;data:datagridtextcolumn header="MyProperty" binding="{Binding"&gt;&lt;/data:datagridtextcolumn&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hope this helps&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-1162600666245601579?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/1162600666245601579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=1162600666245601579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/1162600666245601579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/1162600666245601579'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2009/08/datagrid-missing-binding-error.html' title='Datagrid Missing Binding Error'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-891245452691292258</id><published>2009-08-17T21:22:00.000+10:00</published><updated>2009-08-17T21:25:51.988+10:00</updated><title type='text'>UpperCase Behavior</title><content type='html'>I was asked to create a TextBox input which has only UpperCase letters. After a bit of research, I have found &lt;a href="http://janrep.blog.codeplant.net/Silverlight-UpperCase-TextBox-Control.aspx"&gt;this article&lt;/a&gt; which has inspired me to come up with this solution. As we all know that Behavior is a cool stuff in Silverlight 3, so I decided to use the concept from that article and create a Behavior which detects all the key and uppercase it. Feel free to download the source code and have a play with it.&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width:800px;" src="http://brandontruong.site90.net/wp-content/uploads/2009/08/SCREENSHOT.gif" alt="" /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=d4b5e574-23cc-8d2c-9202-e87c9fb4659d" alt="" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;a href="http://cid-a76b6cd2cfd87d30.skydrive.live.com/self.aspx/Public/SilverlightApplication1.zip"&gt;&lt;img class="zemanta-pixie-img" src="http://msc.wlxrs.com/lQNgXBQYoayUK1wMOhAgVw/images/icons/Large/Zip.png" alt="" /&gt;&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/682979582715341480-891245452691292258?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/891245452691292258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=891245452691292258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/891245452691292258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/891245452691292258'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2009/08/uppercase-behavior.html' title='UpperCase Behavior'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-7510740809201330851</id><published>2009-06-17T11:14:00.003+10:00</published><updated>2009-06-17T12:07:32.887+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>FocusManager</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I've read this &lt;a href="http://geekswithblogs.net/tkokke/archive/2009/06/16/silverbullet-3---system.windows.input.focusmanager.aspx"&gt;article&lt;/a&gt; about &lt;strong&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;FocusManager&lt;/span&gt;&lt;/strong&gt;. I think it could come handy sometimes when you want to know what element has focus. &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.windows.input.focusmanager%28VS.95%29.aspx"&gt;FocusManager&lt;/a&gt; class which can be found in the&lt;strong&gt;&lt;span style="color: rgb(128, 0, 0);"&gt; System.Windows.Input&lt;/span&gt;&lt;/strong&gt; namespace.   Below is the sample of how to use it&lt;br /&gt;&lt;p&gt;The &lt;strong&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;FocusManager &lt;/span&gt;&lt;/strong&gt;class has only one static method: &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&amp;lt;span class="kwrd"&amp;gt;public&amp;lt;/span&amp;gt; &amp;lt;span class="kwrd"&amp;gt;static&amp;lt;/span&amp;gt; Object GetFocusedElement();&lt;/pre&gt;    &lt;p&gt;Using the &lt;strong&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;FocusManager&lt;/span&gt;&lt;/strong&gt; is easy. Here’s a small example of a possible usage:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; focusedElement = &lt;span style="color: rgb(0, 128, 128);"&gt;FocusManager&lt;/span&gt;.GetFocusedElement() &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;Control&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (focusedElement != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;     Output.Text = focusedElement.Name;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;One last note: The &lt;strong&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;FocusManager&lt;/span&gt;&lt;/strong&gt; class is also available in the “normal” .NET Framework 3.0 or later.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-7510740809201330851?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/7510740809201330851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=7510740809201330851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/7510740809201330851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/7510740809201330851'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2009/06/focusmanager.html' title='FocusManager'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-2247207265697808960</id><published>2009-06-09T15:10:00.001+10:00</published><updated>2009-06-17T12:12:40.096+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Binding for Converter Parameter</title><content type='html'>I have come across the situation where I need to do some Binding for ConverterParameter. Something like&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://brandontruong.files.wordpress.com/2009/06/1.gif" /&gt;&lt;br /&gt;&lt;br /&gt;I have done lots of research, and I found out that its impossible to do binding for ConverterParameter.&lt;br /&gt;So I came up with the Solution. I created the Converter but inherited from FrameworkElement&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;public class ShowDeleteServiceConverter : &lt;span style="color: rgb(255, 0, 0);"&gt;FrameworkElement, &lt;/span&gt;IValueConverter&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;In the converter class, I created a dependency property&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://brandontruong.files.wordpress.com/2009/06/2.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Now, I can do the Binding as usual&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://brandontruong.files.wordpress.com/2009/06/32.gif" height="105" width="848" /&gt;&lt;br /&gt;And&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://brandontruong.files.wordpress.com/2009/06/4.gif" /&gt;&lt;br /&gt;&lt;br /&gt;It might not be the best solution, but it works for me so far. If you have any idea, feel free to drop me comments.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-2247207265697808960?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/2247207265697808960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=2247207265697808960' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2247207265697808960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/2247207265697808960'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2009/06/binding-for-converter-parameter.html' title='Binding for Converter Parameter'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-7586678994799581312</id><published>2009-01-26T11:23:00.003+11:00</published><updated>2009-01-27T21:01:56.692+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>How to Change the Startup Class</title><content type='html'>Another great tip from Mike Snow. Read the original article &lt;a href="http://silverlight.net/blogs/msnow/archive/2009/01/23/silverlight-tip-of-the-day-87-how-to-change-the-startup-class.aspx"&gt;here&lt;/a&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When a Silverlight application is launched the entry point is a class that inherits from System.Windows.Application. By default, when you create a new Silverlight application project, this would be your App class which gets defined in App.xaml.cs. You can, however, change which startup class you want to use. In fact, if you do not plan to use XAML at all you can reduce the size of your application by deleting the Page and App classes including the XAML and code behind files.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To accomplish this follow these steps:  &lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; Create a new Silverlight application project adding a new ASP.net web project to host the Silverlight app.  &lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Delete App.xaml and Page.xaml (the CS files will be deleted also).  &lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; Create a new class and call it StartupTest.cs  &lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; Modify your new class to inherit from Application as seen here:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div    style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto;  width: 97.5%; cursor: text;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:#f4f4f4;"&gt;&lt;br /&gt;&lt;div    style="border-style: none; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:#f4f4f4;"&gt;&lt;br /&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%;  line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; StartupTest : Application&lt;/pre&gt;&lt;br /&gt;&lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" color="#f4f4f4" style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-"&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%;  line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; StartupTest()&lt;/pre&gt;&lt;br /&gt;&lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" color="#f4f4f4" style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-"&gt;    {&lt;/pre&gt;&lt;br /&gt;&lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" color="#f4f4f4" style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Step 5. &lt;/strong&gt;Right click on your Silverlight application project in the Solution Explorer of VS. From the context menu choose Properties. This will bring up the Properties dialog. Click on the Silverlight tab at the top-left and change the Startup object to be your class as seen circled here:  &lt;a href="http://silverlight.net/blogs/msnow/image_BPu5ZQ.png"&gt;&lt;img style="border-width: 0px;" title="image" src="http://silverlight.net/blogs/msnow/image_thumb_Vw7zMw.png" border="0" alt="image" width="691" height="390" /&gt;&lt;/a&gt; &lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Step 6.&lt;/strong&gt; Go back to your StartupTest class. Add an event to monitor for when the application has started. You don’t want to do anything until after this event has started.&lt;br /&gt;&lt;div    style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto;  width: 97.5%; cursor: text;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:#f4f4f4;"&gt;&lt;br /&gt;&lt;div    style="border-style: none; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:#f4f4f4;"&gt;&lt;br /&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; StartupTest : Application&lt;/pre&gt;&lt;br /&gt;&lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" color="#f4f4f4" style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-"&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; StartupTest()&lt;/pre&gt;&lt;br /&gt;&lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" color="#f4f4f4" style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-"&gt;    {&lt;/pre&gt;&lt;br /&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Startup += &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StartupEventHandler(StartupTest_Startup);&lt;/pre&gt;&lt;br /&gt;&lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" color="#f4f4f4" style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" color="#f4f4f4" style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-"&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; StartupTest_Startup(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, StartupEventArgs e)&lt;/pre&gt;&lt;br /&gt;&lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" color="#f4f4f4" style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-"&gt;    {&lt;/pre&gt;&lt;br /&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Step 7.&lt;/strong&gt; The Application.RootVisual is root pointer to the main application UI. You will need to create this object to point an object such as a Grid or Canvas control. Once created, you can add additional controls to the children as you see fit. In the example below, I have created a Canvas as the root and configured its background color to be black, its width to be 800 and height to be 600. Also, I have added a Textbox to the Canvas control.&lt;br /&gt;&lt;div    style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto;  width: 97.5%; cursor: text;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:#f4f4f4;"&gt;&lt;br /&gt;&lt;div    style="border-style: none; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:#f4f4f4;"&gt;&lt;br /&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; StartupTest_Startup(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, StartupEventArgs e)&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;    &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.RootVisual = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Canvas();&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;    ((Canvas)&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.RootVisual).Width = 800;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"&gt;    ((Canvas)&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.RootVisual).Height = 600;&lt;/pre&gt;&lt;br /&gt;&lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" color="white" style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-"&gt;    ((Canvas)&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.RootVisual).Background = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Black);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" color="white" style="border-style: none; margin: 0em; padding: 0px; overflow: visible;  width: 100%; color: black; line-height: 12pt;  background-"&gt;    TextBlock tb = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; TextBlock();&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"&gt;    tb.Foreground = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SolidColorBrush(Colors.White);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"&gt;    tb.FontSize = 20;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"&gt;    tb.Text = &lt;span style="color:#006080;"&gt;"NO XAML NEEDED!!!"&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"&gt;    ((Canvas)&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.RootVisual).Children.Add(tb);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Step 8. Run the application and you will see the following image rendered in your browser:  &lt;a href="http://silverlight.net/blogs/msnow/image_kaH/ZQ.png"&gt;&lt;img style="border: 0px none ;" title="image" src="http://silverlight.net/blogs/msnow/image_thumb_ta1/FA.png" border="0" alt="image" width="542" height="347" /&gt;&lt;/a&gt; Technorati Tags: &lt;a class="performancingtags" rel="tag" href="http://technorati.com/tag/Silverlight"&gt;Silverlight&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/682979582715341480-7586678994799581312?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/7586678994799581312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=7586678994799581312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/7586678994799581312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/7586678994799581312'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2009/01/how-to-change-startup-class.html' title='How to Change the Startup Class'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-5764916932805705725</id><published>2009-01-01T17:16:00.001+11:00</published><updated>2009-01-01T17:16:31.297+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Badge'/><title type='text'>How to Create A Badge Of Your Facebook</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;b&gt;Create a Badge From a Template&lt;/b&gt;&lt;div id='intelliTxt'&gt; 				                        &lt;div class='Step'&gt;                        &lt;div class='label'&gt;&lt;ol&gt;&lt;li&gt;Log into your facebook account&lt;/li&gt;&lt;li&gt;Click on the "My Profile" link to view your current profile after you have logged in. 				    &lt;/li&gt;&lt;li&gt;Select the "Create a Profile Badge" link that can be found on your profile. 				    &lt;/li&gt;&lt;li&gt;Choose a template to help create your badge. A photo badge showcases your most recent photo uploads. The Signature Badge has your contact information and is ideal for email and forum signatures. The blog badge is a great addition to your external Web site or blog.&lt;/li&gt;&lt;li&gt;Set the preferences for your template. While they may vary slightly, you must select a layout (Horizontal or Vertical) and a format (Image or JavaScript) for each template. &lt;/li&gt;&lt;li&gt;Finish making changes to your badge and click "Save" to get directions for posting your badge. You will need to copy and paste the provided code into the Web site where you want the badge to appear. &lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;Create a Custom Badge&lt;br/&gt;&lt;/b&gt;&lt;ol&gt;&lt;li&gt;Show your individuality by choosing to "Create a Badge" from the "Create a Profile Badge" page.&lt;/li&gt;&lt;li&gt;Set the basic layout and format. 				    &lt;/li&gt;&lt;li&gt;Add any items from the drop-down menu that you want to include in your badge. Click the "Add Item" button to add it to your badge. You may add more than one item. With no template, you can add anything you want to your badge. It will preview as you make additions. &lt;/li&gt;&lt;li&gt;Hit the "Save" button to complete your badge and get the necessary code to post it.&lt;br/&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;Technorati Tags: &lt;a rel='tag' href='http://technorati.com/tag/Badge' class='performancingtags'&gt;Badge&lt;/a&gt;, &lt;a rel='tag' href='http://technorati.com/tag/facebook' class='performancingtags'&gt;facebook&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/682979582715341480-5764916932805705725?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/5764916932805705725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=5764916932805705725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5764916932805705725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5764916932805705725'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2009/01/how-to-create-badge-of-your-facebook.html' title='How to Create A Badge Of Your Facebook'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-5173712033372338755</id><published>2008-12-04T16:51:00.000+11:00</published><updated>2008-12-04T16:57:06.259+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Editor'/><title type='text'>Selecting a Block of text</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;div class='title'&gt; 					&lt;h1&gt; 						&lt;a title='Permanent Link to 20 Excellent Free Rich-Text Editors' rel='bookmark' href='http://www.webdesignerdepot.com/2008/12/20-excellent-free-rich-text-editors/'&gt;20 Excellent Free Rich-Text Editors&lt;/a&gt; 					&lt;/h1&gt;&lt;em&gt;Jacob Gube, a Web developer/designer and author of &lt;a href='http://sixrevisions.com/'&gt;Six Revisions&lt;/a&gt;, a blog on Web development  and design. If you want to connect with the author, you can &lt;a href='http://twitter.com/jggube'&gt;follow him on Twitter&lt;/a&gt;.&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;He has given us a list of 20 excellent Free Rich-text Editors. Thanks for his work.&lt;br/&gt;&lt;br/&gt;Click &lt;a href='http://www.webdesignerdepot.com/2008/12/20-excellent-free-rich-text-editors/'&gt;here &lt;/a&gt;for the original post&lt;br/&gt;&lt;br/&gt;										 										 					 				&lt;/div&gt;  				 										&lt;p&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/12/rte.jpg'&gt;&lt;img width='200' height='160' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/12/rte.jpg' title='rte' class='alignleft size-full wp-image-1363'/&gt;&lt;/a&gt;&lt;em&gt;Rich-text editors&lt;/em&gt;, also known as &lt;a href='http://en.wikipedia.org/wiki/Online_rich-text_editor'&gt;&lt;em&gt;online rich-text  editors&lt;/em&gt;&lt;/a&gt;, are web components that allow users to edit and enter text within a web browser. Rich-text editors are used in numerous ways such as in enhancing your comment input form or as part of a web application that allows entry of user-generated and formatted content. &lt;strong&gt;Rich-text editors are essentially  web-based WYSIWYG&lt;/strong&gt; (”what you see is what you get”) editors.&lt;/p&gt; &lt;p&gt;There are many rich-text editors out there. What’s &lt;em&gt;even better&lt;/em&gt; than a lot of choices? Many  of the best rich-text editors currently in the market are &lt;em&gt;free&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;In this article, we present &lt;em&gt;20 exceptional (and free) rich-text editors&lt;/em&gt;.&lt;span id='more-1076'/&gt;&lt;/p&gt; &lt;h2&gt;1. TinyMCE&lt;/h2&gt; &lt;p&gt;&lt;em&gt;TinyMCE&lt;/em&gt; is an open  source (under the &lt;a href='http://www.gnu.org/licenses/lgpl.html' title='Information on the GNU Lesser General Public License - GNU Project'&gt;GNU  Lesser General Public License&lt;/a&gt;) rich-text editor released and maintained by &lt;a href='http://www.moxiecode.com/' title='Moxiecode home page.'&gt;Moxiecode&lt;/a&gt;. As indicated by the name, TinyMCE is lightweight but highly customizable through an intuitive API. TinyMCE’s plugin system allows you to download themes and plugins to extend the core installation.&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/01_tinymce.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/01_tinymce.jpg' class='alignnone size-full wp-image-1078'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://tinymce.moxiecode.com/'&gt;TinyMCE&lt;/a&gt; |&lt;a href='http://tinymce.moxiecode.com/'&gt; &lt;/a&gt;&lt;a href='http://tinymce.moxiecode.com/examples/full.php'&gt;Demo&lt;/a&gt; | &lt;a href='http://tinymce.moxiecode.com/download.php'&gt;Download &lt;/a&gt;&lt;/p&gt; &lt;h2&gt;2. FCK Editor&lt;/h2&gt; &lt;p&gt;&lt;em&gt;FCKeditor&lt;/em&gt; is  another wildly popular open source online rich-text editor (check out &lt;a href='http://www.fckeditor.net/whosusing' title='FCKeditor - Who&amp;apos;s using FCKeditor?'&gt;some of the websites that use it&lt;/a&gt;). It has a “Word clean-up” feature that automatically detects and cleans up text that’s copied from Microsoft Word documents. It has one of the best HTML table editing and creation features, making it very easy for users to create and edit tables for displaying data.&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/02_fckeditor.jpg'&gt;&lt;img width='613' height='227' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/02_fckeditor.jpg' class='alignnone size-full wp-image-1080'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.fckeditor.net/'&gt;FCKeditor&lt;/a&gt; | &lt;a href='http://www.fckeditor.net/demo'&gt;Demo&lt;/a&gt; | &lt;a href='http://www.fckeditor.net/download'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;3. NicEdit&lt;/h2&gt; &lt;p&gt;&lt;em&gt;NicEdit&lt;/em&gt; is lightweight, no-fuss cross-platform rich-text editor that emphasizes user-friendliness and simplicity over barraging users with too many features. You can serve NicEdit remotely from the NicEdit website; all you have to do is copy a JavaScript code snipplet and voila – it just works (as well as saving your server some system resources).&lt;a href='http://www.nicedit.com/'&gt;&lt;br/&gt;&lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/03_nicedit.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/03_nicedit.jpg' class='alignnone size-full wp-image-1081'/&gt;&lt;/a&gt;&lt;a href='http://www.nicedit.com/'&gt;&lt;br/&gt;NicEdit&lt;/a&gt; | &lt;a href='http://www.nicedit.com/demos.php'&gt;Demo&lt;/a&gt; | &lt;a href='http://www.nicedit.com/download.php'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;4. BXE&lt;/h2&gt; &lt;p&gt;&lt;em&gt;BXE&lt;/em&gt; is an XML-based WYSIWYG editor that allows you to change an entire web page. It has been an open source application since 2002 - and with a devout following - you might be able to quickly find some help if you run into any issues in the &lt;a href='http://www.bitfluxeditor.org/development/irc/' title='BXE IRC information.'&gt;BXE IRC channel&lt;/a&gt;.&lt;a href='http://www.bitfluxeditor.org/'&gt;&lt;br/&gt;&lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/04_bitflux_editor.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/04_bitflux_editor.jpg' class='alignnone size-full wp-image-1082'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.bitfluxeditor.org/'&gt;BXE&lt;/a&gt; | &lt;a href='http://cvsdemo.bitfluxeditor.org/'&gt;Demo&lt;/a&gt; | &lt;a href='http://www.bitfluxeditor.org/download/'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;5. MarkItUp!&lt;/h2&gt; &lt;p&gt;&lt;em&gt;markItUp!&lt;/em&gt; is a  JavaScript-based markup editor built on top of the &lt;a href='http://jquery.com/' title='The Write Less, Do More, JavaScript Library'&gt;jQuery library&lt;/a&gt;. With markItUp!, you can easily turn any HTML textarea into a fully-featured WYSIWYG editor. It’s lightweight (the script weighs in at only 6.5kb), supports keyboard shortcuts, has a built-in Ajax live preview and many more features that make markItUp! an excellent choice.&lt;/p&gt; &lt;p&gt;&lt;a href='http://markitup.jaysalvat.com/home/'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/05_markitup.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/05_markitup.jpg' class='alignnone size-full wp-image-1083'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://markitup.jaysalvat.com/home/'&gt;markItUp!&lt;/a&gt; | &lt;a href='http://markitup.jaysalvat.com/examples/'&gt;Demo&lt;/a&gt; | &lt;a href='http://markitup.jaysalvat.com/downloads/'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;6. WidgEditor&lt;/h2&gt; &lt;p&gt;The &lt;em&gt;widgEditor&lt;/em&gt; is  an open source project of &lt;a href='http://www.themaninblue.com/'&gt;Cameron  Adams&lt;/a&gt; released under the &lt;a href='http://www.gnu.org/licenses/gpl.html' title='Information on The GNU General Public License - GNU Project'&gt;GNU General  Public License&lt;/a&gt;. It’s a simple and no-fuss HTML rich-text editing solution that converts regular HTML textareas into a WYSIWYG. Because it’s JavaScript-based and designed to degrade gracefully, users with JavaScript turned off will still be able to use the HTML textarea.&lt;a href='http://www.themaninblue.com/experiment/widgEditor/'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/06_widgeditor.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/06_widgeditor.jpg' class='alignnone size-full wp-image-1084'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.themaninblue.com/experiment/widgEditor/'&gt;widgEditor&lt;/a&gt; | &lt;a href='http://www.themaninblue.com/experiment/widgEditor/'&gt;Demo&lt;/a&gt; | &lt;a href='http://code.google.com/p/widgeditor/downloads/list'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;7. EditArea&lt;/h2&gt; &lt;p&gt;&lt;em&gt;EditArea&lt;/em&gt; is a free JavaScript source code editor. It’s an excellent solution for weblogs and websites that allow developers to contribute and format their own code.&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.cdolivet.net/editarea/%20-%20606'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/07_editarea.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/07_editarea.jpg' class='alignnone size-full wp-image-1085'/&gt;&lt;/a&gt;&lt;br/&gt;&lt;a href='http://www.cdolivet.net/editarea/%20-%20606'&gt;EditArea&lt;/a&gt; | &lt;a href='http://cdolivet.net/editarea/editarea/exemples/exemple_full.html'&gt;Demo&lt;/a&gt; | &lt;a href='http://sourceforge.net/project/showfiles.php?group_id=164008'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;8. Cross Browser Rich Text Editor (RTE)&lt;/h2&gt; &lt;p&gt;&lt;em&gt;Cross-Browser Rich  Text Editor&lt;/em&gt; (”RTE” for short) is a free rich-text editor released  under the &lt;a href='http://creativecommons.org/licenses/by/2.5/'&gt;Creative  Commons Attribution 2.5 license&lt;/a&gt;. It’s a work based on the &lt;a href='https://ids.breuer.com/ds/1390' title='Web Browser designMode Functionality (1390) - IDS'&gt;designMode &lt;/a&gt; functionality introduced in Internet Explorer  5 and implemented in the Mozilla &lt;a href='http://www.mozilla.org/editor/midas-spec.html'&gt;Rich Text Editing API&lt;/a&gt;.  It just has basic features, so it’s perfect for individuals looking to add  simple rich-text editing support.&lt;a href='http://www.kevinroth.com/rte/'&gt;&lt;br/&gt;&lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/08_rte.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/08_rte.jpg' class='alignnone size-full wp-image-1086'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.kevinroth.com/rte/'&gt;Cross-Browser Rich  Text Editor (RTE)&lt;/a&gt; | &lt;a href='http://www.kevinroth.com/rte/demo.htm'&gt;Demo&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;9. YUI Library Rich  Text Editor&lt;/h2&gt; &lt;p&gt;The &lt;em&gt;YUI Library Rich  Text Editor&lt;/em&gt; is a UI control that’s part of the &lt;a href='http://developer.yahoo.com/yui/' title='The Yahoo! User Interface Library (YUI) home page.'&gt;YUI Library&lt;/a&gt;. It’s a great solution for those already using YUI and individuals that want to save some server resources (since you can serve it &lt;a href='http://developer.yahoo.com/yui/articles/hosting/' title='Serving YUI Files from Yahoo! Servers'&gt;directly from the Yahoo! servers&lt;/a&gt;).  The YUI Library Rich Text Editor also has excellent &lt;a href='http://developer.yahoo.com/yui/editor/#mobile' title='Rich Text Editor - mobile device support section.'&gt;mobile  device support&lt;/a&gt;, making it a great web-accessible rich-text editing  solution.&lt;a href='http://developer.yahoo.com/yui/editor/'&gt;&lt;br/&gt;&lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/09_yui_library_rich_text_editor.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/09_yui_library_rich_text_editor.jpg' class='alignnone size-full wp-image-1087'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://developer.yahoo.com/yui/editor/'&gt;Yahoo! UI  Library: Rich Text Editor&lt;/a&gt; | &lt;a href='http://developer.yahoo.com/yui/examples/editor/index.html'&gt;Demo&lt;/a&gt; | &lt;a href='http://sourceforge.net/project/downloading.php?group_id=165715&amp;amp;filename=yui_2.6.0.zip'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;10. FreeTextBox&lt;/h2&gt; &lt;p&gt;Web professionals using the .NET framework that want to add editing capabilities to their web pages and web applications should check out &lt;em&gt;FreeTextBox&lt;/em&gt;: a robust, fully-featured, and extremely popular rich-text editor for ASP.NET. It has a built-in image gallery, a helpful JavaScript API for customization, and a full list of editing controls for constructing tables, ordered/unordered lists, and even spellchecking (using the IE spellchecking engine).&lt;/p&gt; &lt;p&gt;&lt;a href='http://freetextbox.com/'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/10_freetextbox.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/10_freetextbox.jpg' class='alignnone size-full wp-image-1088'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://freetextbox.com/'&gt;FreeTextBox&lt;/a&gt; | &lt;a href='http://freetextbox.com/demos/'&gt;Demo&lt;/a&gt; | &lt;a href='http://freetextbox.com/download/'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;11. Damn Small Rich Text  Editor&lt;/h2&gt; &lt;p&gt;&lt;em&gt;Damn Small Rich Text  Editor&lt;/em&gt; (DSRTE) is a lightweight, free rich-text editor built on top of the jQuery library and a PHP backend. It’s plugin-enabled (meaning it’s highly-extensible), has image-uploading capabilities (using Ajax for responsive user interaction), and an HTML cleanup feature to tidy up messy markup.&lt;/p&gt; &lt;p&gt;&lt;a href='http://avidansoft.com/dsrte/'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/11_damn_small_rich_text_editor.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/11_damn_small_rich_text_editor.jpg' class='alignnone size-full wp-image-1089'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://avidansoft.com/dsrte/'&gt;Damn Small Rich Text  Editor&lt;/a&gt; | &lt;a href='http://avidansoft.com/scripts'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;12. Silverlight  Rich Text Editor&lt;/h2&gt; &lt;p&gt;&lt;em&gt;Silverlight rich text  editor&lt;/em&gt; is the first rich-text editor for &lt;a href='http://silverlight.net/' title='The Official Microsoft Silverlight Site'&gt;Silverlight&lt;/a&gt;. It has many useful features such as “find and replace” to quickly find specific text or to batch-replace them with something else, keyboard shortcuts support, serialization of text input for security, and much more. Note that the original creator has stopped further development (so cross your fingers someone picks up his project).&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.codeplex.com/richtextedit'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/12_silverlight_wysyg.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/12_silverlight_wysyg.jpg' class='alignnone size-full wp-image-1090'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.codeplex.com/richtextedit'&gt;Silverlight  rich text editor&lt;/a&gt; | &lt;a href='http://michaelsync.net/2008/05/04/silverlight-rich-text-editor-demo'&gt;Demo&lt;/a&gt; | &lt;a href='http://www.codeplex.com/richtextedit/SourceControl/ListDownloadableCommits.aspx'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;13. Free Rich  Text Editor&lt;/h2&gt; &lt;p&gt;&lt;em&gt;Free Rich Text Editor&lt;/em&gt; is a free, JavaScript-based HTML rich-text editing solution released under the &lt;a href='http://creativecommons.org/licenses/by/2.5/'&gt;Creative Commons Attribution  2.5 Generic&lt;/a&gt; license. The interface is reminiscent of Microsoft Word 2003’s interface, so users of this desktop application will find it quite familiar. It has everything you’d expect from a robust rich-text editor, as well as a code view to preview and edit the HTML source code directly.&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.freerichtexteditor.com/about/'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/13_freerichtexteditor.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/13_freerichtexteditor.jpg' class='alignnone size-full wp-image-1091'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.freerichtexteditor.com/about/'&gt;Free Rich  Text Editor&lt;/a&gt; | &lt;a href='http://www.freerichtexteditor.com/index.php?inc=demo/index'&gt;Demo&lt;/a&gt; | &lt;a href='http://www.freerichtexteditor.com/download/'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;14. Dijit.Editor&lt;/h2&gt; &lt;p&gt;The &lt;em&gt;Dijit.Editor&lt;/em&gt; is &lt;a href='http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit-0' title='Information on Dijit, The Dojo Widget Library.'&gt;Dijit&lt;/a&gt;’s (&lt;a href='http://dojotoolkit.org/' title='Home page of The Dojo Toolkit.'&gt;Dojo&lt;/a&gt;’s widget library) fully-featured rich-text editor. Built on top of The Dojo Toolkit (a popular JavaScript library/framework); it’s an excellent solution for those already using the Dojo Toolkit.&lt;/p&gt; &lt;p&gt;&lt;a href='http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/advanced-editing-and-display/editor-rich-text'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/14_dijit_editor.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/14_dijit_editor.jpg' class='alignnone size-full wp-image-1092'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/advanced-editing-and-display/editor-rich-text'&gt;Dijit.Editor&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;15. WYMeditor&lt;/h2&gt; &lt;p&gt;&lt;em&gt;WYMeditor&lt;/em&gt; is a  web-based HTML editor that emphasizes the use of standards-compliant markup. It  was developed to output compliant &lt;a href='http://www.w3.org/TR/REC-html40/sgml/dtd.html' title='HTML 4 Document Type Definition'&gt;HTML 4.01 Strict Doctype&lt;/a&gt; HTML, so  it’s the perfect solution for the standards-aware developer.&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.wymeditor.org/'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/15_wymleditor.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/15_wymleditor.jpg' class='alignnone size-full wp-image-1093'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.wymeditor.org/'&gt;WYMeditor&lt;/a&gt; | &lt;a href='http://files.wymeditor.org/wymeditor/trunk/src/examples/'&gt;Demo&lt;/a&gt; | &lt;a href='http://www.wymeditor.org/download/'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;16. Whizzywig&lt;/h2&gt; &lt;p&gt;&lt;em&gt;Whizzywig&lt;/em&gt; is a free JavaScript web-based rich-text editor. Aside from features you’d expect from a rich-text editor, Whizzywig also has a Spanish and German version, a web-safe color picker to change your text’s colors, and custom-designed UI controls.&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.unverse.net/whizzywig-cross-browser-html-editor.html'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/16_whizzywig.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/16_whizzywig.jpg' class='alignnone size-full wp-image-1094'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.unverse.net/whizzywig-cross-browser-html-editor.html'&gt;Whizzywig&lt;/a&gt; | &lt;a href='http://www.unverse.net/wysiwyg.html'&gt;Demo&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;17. openWYSIWYG&lt;/h2&gt; &lt;p&gt;&lt;em&gt;openWYSIWYG&lt;/em&gt; is a free and feature-packed web-based content editor that’s perfect for a host of content management systems. It has a very intuitive “table creation” feature to help users construct HTML tables. It also has a wide range of browser support including IE 5.5+ (Windows), Firefox 1.0+, Mozilla 1.3+ and Netscape 7+.&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.openwebware.com/'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/17_openwysiwg.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/17_openwysiwg.jpg' class='alignnone size-full wp-image-1095'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.openwebware.com/'&gt;openWYSIWYG&lt;/a&gt; | &lt;a href='http://www.openwebware.com/wysiwyg/demo.shtml'&gt;Demo&lt;/a&gt; | &lt;a href='http://www.openwebware.com/download.shtml'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;18. XStandard&lt;/h2&gt; &lt;p&gt;&lt;em&gt;XStandard&lt;/em&gt; is a  highly-standards-compliant rich-text editor. It comes in two versions: &lt;a href='http://www.xstandard.com/en/products/#lite'&gt;XStandard Lite&lt;/a&gt; – which is  completely &lt;em&gt;free&lt;/em&gt;, and &lt;a href='http://www.xstandard.com/en/products/#pro'&gt;XStandard Pro&lt;/a&gt;. XStandard  Lite has Microsoft Word text cleanup, spellchecking, and the ability to  interact with third-party applications.&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.xstandard.com/'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/18_xstandard.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/18_xstandard.jpg' class='alignnone size-full wp-image-1096'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://www.xstandard.com/'&gt;XStandard&lt;/a&gt; | &lt;a href='http://www.xstandard.com/en/downloads/?product=lite'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;19. Xinha&lt;/h2&gt; &lt;p&gt;&lt;em&gt;Xinha&lt;/em&gt; is an open  source, community-built rich-text editor released under a &lt;a href='http://xinha.webfactional.com/wiki/Licence'&gt;BSD style license&lt;/a&gt;. It’s highly-configurable, extensible, and feature-packed. Xinha emphasizes on community development, and as such, you’ll find many helpful contributors in the &lt;a href='http://www.xinha.org/punbb/'&gt;Xinha forums&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href='http://xinha.webfactional.com/'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/19_xinha.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/19_xinha.jpg' class='alignnone size-full wp-image-1097'/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href='http://xinha.webfactional.com/'&gt;Xinha&lt;/a&gt; | &lt;a href='http://xinha.webfactional.com/wiki/Examples'&gt;Demo&lt;/a&gt; | &lt;a href='http://xinha.webfactional.com/wiki/DownloadsPage'&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;20. Kupu&lt;/h2&gt; &lt;p&gt;Kupu is an open source “document-centered” client-side rich-text editor released by the international association for Open Source Content Management (OSCOM). It features easy integration into a variety of content management systems including &lt;a href='http://www.infrae.com/products/silva'&gt;Silva&lt;/a&gt; and &lt;a href='http://plone.org/'&gt;Plone&lt;/a&gt;, easy customization and extension, and Ajax saving for an  uninterrupted user experience.&lt;/p&gt; &lt;p&gt;&lt;a href='http://kupu.oscom.org/'&gt; &lt;/a&gt;&lt;a href='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/20_kupu_editor.jpg'&gt;&lt;img width='615' height='315' alt='' src='http://www.webdesignerdepot.com/wp-content/uploads/2008/11/20_kupu_editor.jpg' class='alignnone size-full wp-image-1098'/&gt;&lt;/a&gt;&lt;/p&gt;   &lt;p&gt;&lt;a href='http://kupu.oscom.org/'&gt;Kupu&lt;/a&gt; | &lt;a href='http://kupu.oscom.org/demo/'&gt;Demo&lt;/a&gt; | &lt;a href='http://kupu.oscom.org/download/'&gt;Download&lt;/a&gt;&lt;em/&gt;&lt;/p&gt;Technorati Tags: &lt;a rel='tag' href='http://technorati.com/tag/Html%20Text%20Editors' class='performancingtags'&gt;Html Text Editors&lt;/a&gt;, &lt;a rel='tag' href='http://technorati.com/tag/Rich%20Text%20Editors' class='performancingtags'&gt;Rich Text Editors&lt;/a&gt;, &lt;a rel='tag' href='http://technorati.com/tag/WYSIWYG' class='performancingtags'&gt;WYSIWYG&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/682979582715341480-5173712033372338755?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/5173712033372338755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=5173712033372338755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5173712033372338755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/5173712033372338755'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2008/12/selecting-block-of-text_04.html' title='Selecting a Block of text'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-4597993378592717179</id><published>2008-12-04T11:39:00.000+11:00</published><updated>2008-12-04T11:45:35.267+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><title type='text'>Selecting a Block of text</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;If you are &lt;b&gt;COPY &amp;amp; PASTE&lt;/b&gt;, the blog &lt;a href='http://blogs.msdn.com/trobbins/archive/2008/12/01/selecting-a-block-of-text.aspx'&gt;here &lt;/a&gt;is showing you a very cool trick to give you more power in term of &lt;b&gt;COPY &amp;amp; PASTE&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;Below is a brief content from the &lt;a href='http://blogs.msdn.com/trobbins/archive/2008/12/01/selecting-a-block-of-text.aspx'&gt;original post&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt; 		 &lt;div class='postsub'&gt;&lt;style&gt;  &lt;/style&gt;  &lt;div class='Section1'&gt; &lt;p class='MsoNormal'&gt;By default normal text selection is line by line. For example it’s not possible to select just the items to the right of the equals sign. &lt;/p&gt; &lt;p class='MsoNormal'&gt;&lt;img width='341' height='200' mce_src='http://www.thomscontent.com/posts2/block/image001.jpg' src='http://www.thomscontent.com/posts2/block/image001.jpg' id='Picture 1'/&gt;&lt;/p&gt; &lt;p mce_keep='true' class='MsoNormal'&gt; &lt;/p&gt; &lt;p class='MsoNormal'&gt;&lt;a name='around_this' title='around_this' class=''/&gt;However, Visual Studio does offer this ability using block selection. Block selection is sued to select text in a block as opposed to line by line. Essentially allowing you to select text regardless of what line you are on. For example, select the &amp;lt;ALT&amp;gt; key while selecting text to do the following. &lt;/p&gt; &lt;p class='MsoNormal'&gt;&lt;img width='260' height='195' mce_src='http://www.thomscontent.com/posts2/block/image002.jpg' src='http://www.thomscontent.com/posts2/block/image002.jpg' id='Picture 4'/&gt;&lt;/p&gt; &lt;p class='MsoNormal'&gt;&lt;a name='text_in' title='text_in' class=''/&gt;Block selection can be used with both the keyboard and mouse. When using the keyboard hold down the &amp;lt;ALT&amp;gt; + &amp;lt;SHIFT&amp;gt; and use the arrow keys to perform the block selection. &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;Technorati Tags: &lt;a rel='tag' href='http://technorati.com/tag/Tricks' class='performancingtags'&gt;Tricks&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/682979582715341480-4597993378592717179?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/4597993378592717179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=4597993378592717179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/4597993378592717179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/4597993378592717179'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2008/12/selecting-block-of-text.html' title='Selecting a Block of text'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-682979582715341480.post-4901962859480706357</id><published>2008-12-03T13:31:00.001+11:00</published><updated>2009-06-17T12:13:20.485+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight Toolkit: Label</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Hi, I have found the awesome article from &lt;b&gt;Justin-Josef&lt;br /&gt;Angel&lt;/b&gt; about &lt;b&gt;LABEL &lt;/b&gt;the new silverlight control.&lt;br /&gt;I guess that I&lt;br /&gt;could post it into my blog for my own reference and might as well any&lt;br /&gt;one who has been reading my blogs by any chance.&lt;br /&gt;&lt;br /&gt;Click here to see the&lt;br /&gt;original post from &lt;b&gt;Justin-Josef Angel&lt;/b&gt;.&lt;br /&gt;Thanks &lt;b&gt;Justin&lt;/b&gt;&lt;br /&gt;for an awesome article :)&lt;p&gt;&lt;strong&gt;Setup&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;1. Create a new project. &lt;/p&gt;      &lt;p&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_2DFFEF24.png" alt="image" border="0" height="334" width="508" /&gt; &lt;/p&gt;      &lt;p&gt; &lt;/p&gt;      &lt;p&gt;2, Add a reference to the Silverlight Controls assembly (Microsoft.Windows.Controls.dll) which can be downloaded at &lt;a href="http://codeplex.com/Silverlight"&gt;http://codeplex.com/Silverlight&lt;/a&gt;. &lt;/p&gt;      &lt;p&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_5C29C511.png" alt="image" border="0" height="439" width="297" /&gt;   &lt;a href="http://silverlight.net/blogs/justinangel/image_4B621A63.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_480082BB.png" alt="image" style="display: inline;" title="image" border="0" height="431" width="571" /&gt;&lt;/a&gt; &lt;/p&gt;      &lt;p&gt; &lt;/p&gt;      &lt;p&gt;3. Look under "Custom Controls" In the Blend Asset Library. &lt;/p&gt;      &lt;p&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_00CAB6BC.png" alt="image" border="0" height="524" width="655" /&gt; &lt;/p&gt;      &lt;p&gt; &lt;/p&gt;      &lt;p&gt;4. Add a Label to the Page. &lt;/p&gt;      &lt;p&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_04C4DEC1.png" alt="image" border="0" height="180" width="607" /&gt; &lt;/p&gt;      &lt;p&gt;And here's the XAML we got:&lt;/p&gt;      &lt;div    style="background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:courier new;font-size:12pt;color:black;"&gt;       &lt;div    style="background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:courier new;font-size:12pt;color:black;"&gt;         &lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;UserControl&lt;/span&gt;&lt;/p&gt;          &lt;p style="margin: 0px;"&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;/span&gt;&lt;/p&gt;          &lt;p style="margin: 0px;"&gt;&lt;span style="color:red;"&gt;    xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;/p&gt;          &lt;p style="margin: 0px;"&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;="SilverlightControlsNovember2008.Page"&lt;/span&gt;&lt;/p&gt;          &lt;p style="margin: 0px;"&gt;&lt;span style="color:red;"&gt;    Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="640"&lt;/span&gt;&lt;span style="color:red;"&gt; Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="480"&lt;/span&gt; &lt;/p&gt;          &lt;p style="margin: 0px;"&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;slctls&lt;/span&gt;&lt;span style="color:blue;"&gt;="clr-namespace:Microsoft.Windows.Controls;assembly=Microsoft.Windows.Controls"&amp;gt;&lt;/span&gt;&lt;/p&gt;          &lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&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;/span&gt;&lt;/p&gt;          &lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;slctls&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Label&lt;/span&gt;&lt;span style="color:red;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;="Left"&lt;/span&gt;&lt;span style="color:red;"&gt; Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;="98,179,0,220"&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="148"&lt;/span&gt;&lt;span style="color:red;"&gt; Content&lt;/span&gt;&lt;span style="color:blue;"&gt;="Label"/&amp;gt;&lt;/span&gt;&lt;/p&gt;          &lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;          &lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;       &lt;/div&gt;        &lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;     &lt;/div&gt;      &lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Setting the content for Label&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;One way of editing a Label's content is double clicking on it.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_31D9CB8F.png" alt="image" border="0" height="397" width="569" /&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_2975F638.png" alt="image" style="display: block; float: none; margin-left: auto; margin-right: auto;" border="0" height="109" width="156" /&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And here's the XAML we just got: &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;       &lt;/strong&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-size: 12pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; HorizontalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Left"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="98,179,0,220"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="148"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;strong&gt;Content&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&lt;strong&gt;="Hello World!&lt;/strong&gt;"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;   &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;div style="font-family: arial;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Another way is editing the &lt;strong&gt;Content&lt;/strong&gt; property directly through the Blend Data pane:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;a href="http://silverlight.net/blogs/justinangel/image_21EA86CB.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_1C9BA01A.png" alt="image" style="border-width: 0px; display: inline;" title="image" border="0" height="368" width="571" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;   &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;        &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Changing the Label’s Border&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We can set the &lt;strong&gt;BorderBrush&lt;/strong&gt; &amp;amp; &lt;strong&gt;BorderThinckness&lt;/strong&gt; properties for Label in order to change it’s border.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_1B57073B.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_171D09A9.png" alt="image" style="display: inline;" title="image" border="0" height="516" width="296" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Let’s start by changing the &lt;strong&gt;BorderBrush&lt;/strong&gt; to a SoliderColorBrush with a light grey color. Click on BorderBrush and select SolidColorBrush.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_67EB1E11.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_072DC4E5.png" alt="image" style="display: inline;" title="image" border="0" height="173" width="290" /&gt;&lt;/a&gt; --&amp;gt; &lt;a href="http://silverlight.net/blogs/justinangel/image_545DBE70.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_5EAEE2D0.png" alt="image" style="display: inline;" title="image" border="0" height="173" width="281" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Than we’ll select a light gray color. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_5DD67CE6.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_237B0705.png" alt="image" style="display: inline;" title="image" border="0" height="352" width="282" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Next, we’ll change the &lt;strong&gt;BorderThickness&lt;/strong&gt; to 1 on all sides. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_5B4D4B28.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_33A6CEFE.png" alt="image" style="display: inline;" title="image" border="0" height="128" width="281" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And we can see our Label has a nice subtle light grey border around itself:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_67DAF844.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_527D42DC.png" alt="image" style="display: inline;" title="image" border="0" height="76" width="123" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Here’s the XAML we just generated:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-size: 12pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; HorizontalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Left"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="98,179,0,0"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="79"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Content&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="I am a Label!"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; VerticalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Top"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="20"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;strong&gt;BorderBrush&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="#FFC6C4C4"&lt;/span&gt;&lt;span style="color:red;"&gt; BorderThickness&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="1,1,1,1"&lt;/strong&gt;/&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;   &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Changing Label’s Background and Foreground&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Let’s do what the title says! &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;In&lt;br /&gt;case you’re wondering TextBlock does not have a Background. So&lt;br /&gt;it’s a bit different than what we would have normally done with&lt;br /&gt;TextBlock. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’ll select &lt;strong&gt;Background&lt;/strong&gt; and set it to SolidColorBrush with the color Black. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_52110FE7.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_7153B6BA.png" alt="image" style="display: inline;" title="image" border="0" height="170" width="282" /&gt;&lt;/a&gt; --&amp;gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_10965D8E.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_2FD90461.png" alt="image" style="display: inline;" title="image" border="0" height="167" width="264" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_43F220EA.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_62C894C8.png" alt="image" style="display: inline;" title="image" border="0" height="352" width="279" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Next we’ll select the &lt;strong&gt;Foreground&lt;/strong&gt; property and set it to SolidColorBrush with the color white. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_6CAD8633.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_675E9F82.png" alt="image" style="display: inline;" title="image" border="0" height="349" width="271" /&gt;&lt;/a&gt; --&amp;gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_0A3F6133.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_6FFEF80E.png" alt="image" style="display: inline;" title="image" border="0" height="344" width="270" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;here’s our Label:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_3CC2BEA5.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_3C568BB0.png" alt="image" style="display: inline;" title="image" border="0" height="40" width="99" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And the xaml we generated:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-size: 12pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; HorizontalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Left"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="98,179,0,0"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="79"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Content&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="I am a Label!"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; VerticalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Top"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="20"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; BorderBrush&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FFC6C4C4"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; BorderThickness&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="1,1,1,1"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;strong&gt;Background&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="#FF000000"&lt;/span&gt;&lt;span style="color:red;"&gt; Foreground&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FFF5F3F3"/&lt;/strong&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;   &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Changing the Label’s Template&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Let’s&lt;br /&gt;say we're unhappy with the default border for out Text inside the&lt;br /&gt;Label. Through the power of templating we can change it.&lt;br /&gt;So let’s create a RadialLabelTemplate. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’ll start of by adding a new label to form. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_02D37BB9.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_4D5AB993.png" alt="image" style="display: inline;" title="image" border="0" height="98" width="153" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Than Right Click on it, select “Edit Control Parts(Template) –&amp;gt; &lt;strong&gt;Create Empty…&lt;/strong&gt;”. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_5AC0CC99.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_52C92A37.png" alt="image" style="display: inline;" title="image" border="0" height="419" width="354" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’ll change the Resource name to &lt;em&gt;RadialPanelTemplate&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_63CD581A.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_10E244E9.png" alt="image" style="display: inline;" title="image" border="0" height="236" width="403" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And here’s the drawing area of the new template:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_1DDC24FA.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_7C7C7F5D.png" alt="image" style="display: inline;" title="image" border="0" height="377" width="620" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Let’s add the Ellipse for the radial background. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_4221097C.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_776A1BE1.png" alt="image" style="display: inline;" title="image" border="0" height="542" width="640" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p align="center"&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_15D45CCB.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_1C1B3359.png" alt="image" style="display: inline;" title="image" border="0" height="96" width="226" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Now&lt;br /&gt;we want to add a TextBlock to display the content of the Label. Before&lt;br /&gt;we can do that, we’ll need to add a container that will contain&lt;br /&gt;both our Ellipse and our TextBlock. We’ll Group our Ellipse into&lt;br /&gt;a Canvas.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_5F8334BB.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_53151192.png" alt="image" style="display: inline;" title="image" border="0" height="400" width="574" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_3CDEF640.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_5C219D13.png" alt="image" style="display: inline;" title="image" border="0" height="176" width="258" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Finally we can add our TextBlock that has the Label Content. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_2951969F.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_55FA5078.png" alt="image" style="display: inline;" title="image" border="0" height="325" width="608" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p align="center"&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_6DB187DE.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_0CF42EB2.png" alt="image" style="display: inline;" title="image" border="0" height="139" width="285" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’ll&lt;br /&gt;use TemplateBinding to connect this TextBlock.Text to the Label.Content&lt;br /&gt;property. Click the “Advanced Options” next to the Text&lt;br /&gt;property.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_4532A5CA.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_4B0D4963.png" alt="image" style="display: inline;" title="image" border="0" height="288" width="579" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Select “Custom Expression”.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_22FA9A44.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_500F8712.png" alt="image" style="display: inline;" title="image" border="0" height="328" width="280" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And put in the correct TemplateBinding. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_6832F16D.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_6E79C7FB.png" alt="image" style="display: inline;" title="image" border="0" height="117" width="303" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;To preview our form we can go back to our form.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_31E1C95E.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_70671704.png" alt="image" style="display: inline;" title="image" border="0" height="459" width="468" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And here it is: &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_15F09466.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_1C376AF4.png" alt="image" style="display: inline;" title="image" border="0" height="180" width="303" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Now we can we add 3 more label to our page and just apply this new template to them.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_7490EEC9.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_13D3959D.png" alt="image" style="display: inline;" title="image" border="0" height="270" width="300" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’ll&lt;br /&gt;select each of our new Labels, Right click, select “Edit Control&lt;br /&gt;Parts (Template) –&amp;gt; Apply Resource –&amp;gt; Radial Label&lt;br /&gt;Template”.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;a href="http://silverlight.net/blogs/justinangel/image_33163C70.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_51ECB04E.png" alt="image" style="display: inline;" title="image" border="0" height="401" width="535" /&gt;&lt;/a&gt; -&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And here’s our new form:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_70C3242C.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_2D97A5FF.png" alt="image" style="display: inline;" title="image" border="0" height="435" width="659" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Here’s the XAML we just generated for the RadialLabelTemplate:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-size: 12pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;UserControl.Resources&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span&gt;&lt;strong&gt;       &lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color:red;"&gt; x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span&gt;Key="RadialLabelTemplate"&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:red;"&gt; TargetType&lt;/span&gt;&lt;span style="color:blue;"&gt;="slctls:Label"&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Canvas&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Auto"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Auto"&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;                &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Ellipse&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="35"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="125"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Fill&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FFFFFFFF"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stroke&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FF000000"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;                &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;TextBlock&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="20"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="82.667"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Canvas.Left&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="22.667"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Canvas.Top&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="7.333"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;strong&gt;Text&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;TemplateBinding&lt;/span&gt;&lt;span style="color:red;"&gt; Content&lt;/span&gt;&lt;span style="color:blue;"&gt;}"&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:red;"&gt; TextWrapping&lt;/span&gt;&lt;span style="color:blue;"&gt;="Wrap"/&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;/&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Canvas&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;        &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;/&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;ControlTemplate&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;/&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;UserControl.Resources&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;   &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And the Xaml for our labels:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;label height="34" verticalalignment="Bottom" horizontalalignment="Left" width="124" content="Radial Label!" margin="98.333,0,0,204.333" template="{StaticResource RadialLabelTemplate}"&gt;&lt;/label&gt;&lt;label fontsize="10" height="19.333" verticalalignment="Bottom" horizontalalignment="Left" width="137.666" content="Radial  == good" margin="84.667,0,0,160.667" template="{StaticResource RadialLabelTemplate}"&gt;&lt;/label&gt;&lt;label height="29.333" verticalalignment="Bottom" horizontalalignment="Left" width="144" content="I R Radial" margin="84.667,0,0,115.167" template="{StaticResource RadialLabelTemplate}"&gt;&lt;/label&gt;&lt;label height="28.667" verticalalignment="Bottom" horizontalalignment="Left" width="130.334" content="U R Radial" margin="84.667,0,0,76.833" template="{StaticResource RadialLabelTemplate}"&gt;&lt;/label&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-size: 12pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;strong&gt;Template&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; RadialLabelTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;}" &lt;/span&gt;&lt;/strong&gt;&lt;span style="color:red;"&gt;Content&lt;/span&gt;&lt;span style="color:blue;"&gt;="Radial Label!"&lt;/span&gt;&lt;span style="color:red;"&gt; Width&lt;/span&gt;&lt;span style="color:blue;"&gt;="124"&lt;/span&gt;&lt;span style="color:red;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt; Height&lt;/span&gt;&lt;span style="color:blue;"&gt;="34"/&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label &lt;span style="color:red;"&gt;&lt;strong&gt;Template&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; RadialLabelTemplate&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;}"&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="19.333"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Content&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Radial  == good"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; FontSize&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="10"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label &lt;span style="color:red;"&gt;&lt;strong&gt;Template&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; RadialLabelTemplate&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;}"&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="29.333" &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt;Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="144"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Content&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="I R Radial"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label &lt;span style="color:red;"&gt;&lt;strong&gt;Template&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; RadialLabelTemplate&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;}"&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="28.667"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="130.334"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Content&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="U R Radial"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;   &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Editing a Label’s ContentTemplate&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;                                                                                                                                                                    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Templates&lt;br /&gt;are used with TemplateBindings that emanate for general Control&lt;br /&gt;properties. But we might do bind our Label to CLR property from any&lt;br /&gt;Data Source. like, Cows.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p align="center"&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_79EF39A0.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_501B98E0.png" alt="image" style="display: inline;" title="image" border="0" height="318" width="451" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’ll create (in Visual studio) our Cow class that has Age and Name. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-size: 12pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Cow&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    {&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; Cow(&lt;span style="color:blue;"&gt;string&lt;/span&gt; Name, &lt;span style="color:blue;"&gt;int&lt;/span&gt; Age)&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        {&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;            Name = Name;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;            Age = Age;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        }&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;;  }&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; Age { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;;  }&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    }&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;   &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;A very basic CLR class that has 2 properties: a numeric age and a string that represents the age of the cow. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Now let’s use this class and create a cow we’ll DataBind our label to.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-size: 12pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;partial&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Page&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;UserControl&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    {&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; Page()&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        {&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;            &lt;span style="color:green;"&gt;// Required to initialize variables&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;            InitializeComponent();&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;            &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Loaded += &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;RoutedEventHandler&lt;/span&gt;(Page_Loaded);&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        }&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        &lt;span style="color:blue;"&gt;void&lt;/span&gt; Page_Loaded(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: rgb(43, 145, 175);"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        {&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;            &lt;strong&gt;myLabel.DataContext = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Cow&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Betsy"&lt;/span&gt;, 3);&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        }&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    }&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;   &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Eventually I’d like for us to see a Label that looks like this:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_5917FE94.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_667E119A.png" alt="image" style="display: inline;" title="image" border="0" height="82" width="216" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’d like to change the thickness of the head line based on Cow.Age and change the text based on Cow.Name. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Let’s start by adding a new Label to the page and changing it’s name to myLabel.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_0CDFF4E6.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_6BEC823E.png" alt="image" style="display: inline;" title="image" border="0" height="160" width="541" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’d like to edit the &lt;strong&gt;ContentTemplate&lt;/strong&gt;&lt;br /&gt;of this label, so we’ll Right Click on the label select&lt;br /&gt;“Edit Other Templates –&amp;gt; Edit Generated Content&lt;br /&gt;(ContentTemplate) –&amp;gt; Create Empty…”&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_6B141C54.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_69CF8375.png" alt="image" style="display: inline;" title="image" border="0" height="470" width="597" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;                    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’ll call our new ContentTemplate – CowContentTemplate.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_73B474E0.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_72DC0EF6.png" alt="image" style="display: inline;" title="image" border="0" height="243" width="396" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;As always we start off with an empty ContentTemplate.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_7203A90C.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_3AF9A506.png" alt="image" style="display: inline;" title="image" border="0" height="498" width="598" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;I’ll spare you my third grade drawing skills and we’ll magiclly add some lines that are our cow. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_276C4565.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_27A8C89A.png" alt="image" style="display: inline;" title="image" border="0" height="493" width="706" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Truly a masterpiece. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p align="center"&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_20A91615.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_59439A55.png" alt="Single cow" style="display: block; float: none; margin-left: auto; margin-right: auto;" title="Single cow" border="0" height="157" width="240" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt;If you squint really hard, they look alike&lt;/em&gt;&lt;/strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Next we’d like to add the appropriate bindings. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’ll select the TextBlock in the middle of the cow. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_4D7E2D56.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_7373DDAC.png" alt="image" style="display: inline;" title="image" border="0" height="290" width="577" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Click “Advanced Options –&amp;gt; Custom Expression”.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_6B7C3B4A.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_71C311D8.png" alt="image" style="display: inline;" title="image" border="0" height="138" width="273" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_7809E866.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_7731827C.png" alt="image" style="display: inline;" title="image" border="0" height="317" width="282" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And add a Binding to the Cow Name. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_76591C92.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_4EB2A068.png" alt="image" style="display: inline;" title="image" border="0" height="108" width="303" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Next, we’ll select the Cow’s head.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_472730FB.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_2633BE54.png" alt="image" style="display: inline;" title="image" border="0" height="219" width="558" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And set a &lt;strong&gt;StrokeThickness&lt;/strong&gt; to a Custom expression that’s bound to the Cow’s age. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_332D9E65.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_2482F280.png" alt="image" style="display: inline;" title="image" border="0" height="134" width="300" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;One last thing we have to do before we can run the sample is set the Cow’s &lt;strong&gt;Content&lt;/strong&gt; to it’s &lt;strong&gt;DataContext&lt;/strong&gt;. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_15D8469B.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_28409750.png" alt="image" style="display: inline;" title="image" border="0" height="188" width="800" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’ll ad a Custom expression to the &lt;strong&gt;Content&lt;/strong&gt; property of the label. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_3727C66A.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_5D89A9B5.png" alt="image" style="display: inline;" title="image" border="0" height="113" width="294" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Finally we can run the sample.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_6EFA0A8D.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_43494091.png" alt="image" style="display: inline;" title="image" border="0" height="82" width="216" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Let’s add a few more Labels with that &lt;strong&gt;ContentTemplate&lt;/strong&gt; and with more Cows. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-size: 12pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; &lt;span style="color:blue;"&gt;partial&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Page&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;UserControl&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; Page()&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    {&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        &lt;span style="color:green;"&gt;// Required to initialize variables&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        InitializeComponent();&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Loaded += &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;RoutedEventHandler&lt;/span&gt;(Page_Loaded);&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    }&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    &lt;span style="color:blue;"&gt;void&lt;/span&gt; Page_Loaded(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: rgb(43, 145, 175);"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    {&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        myLabel.DataContext = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Cow&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Betsy"&lt;/span&gt;, 3);&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        myCowLabel1.DataContext = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Cow&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Martha"&lt;/span&gt;, 1);&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        myCowLabel2.DataContext = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Cow&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Flossy"&lt;/span&gt;, 5);&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;        myCowLabel3.DataContext = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Cow&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Hoss"&lt;/span&gt;, 2);&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;    }&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;   &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;We’ll make sure to add those label to our page and re-run this sample.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/justinangel/image_628BE764.png"&gt;&lt;img src="http://silverlight.net/blogs/justinangel/image_thumb_7AAF51BF.png" alt="image" style="display: inline;" title="image" border="0" height="297" width="215" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And our Cow Herd is now complete. &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;Here’s our DataTemplate XML.&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-size: 12pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;UserControl.Resources&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;DataTemplate&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;Key&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="CowContentTemplate"&lt;/strong&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;        &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Grid&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;TextBlock&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="21.75,9.833,27.25,9.167"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; TextWrapping&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Wrap"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; FontSize&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="8"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;strong&gt;Text&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;=Name}"&lt;/strong&gt;/&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Ellipse&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; HorizontalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Right"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="0,2.167,4.583,13.833"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="15.084"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Fill&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FFFFFFFF"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stroke&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FF000000"&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:red;"&gt; StrokeThickness&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Binding&lt;/span&gt;&lt;span style="color:red;"&gt; Path&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;=Age}"&lt;/strong&gt;/&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Rectangle&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="18.75,8,25.25,8"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Fill&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FFFFFFFF"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stroke&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FF000000"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; RadiusX&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="1"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; RadiusY&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="1"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Path&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="2.334"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; HorizontalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Right"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="0,12.25,19.417,0"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; VerticalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Top"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="6.667"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Fill&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FFFFFFFF"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stretch&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Fill"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stroke&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FF000000"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Data&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="M65.166664,9.833333 L59.5,11.166667"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Path&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="6"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; HorizontalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Right"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="0,0,23.75,2.667"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; VerticalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Bottom"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="3.667"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Fill&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FFFFFFFF"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stretch&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Fill"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stroke&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FF000000"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Data&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="M58.833332,19.666666 L61.5,24.666666"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; d&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt;LayoutOverrides&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Width"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Path&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="4.5"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; HorizontalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Left"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="27.585,0,0,3.833"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; VerticalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Bottom"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="2.166"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Fill&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FFFFFFFF"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stretch&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Fill"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stroke&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FF000000"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Data&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="M35.333332,19.666666 L34.166668,23.166666"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Path&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="4.834"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; HorizontalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Right"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="0,0,33.751,4.333"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; VerticalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Bottom"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="1.833"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Fill&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FFFFFFFF"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stretch&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Fill"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stroke&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FF000000"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Data&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="M51.833332,22.666666 L51,18.833334"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; d&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt;LayoutOverrides&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Width"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Path&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="5"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; HorizontalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Left"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="18.917,0,0,4.333"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; VerticalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Bottom"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Width&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="4"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Fill&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FFFFFFFF"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stretch&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Fill"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Stroke&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="#FF000000"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Data&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="M27.333334,19.35417 L24.833334,23.187502"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;        &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;/&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Grid&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;/&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;DataTemplate&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;            &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;     &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;          &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;p&gt;&lt;strong&gt;And our Cow labels:&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;    &lt;/strong&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-size: 12pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;strong&gt;     &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="32.5"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="311.5,56.75,235.5,0"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; VerticalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Top"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; x&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="myLabel"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;strong&gt;ContentTemplate&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; CowContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;}"&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:red;"&gt; &lt;strong&gt;Content&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Binding&lt;/span&gt;&lt;span style="color:blue;"&gt;}"&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:red;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="32.5"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="311,129.5,236,0"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; VerticalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Top"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; x&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="myCowLabel1"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;strong&gt;ContentTemplate&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; CowContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;}"&lt;/span&gt;&lt;span style="color:red;"&gt; Content&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Binding&lt;/span&gt;&lt;span style="color:blue;"&gt;}"&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:red;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="32.5"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="311,198.75,236,0"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; VerticalAlignment&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="Top"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; x&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="myCowLabel2"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;strong&gt;ContentTemplate&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; CowContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;}"&lt;/span&gt;&lt;span style="color:red;"&gt; Content&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Binding&lt;/span&gt;&lt;span style="color:blue;"&gt;}"&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:red;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;      &lt;/strong&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;slctls&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;&lt;strong&gt;Label&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Height&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="32.5"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; Margin&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="311.5,0,235.5,184.5"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; x&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;="myCowLabel3"&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt; &lt;strong&gt;ContentTemplate&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;StaticResource&lt;/span&gt;&lt;span style="color:red;"&gt; CowContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;}"&lt;/span&gt;&lt;span style="color:red;"&gt; Content&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Binding&lt;/span&gt;&lt;span style="color:blue;"&gt;}"&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:red;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;   &lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/682979582715341480-4901962859480706357?l=brandontruong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brandontruong.blogspot.com/feeds/4901962859480706357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=682979582715341480&amp;postID=4901962859480706357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/4901962859480706357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/682979582715341480/posts/default/4901962859480706357'/><link rel='alternate' type='text/html' href='http://brandontruong.blogspot.com/2008/12/silverlight-toolkit-label.html' title='Silverlight Toolkit: Label'/><author><name>Brandon Truong</name><uri>http://www.blogger.com/profile/02493645094656636180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9GiyZFWb_Ys/S8JmJf5BZTI/AAAAAAAADGo/rbjBdyBr6KI/S220/me.jpg'/></author><thr:total>0</thr:total></entry></feed>
