<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://interactiveasp.net:443/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Nate's Stuff : WPF</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx</link><description>Tags: WPF</description><dc:language>en</dc:language><generator>CommunityServer 2008 (Build: 30417.1769)</generator><item><title>Converting a Vector PDF image to a XAML Drawing Brush</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2013/10/02/converting-a-vector-pdf-image-to-a-xaml-drawing-brush.aspx</link><pubDate>Wed, 02 Oct 2013 21:18:44 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:6754</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=6754</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=6754</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2013/10/02/converting-a-vector-pdf-image-to-a-xaml-drawing-brush.aspx#comments</comments><description>&lt;p&gt;&lt;img style="float: left; display: inline" align="left" src="data:image/jpeg;base64,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" /&gt;&lt;/p&gt;  &lt;p&gt;A couple of weeks ago I listened to a presentation by Scott Hanselman about &lt;a href="http://www.webstock.org.nz/talks/its-not-what-you-read-its-what-you-ignore/" target="_blank"&gt;scaling your life&lt;/a&gt;. One of the many great pieces of advice is to blog about something rather than email an answer. &lt;/p&gt;  &lt;p&gt;So this afternoon my good friend Alex asked me how we used to convert Vector PDF images to XAML Drawing Brushes so they can be applied to objects as a background, for instance. The vector part of that sentence is important because any rasterized portions of the PDF will be excluded in this process.&lt;/p&gt;  &lt;p&gt;Well, there really isn’t a lot to it, so here are the instructions:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open up your vector image in &lt;a href="https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;cad=rja&amp;amp;ved=0CEUQjBAwAQ&amp;amp;url=http%3A%2F%2Finkscape.org%2Fdownload%2F&amp;amp;ei=FYRMUuqLJqaZiQLhyIG4DA&amp;amp;usg=AFQjCNFNzpOzyMejYFgKdF8HmL2UaFuGCg&amp;amp;sig2=rKZ6ZPB1yNSTitsHMNes9g&amp;amp;bvm=bv.53537100,d.cGE" target="_blank"&gt;Inkscape&lt;/a&gt;. Inkscape can open a wide variety of images, including PDF.       &lt;br /&gt;&lt;a href="http://media2.interactiveasp.net/BlogImages/Converting-an-PDF-image-to-a-XAML-Visual_CB5F/image.png" target="_blank"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://media2.interactiveasp.net/BlogImages/Converting-an-PDF-image-to-a-XAML-Visual_CB5F/image_thumb.png" width="244" height="188" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Click File –&amp;gt; Save As. Drop the Save as Type to “Microsoft XAML (*.xaml)” and save the file as XAML. Once the file is saved you can open it up in Internet Explorer to see how the conversion process went. The problem though, is that this is painting directly to a canvas and is not packaged to be used as a background.      &lt;br /&gt;&lt;a href="http://media2.interactiveasp.net/BlogImages/Converting-an-PDF-image-to-a-XAML-Visual_CB5F/image_3.png" target="_blank"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://media2.interactiveasp.net/BlogImages/Converting-an-PDF-image-to-a-XAML-Visual_CB5F/image_thumb_3.png" width="244" height="149" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Open up Microsoft Expression Blend. Create a new project. Open up the XAML for the main file and replace it with the contents from your file from step 2.      &lt;br /&gt;&lt;a href="http://media2.interactiveasp.net/BlogImages/Converting-an-PDF-image-to-a-XAML-Visual_CB5F/image_4.png" target="_blank"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://media2.interactiveasp.net/BlogImages/Converting-an-PDF-image-to-a-XAML-Visual_CB5F/image_thumb_4.png" width="244" height="177" /&gt;&lt;/a&gt;       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Select all parts of the drawing then select Tools –&amp;gt; Make Brush Resource –&amp;gt; Make Drawing Brush Resource. This will pop open a dialog that will give you some options about where to define this resource and what it should be named.      &lt;br /&gt;&lt;a href="http://media2.interactiveasp.net/BlogImages/Converting-an-PDF-image-to-a-XAML-Visual_CB5F/image_5.png" target="_blank"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://media2.interactiveasp.net/BlogImages/Converting-an-PDF-image-to-a-XAML-Visual_CB5F/image_thumb_5.png" width="244" height="128" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;So now your technically done. The contents of the Resource Dictionary now contain your new Drawing Brush Resource. To test it out clear all content from your main window except for the Window and Grid objects. Click the whitespace and open the properties inspector. Click the square dialog button for the Background and select Local Resource and the name you gave your brush. You should now be able to see your image:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://media2.interactiveasp.net/BlogImages/Converting-an-PDF-image-to-a-XAML-Visual_CB5F/image_6.png" target="_blank"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://media2.interactiveasp.net/BlogImages/Converting-an-PDF-image-to-a-XAML-Visual_CB5F/image_thumb_6.png" width="244" height="129" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The reason it is stretched is because your drawing brush will stretch to fill it’s contents. If you have a look at the XAML of the main window shows you will see the following XAML:&lt;/p&gt;    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;Background&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{DynamicResource MindfireBackground}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;That’s pretty much it! 


&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=6754" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Tools/default.aspx">Tools</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category></item><item><title>6 Things I Bet You Didn't Know About Data Binding in WPF</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2009/01/21/6-things-i-bet-you-didn-t-know-about-data-binding-in-wpf.aspx</link><pubDate>Wed, 21 Jan 2009 22:26:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:396</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>21</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=396</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=396</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2009/01/21/6-things-i-bet-you-didn-t-know-about-data-binding-in-wpf.aspx#comments</comments><description>&lt;p&gt;&lt;img height="99" width="99" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/winFX_5F00_3.jpg" align="left" alt="winFX" border="0" style="border-right: 0px; border-top: 0px; margin: 0px 10px 5px 0px; border-left: 0px; border-bottom: 0px" /&gt; I fell in love with WPF the first time I saw it in action!&amp;nbsp; WPF is a thing of pure beauty!&amp;nbsp; Anyway, from the second I saw how the data binding worked I knew that there was going to be a lot to figure out there!&amp;nbsp; It also seems as though there is no real data binding expert -- or the experts don't blog too much about it.&amp;nbsp; I created my &lt;a target="_blank" href="http://interactiveasp.net/media/p/23.aspx"&gt;XAML Cheat Sheet&lt;/a&gt; shortly after feeling like I had some kind of grasp on the concept.&amp;nbsp; It is still a great reference for basic bindings, but when you are real serious about binding you'll have to do better than that.&lt;/p&gt;
&lt;p&gt;So I have been working on a project in my spare time called SmartForms 2.0 (more on that later) and I have had to do some very difficult things using bindings.&amp;nbsp; In my previous experience with WPF I would either create a cleaver type converter and/or just give up and set the value/state of the controls in code (eww!).&amp;nbsp; This time is different and I have to make data binding work.&amp;nbsp; &lt;/p&gt;
&lt;h2&gt;Example #1&lt;/h2&gt;
&lt;p&gt;Lets say that you need to bind a bool? (nullable boolean) type to a checkbox.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox &lt;/span&gt;&lt;span style="color: red"&gt;IsChecked&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeBooleanField&lt;/span&gt;&lt;span style="color: blue"&gt;}"&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Checkbox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox_5F00_2.png"&gt;&lt;img height="68" width="178" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox_5F00_thumb.png" alt="DataBound Checkbox" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;You will notice that the checkbox is in a neither checked nor unchecked state.&amp;nbsp; Setting IsThreeState="False" doesn't help you as it is false by default. I want the checkebox to be unchecked by default but have no control over the type or the initialization of the type.&amp;nbsp; Check this out:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox &lt;/span&gt;&lt;span style="color: red"&gt;IsChecked&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeBooleanField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;              &lt;/span&gt;&lt;span style="color: red"&gt;TargetNullValue&lt;/span&gt;&lt;span style="color: blue"&gt;=false}"&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: #a31515"&gt;Checkbox&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;And now we have normal looking checkboxes!&amp;nbsp; The best part is that this method doesn't mutate our property.&amp;nbsp; This was exactly what I was looking for!&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox-Fixed_5F00_2.png"&gt;&lt;img height="66" width="164" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DataBound-Checkbox-Fixed_5F00_thumb.png" alt="DataBound Checkbox Fixed" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Example #2&lt;/h2&gt;
&lt;p&gt;The following XAML is pretty straight forward.&amp;nbsp; It is simply a text box that we expect to put a city into.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;              &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;City&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeTextField&lt;/span&gt;&lt;span style="color: blue"&gt;}" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-No-Default_5F00_2.png"&gt;&lt;img height="87" width="175" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-No-Default_5F00_thumb.png" alt="Databing Textbox No Default" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;What if the item we are attempting to data bind to is not available.&amp;nbsp; It's not going to be null, the binding will just fail.&amp;nbsp; This should work well:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;City&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeTextField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;FallbackValue&lt;/span&gt;&lt;span style="color: blue"&gt;=UNBOUND}" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-Default_5F00_2.png"&gt;&lt;img height="90" width="167" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Textbox-Default_5F00_thumb.png" alt="Databing Textbox Default" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Example #3&lt;/h2&gt;
&lt;p&gt;This is a much more common occurrence.&amp;nbsp; You have a number that you need to format in a textbox.&amp;nbsp; This example shows the decimal value with no real format at all.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Cost&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeDecimalField}" &lt;span style="color: blue"&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Produces:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Non-Formatted_5F00_2.png"&gt;&lt;img height="100" width="170" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Non-Formatted_5F00_thumb.png" alt="Databing Decimal Non Formatted" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;There are a few ways to get the format we desire.&amp;nbsp; The first example uses a static resource:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;clr&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:System;assembly=mscorlib"&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel.Resources&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;clr&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;String &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;span style="color: blue"&gt;="formatStr"&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;{0:C}&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;clr&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;String&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel.Resources&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Cost&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeDecimalField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource &lt;/span&gt;&lt;span style="color: red"&gt;formatStr&lt;/span&gt;&lt;span style="color: blue"&gt;}}" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can put the string inline but it looks really funny and for some reason the there has to be a non-whitespace character before the formatting expression which you may not want:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeDecimalField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;         &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;=Cost: {&lt;/span&gt;0&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;C&lt;/span&gt;&lt;span style="color: blue"&gt;}}" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This formats the string to look like "Cost: $1,2398.00".&amp;nbsp; You can see how that could cause lots of confusion and would be undesirable.&amp;nbsp; There is a way we can get the binding to work a little better:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;SomeDecimalField&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;={}{&lt;/span&gt;0&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;C&lt;/span&gt;&lt;span style="color: blue"&gt;}}" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OR&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="SomeDecimalField" &lt;br /&gt;              &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;="{}{0:C}" /&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The result is a nicely formatted output:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Formatted_5F00_2.png"&gt;&lt;img height="99" width="177" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Databing-Decimal-Formatted_5F00_thumb.png" alt="Databing Decimal Formatted" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Notice how the binding was applied? This is how you apply MultiBindings which is the next topic.&lt;/p&gt;
&lt;h2&gt;Example #4&lt;/h2&gt;
&lt;p&gt;What if you want the value of one or more fields to exist in a single binding?&amp;nbsp; That is where MultiBindings shine!&amp;nbsp; Check out this very easy example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;            
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;MultiBinding &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;="{}{0}, {1}"&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="LastName" /&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="FirstName" /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;MultiBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Results:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Multi-Binding_5F00_2.png"&gt;&lt;img height="99" width="196" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Multi-Binding_5F00_thumb.png" alt="Multi Binding" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Example #5&lt;/h2&gt;
&lt;p&gt;Validation can happen at the point of binding. This can be handy if the objects you are binding to have logic built in.&amp;nbsp; For example, lets say you have a property for birth date.&amp;nbsp; Obviously the person can not be born in the future!&amp;nbsp; Here is how we avoid such rotten input!&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;birthdate;
&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;BrithDate {
    &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;birthdate; }
    &lt;span style="color: blue"&gt;set &lt;/span&gt;{
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: blue"&gt;value &lt;/span&gt;&amp;gt; &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Today)
            &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ArgumentException&lt;/span&gt;(&lt;br /&gt;               &lt;span style="color: #a31515"&gt;"Person can not be born in the future!"&lt;/span&gt;);
        birthdate = &lt;span style="color: blue"&gt;value&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And the XAML:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;br /&gt;           &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;           &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Birthdate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;BrithDate&lt;/span&gt;&lt;span style="color: blue"&gt;, 
                            &lt;/span&gt;&lt;span style="color: red"&gt;Mode&lt;/span&gt;&lt;span style="color: blue"&gt;=TwoWay, 
                            &lt;/span&gt;&lt;span style="color: red"&gt;StringFormat&lt;/span&gt;&lt;span style="color: blue"&gt;=d, 
                            &lt;/span&gt;&lt;span style="color: red"&gt;NotifyOnValidationError&lt;/span&gt;&lt;span style="color: blue"&gt;=true, 
                            &lt;/span&gt;&lt;span style="color: red"&gt;ValidatesOnExceptions&lt;/span&gt;&lt;span style="color: blue"&gt;=true}" /&amp;gt;        
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-No-Error_5F00_4.png"&gt;&lt;img height="99" width="169" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-No-Error_5F00_thumb_5F00_1.png" alt="Binding No Error" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-Error_5F00_4.png"&gt;&lt;img height="103" width="169" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Binding-Error_5F00_thumb_5F00_1.png" alt="Binding Error" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The error can also be styled if required.&amp;nbsp; Shown is the default style (nothing custom).&lt;/p&gt;
&lt;h2&gt;Example #6&lt;/h2&gt;
&lt;p&gt;The last example is for something called PriorityBinding.&amp;nbsp; This is poorly named in my opinion as it would be better called CascadingBinding.&amp;nbsp; The point to PriorityBinding is to name multiple data bindings in order of most desirable to least desirable. This way if the first binding fails, is empty and/or default, another binding can take it's place.&amp;nbsp; You may have to be a little imaginative to think of such a scenario, but this kind of thing could be useful so I'm glad it's there.&amp;nbsp; Just for fun, I am using the IsAsync field as well.&amp;nbsp; This tells WPF to use a thread other than the GUI thread to retrieve this property.&amp;nbsp; This is important for properties that take a long time to return as it will leave your app unresponsive until the value is bound.&amp;nbsp; In the case of this example without that attribute the window will not show until the 5 seconds had elapsed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private string &lt;/span&gt;fname;
&lt;span style="color: blue"&gt;public string &lt;/span&gt;FirstName {
&lt;span style="color: blue"&gt;     get &lt;/span&gt;{
          &lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;.Sleep(5000);
          &lt;span style="color: blue"&gt;return &lt;/span&gt;fname; 
     }
          &lt;span style="color: blue"&gt;set &lt;/span&gt;{ fname = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Xaml:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel &lt;/span&gt;&lt;span style="color: red"&gt;Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="5" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="130" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="40" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left" &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Top"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;PriorityBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="LastNameNonExistant" &lt;br /&gt;                     &lt;/span&gt;&lt;span style="color: red"&gt;IsAsync&lt;/span&gt;&lt;span style="color: blue"&gt;="True" /&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding &lt;/span&gt;&lt;span style="color: red"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;="FirstName" &lt;br /&gt;                     &lt;/span&gt;&lt;span style="color: red"&gt;IsAsync&lt;/span&gt;&lt;span style="color: blue"&gt;="True" /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;PriorityBinding&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox.Text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Priority-Binding_5F00_2.png"&gt;&lt;img height="97" width="175" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Priority-Binding_5F00_thumb.png" alt="Priority Binding" border="0" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Another neat little thing to know is that the Hierarchy for Binding is Binding -&amp;gt; BindingBase -&amp;gt; MarkupExtension -&amp;gt; Object.&amp;nbsp; Unlike much of the rest of the .NET Framework you can actually inherit from any of these classes and provide support for your customized binding needs.&amp;nbsp; That is exactly what I am doing for SmartForms 2.0!&amp;nbsp; I created a binding class called DataBinding and it looks a little like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&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;db&lt;/span&gt;&lt;span style="color: blue"&gt;="clr-namespace:SmartForms2.Binding;assembly=SmartForms2"&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="firstName" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="175" &lt;br /&gt;         &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;db&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataBinding &lt;/span&gt;&lt;span style="color: red"&gt;Data&lt;/span&gt;&lt;span style="color: blue"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;DataSource&lt;/span&gt;&lt;span style="color: blue"&gt;=DB1}" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My DataBinding class inherits directly from MarkupExtension so all I had to do is implement the abstract method ProvideValue.&lt;/p&gt;
&lt;h5&gt;Links:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc716880.aspx" title="http://msdn.microsoft.com/en-us/library/cc716880.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc716880.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase_members.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase_members.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase_members.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx" title="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=396" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/SmartForms/default.aspx">SmartForms</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Data+Binding/default.aspx">Data Binding</category></item><item><title>Silverlight 3 Announced</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/12/18/silverlight-3-announced.aspx</link><pubDate>Thu, 18 Dec 2008 19:42:05 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:322</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=322</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=322</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/12/18/silverlight-3-announced.aspx#comments</comments><description>&lt;p&gt;This &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/11/16/update-on-silverlight-2-and-a-glimpse-of-silverlight-3.aspx" target="_blank"&gt;announcement&lt;/a&gt; on Scott Gu's blog touts the success of the launch of Silverlight 2.0 and announces Silverlight 3.0.&amp;nbsp; Out of the success stories noted on the blog one of the coolest applications is the new Netflix player!&amp;nbsp; Having worked only a little in Silverlight but a lot in WPF I have been very disappointed with the lack of databinding in Silverlight 2.0! It sounds like I am not alone in this line of thinking so Silverlight 3.0 promises to fix a lot of that.&amp;nbsp; Another great feature is hardware acceleration (using OpenGL?) which would be really sweet!&amp;nbsp; These tools should be available early next year.&lt;/p&gt; &lt;p&gt;Here is a screen shot (taken from Scott's Blog):&lt;/p&gt; &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/vs_5F00_2.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="364" alt="vs" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/vs_5F00_thumb.png" width="504" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I really hope that they bring WPF and Silverlight more in line with each other -- increasing capability and compatibility!&amp;nbsp; It's ridiculous to think that we have three different but strikingly similar tools that don't interop!&amp;nbsp; Of course the three being WPF, Silverlight and MCE Media Center.&lt;/p&gt; &lt;h5&gt;Links:&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="http://weblogs.asp.net/scottgu/archive/2008/11/16/update-on-silverlight-2-and-a-glimpse-of-silverlight-3.aspx" href="http://weblogs.asp.net/scottgu/archive/2008/11/16/update-on-silverlight-2-and-a-glimpse-of-silverlight-3.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2008/11/16/update-on-silverlight-2-and-a-glimpse-of-silverlight-3.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=322" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Site+News/default.aspx">Site News</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Technology+News/default.aspx">Technology News</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Beta+Software/default.aspx">Beta Software</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Silverlight+3.0/default.aspx">Silverlight 3.0</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Silverlight+2.0/default.aspx">Silverlight 2.0</category></item><item><title>Great WPF Editor</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/12/09/great-wpf-editor.aspx</link><pubDate>Tue, 09 Dec 2008 16:48:12 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:252</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=252</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=252</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/12/09/great-wpf-editor.aspx#comments</comments><description>&lt;p&gt;There is Expression Blend, Visual Studio, XamlPad that we are all aware of and use on a regular biases for creating our XAML.&amp;nbsp; One that I am adding to the top of my XAML editor list is Kaxaml!&amp;nbsp; This is the lightest weight most useful XAML editor I have ever seen!&amp;nbsp; It's got a great WPF/Blend look and is light and fast.&amp;nbsp; No more waiting 10-30 seconds for Visual Studio to fail to load your XAML documents!&amp;nbsp; If there were a way to replace the Visual Studio editor with this I would totally do it!&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/kaxaml_5F00_screenshot_5F00_2.jpg" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="362" alt="kaxaml_screenshot" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/kaxaml_5F00_screenshot_5F00_thumb.jpg" width="504" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Unlike Blend it has code insight.&amp;nbsp; Unlike Visual Studio 2008 it is fast and functional!&amp;nbsp; My favorite feature is the XAML Scrubber which will "pretty up" your XAML by organizing the tags and attributes.&amp;nbsp; It will even put the most important attributes at the start of the tag.&amp;nbsp; It removes much of the pressure of writing XAML!&lt;/p&gt; &lt;p&gt;Hopefully some future versions will include a visual tree and perhaps even a feature where you can click on an click on an object and be taken to the applicable part in the XAML.&amp;nbsp; The XAML Scrubber only uses spaces and I am a tab guy -- oh how I wish it supported tabs!&amp;nbsp; Also, I noticed that once I added an event to a control it said I had to compile the XAML -- not sure what that means.&amp;nbsp; That means it's probably mostly useful for creating the user interface before you start hooking code into it.&amp;nbsp; &lt;/p&gt; &lt;p&gt;If you need a good place to hammer out some design -- this may be your best bet!&amp;nbsp; &lt;/p&gt; &lt;h5&gt;Links:&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="http://kaxaml.com/" href="http://kaxaml.com/"&gt;http://kaxaml.com/&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="http://labs.nerdplusart.com/#Kaxaml" href="http://labs.nerdplusart.com/#Kaxaml"&gt;http://labs.nerdplusart.com/#Kaxaml&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="http://codeplex.com/Kaxaml" href="http://codeplex.com/Kaxaml"&gt;http://codeplex.com/Kaxaml&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=252" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Tools/default.aspx">Tools</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Product+Reviews/default.aspx">Product Reviews</category></item><item><title>Utah DNUG :: UI Design Patterns</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/11/13/utah-dnug-ui-design-patterns.aspx</link><pubDate>Fri, 14 Nov 2008 02:21:59 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:166</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=166</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=166</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/11/13/utah-dnug-ui-design-patterns.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;Presenter: &lt;strong&gt;Joe McBride&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Date: &lt;strong&gt;Thursday November 13, 2008&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Place: &lt;strong&gt;Neumont University&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I am pretty excited about this.&amp;nbsp; I am a big fan of design patterns and the presentation promises to cover MVC and MVP design patterns and those are not well understood architectures and I was also interested to see how it was applied to WPF.&amp;nbsp; There is also an additional pattern described called &amp;quot;Model View ViewModel&amp;quot;(MVVM).&lt;/p&gt; &lt;h2&gt;Model View Controller (MVC)&lt;/h2&gt; &lt;p&gt;This model seemed to be presented a bit differently than I expected.&amp;nbsp; The slide suggested that the Model could somehow be used circumventing the presenter.&amp;nbsp; Regardless, the MVC was described much like an API that is available for the view to consume passing nicely typed domain objects back and forth. This is a pretty straight-forward design pattern and has a lot on common with nTier.&amp;nbsp; &lt;/p&gt; &lt;p&gt;One of the good things about MVC is that it is much easier to test.&lt;/p&gt; &lt;h2&gt;Model View Presenter (MVP)&lt;/h2&gt; &lt;p&gt;The view can raise events to the presenter and everything is marshaled through the presenter.&amp;nbsp; One of the pro&amp;#39;s about MVP over MVC is that data binding is made possible. The presenter becomes the gateway for any logic -- the object you are using to bind with doesn&amp;#39;t need to be a domain object but can be a UI object. Data binding is the coolest and least understood part of WPF and I believe that Data binding could have been applied with the MVC pattern but the MVP is clearly easier.&amp;nbsp; The binding statements were very simple and the code looked pretty clean.&amp;nbsp; &lt;/p&gt; &lt;p&gt;One thing that I might not like about MVP is that the objects returned may be too customized for a particular view and if you plan to deploy this code with multiple views, for WPF and ASP.NET for example, may need entirely different types of objects for data binding.&lt;/p&gt; &lt;h2&gt;Command Pattern&lt;/h2&gt; &lt;p&gt;The command pattern is a lot like a fire alarm.&amp;nbsp; When there is a fire someone pulls the fire alarm and everyone exits the building.&amp;nbsp; In this analogy the fire alarm is the &amp;quot;command&amp;quot;, it is invoked by someone pulling it and anyone could pull it.&amp;nbsp; When it is pulled everyone interested in the fire alarm takes appropriate action.&amp;nbsp; This is actually an analogy I came up with on the fly but I think it&amp;#39;s a great way to describe a pretty abstract concept.&amp;nbsp; &lt;/p&gt; &lt;h2&gt;Model View ViewModel (MVVM)&lt;/h2&gt; &lt;p&gt;This is a new pattern to me -- I have never even heard of it before.&amp;nbsp; I do think that this approach could have some advantages where the ViewModel could be customized to work better with the actual view.&amp;nbsp; This is also a good place to implement the command pattern.&amp;nbsp; It is also a very useful that commands can be disabled which makes will actually update the WPF UI! That is pretty awesome!&amp;nbsp; The only potential downside (if you choose to call it that) is that there seems to be mode code involved even if it is somewhat abstracted away from the UI.&amp;nbsp; &lt;/p&gt; &lt;h2&gt;Testability&lt;/h2&gt; &lt;p&gt;Part of a good measure for any presentation design pattern is how testable it is.&amp;nbsp; I really believe that if you can keep your UI code to a bare minimum that the unit tests will be substantially more effective.&amp;nbsp; &lt;/p&gt; &lt;h3&gt;Observations:&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;I like the microphone.&amp;nbsp; &lt;/li&gt; &lt;li&gt;Great turnout.&amp;nbsp; I counted about 45 people in attendance&lt;/li&gt; &lt;li&gt;It&amp;#39;s very un-impressive when in the first 30 seconds of the presentation the code is broken; it was fixed very quickly though.&lt;/li&gt; &lt;li&gt;Too much on a single slide.&amp;nbsp; Could have done well to split them out into two or three slides.&lt;/li&gt; &lt;li&gt;Pizza was gone by the time I got there....bummer!&amp;nbsp; Probably makes my review more critical -- I need Pizza!&lt;/li&gt; &lt;li&gt;I think it could have been possible to do this almost entirely via Commands which would eliminate any code required on the code-behind for the view.&amp;nbsp; That might be an interesting thing for me to try later.&lt;/li&gt; &lt;li&gt;I was shocked when Charles Petzold&amp;#39;s book was not mentioned as a good WPF resource!&amp;nbsp; Geesh!&amp;nbsp; Also, I don&amp;#39;t believe Adam Nathan&amp;#39;s book (WPF Unleashed) is difficult and fast-paced.&amp;nbsp; I actually found it a quite addicting read.&amp;nbsp; Maybe not so much for the writing style (Petzold is clearly the literary master of the two) but because WPF is just such an interesting subject.&lt;/li&gt; &lt;li&gt;I couldn&amp;#39;t believe how few people know what the Command Pattern is.&lt;/li&gt; &lt;li&gt;I would like to have seen more interfaces and loose cohesiveness.&amp;nbsp; Okay -- Nevermind!&amp;nbsp; Just as I typed this he showed that he was using an interface.&lt;/li&gt; &lt;li&gt;I was very disappointed to see the use of &lt;font face="Courier New" color="#0000ff"&gt;var&lt;/font&gt; where objects are not anonymously typed.&amp;nbsp; &lt;/li&gt; &lt;li&gt;The presentation didn&amp;#39;t seem to flow too well at times.&amp;nbsp; I was also hoping to see a bit more of the mock objects and how to create those for unit testing.&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Summary&lt;/h2&gt; &lt;p&gt;Thanks Joe! Great presentation.&amp;nbsp; Very good demonstration code used and it was very simple and small.&amp;nbsp; I have to admit I am a little jealous of your blog domain and I think it&amp;#39;s cool that he got it and that he actually uses it.&amp;nbsp; Hopefully we can link to each other more in the future.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h5&gt;Links:&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="http://xamlcoder.com/cs/blogs/joe/archive/2008/11/10/utah-net-user-group-presentation-ui-design-patterns.aspx" href="http://xamlcoder.com/cs/blogs/joe/archive/2008/11/10/utah-net-user-group-presentation-ui-design-patterns.aspx"&gt;http://xamlcoder.com/cs/blogs/joe/archive/2008/11/10/utah-net-user-group-presentation-ui-design-patterns.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=166" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/User+Groups/default.aspx">User Groups</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Design+Patterns/default.aspx">Design Patterns</category></item><item><title>Routed Event Code Snippet</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/10/15/routed-event-code-snippet.aspx</link><pubDate>Wed, 15 Oct 2008 19:51:45 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:113</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=113</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=113</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/10/15/routed-event-code-snippet.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/framework35_5F00_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 10px 5px 0px;border-left:0px;border-bottom:0px;" height="142" alt="framework35" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/framework35_5F00_thumb.png" width="125" align="left" border="0" /&gt;&lt;/a&gt; I find it really strange that there are code snippets for Dependency Properties but not Routed Events!&amp;nbsp; Routed Events allow events to tunnel (preview) events up a visual tree and bubble them back down the visual tree.&amp;nbsp; Any control along the tree can subscribe to these events and handle them.&amp;nbsp; You can also choose to see events even if they have been handled.&amp;nbsp; &lt;/p&gt; &lt;p&gt;This makes RoutedEvents very nice for use in XAML!&amp;nbsp; For example, lets say you have a StackPanel and you want to know about any button clicks happening in that panel, you could simply use the following XAML:&lt;/p&gt; &lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel &lt;/span&gt;&lt;span style="color:red;"&gt;ButtonBase.Click&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;MyButtonEventHandler&amp;quot;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;50&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Content&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Button 1&amp;quot; /&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;50&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Content&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Button 2&amp;quot; /&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;50&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Content&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Button 3&amp;quot; /&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;50&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Content&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Button 4&amp;quot; /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Now when any one of the buttons are clicked, the stack panel will receive notification.&amp;nbsp; Just like Attached Properties, the stack panel does not need to have a Click event.&amp;nbsp; If a button does not exist inside of the stack panel there is no problem, you just won&amp;#39;t receive any notification.&amp;nbsp; The buttons do not even have to be direct children of the stack panel for this to work so if we wanted we could put them inside of another stack panel or any other content control.&lt;/p&gt;
&lt;p&gt;I really think it strange that there was no snippet for Routed Events (being as handy as they are) so I took the time to write one.&lt;/p&gt;
&lt;p&gt;Lets make a code snippet for a Routed Event, here is how:&lt;/p&gt;
&lt;h4&gt;Create a Custom Snippet&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Find a snippet you plan to modify in the Manage Snippets Dialog (Tools -&amp;gt; Code Snippets Manager) 
&lt;li&gt;Open the Snippet using &lt;em&gt;&lt;strong&gt;File -&amp;gt; Open File &lt;/strong&gt;&lt;/em&gt;and open the file:&lt;br /&gt;&lt;strong&gt;&lt;em&gt;C:\Program Files\Microsoft Visual Studio 9.0\VC#\Snippets\1033\NetFX30\propdp.snippet &lt;/em&gt;&lt;/strong&gt;
&lt;li&gt;Edit the declarations (like):&lt;br /&gt;&lt;pre class="code"&gt;      &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;name&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Event Name&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;MyEvent&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;li&gt;Edit the snippet using &lt;strong&gt;$name$&lt;/strong&gt; for any literal replacement.
&lt;li&gt;Be sure to change the shortcut in the XML to &amp;quot;revent&amp;quot;.
&lt;li&gt;Save the file as &amp;quot;revent.snippet&amp;quot;
&lt;li&gt;Your visual studio instance should now see the snippet.&amp;nbsp; &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Here is the snippet code I used:&lt;/h4&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515;"&gt;xml &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CodeSnippets  &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CodeSnippet &lt;/span&gt;&lt;span style="color:red;"&gt;Format&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0.0&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Header&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Define a RoutedEvent&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Shortcut&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;revent&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Shortcut&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Description&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Code snippet for a event using RoutedEvent&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Description&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Author&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Nathan Zaugg&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Author&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SnippetTypes&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SnippetType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Expansion&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SnippetType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SnippetTypes&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Header&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Snippet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Declarations&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;eventhandlertype&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Event Handler Type Type&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;RoutedEventHandler&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;name&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Event Name&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;MyEvent&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;ownerclass&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;The owning class of this Property.  &lt;br /&gt;                           Typically the class that it is declared in.&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;ownerclass&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;routingstratigy&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;The routing stratigy for this event.&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Bubble&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Declarations&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Code &lt;/span&gt;&lt;span style="color:red;"&gt;Language&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;csharp&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
                &amp;lt;![CDATA[

&lt;/span&gt;&lt;span style="color:gray;"&gt;// Provide CLR accessors for the event
public event RoutedEventHandler $name$
{
        add { AddHandler($name$Event, value); } 
        remove { RemoveHandler($name$Event, value); }
}

// Using a RoutedEvent
public static readonly RoutedEvent $name$Event = EventManager.RegisterRoutedEvent(
    &amp;quot;$name$&amp;quot;, RoutingStrategy.$routingstratigy$, typeof($eventhandlertype$), typeof($ownerclass$));

$end$&lt;/span&gt;&lt;span style="color:blue;"&gt;]]&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Code&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Snippet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CodeSnippet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CodeSnippets&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;h4&gt;When you are done it should look like this:&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Using-Routed-Event_5F00_2.png" target="_blank"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="120" alt="Using Routed Event" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Using-Routed-Event_5F00_thumb.png" width="479" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Finished-Event_5F00_2.png" target="_blank"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="127" alt="Finished Event" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Finished-Event_5F00_thumb.png" width="479" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t want to bother writing it yourself, you may download my routed event snippet &lt;a href="http://interactiveasp.net/media/p/112.aspx" target="_blank"&gt;here&lt;/a&gt;.&amp;nbsp; I plan to create a code snippet for Dependency Properties that have coercion, event changed notification, and validation methods implemented so they may be overridden in descendent classes. &lt;/p&gt;
&lt;h5&gt;Links:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="http://interactiveasp.net/media/p/112.aspx" href="http://interactiveasp.net/media/p/112.aspx"&gt;Routed Event Snippet Download&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms742806.aspx" target="_blank"&gt;Routed Events (MSDN Reference)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://joshsmithonwpf.wordpress.com/2007/06/22/overview-of-routed-events-in-wpf/"&gt;Josh Smith on Routed Events&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=113" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Open+Source/default.aspx">Open Source</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Silverlight 2 RC0 Released</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/10/09/silverlight-2-rc0-released.aspx</link><pubDate>Fri, 10 Oct 2008 05:41:16 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:109</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=109</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=109</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/10/09/silverlight-2-rc0-released.aspx#comments</comments><description>&lt;p&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 10px 5px 0px;border-left:0px;border-bottom:0px;" height="74" alt="Silverlight Logo" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Silverlight-Logo_5F00_3.jpg" width="179" align="left" border="0" /&gt; Silverlight 2 is not far from reality!&amp;nbsp; With the first RC coming just months after the beta 2 release and promises of a full release coming soon we can start migrating existing beta 2 code to RC0 which is supposed to be compatible with the actual release. The announcement is posted on Scott Gu&amp;#39;s blog &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/09/25/silverlight-2-release-candidate-now-available.aspx" target="_blank"&gt;here&lt;/a&gt;.&amp;nbsp; I am excited to read that some of the major changes are making WPF and Silverlight.&amp;nbsp; Also, they have promised a bunch of new controls which will make Silverlight more control rich than WPF (with some exception).&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;My computer is still messed up from the Beta 2 release so I&amp;#39;m hoping that installing the RC0 release will fix some things up -- I&amp;#39;ll post on that later.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=109" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Technology+News/default.aspx">Technology News</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Ink in WPF -- Using TextInputPanel for Text Input</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/10/01/ink-in-wpf-using-textinputpanel-for-text-input.aspx</link><pubDate>Wed, 01 Oct 2008 18:08:18 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:95</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=95</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=95</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/10/01/ink-in-wpf-using-textinputpanel-for-text-input.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Ink_2D00_Logo_5F00_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 5px 0px; border-right-width: 0px" height="79" alt="Ink-Logo" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Ink_2D00_Logo_5F00_thumb.png" width="148" align="left" border="0"&gt;&lt;/a&gt; WPF has built-in controls for ink, but is missing much of the API that is available in the TabletPC SDK 1.7.&amp;nbsp; As a result, unless you are doing the most basic and mundane ink you will be required to use this library.&amp;nbsp; One of those basic things that are missing is the ability to open the TextInputPanel in an WPF application.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The TextInputPanel is a tool that ships with certain versions of Vista (in previous versions of windows it was called a Pen Input Panel) that enables handwriting recognition and an on-screen keyboard.&amp;nbsp; It makes text input into a text box easy when the user is operating with a Tablet PC.&amp;nbsp; The problem is that the .NET assembly only supports hwnd-based controls and WPF controls (thankfully) are not hwnd-based.&amp;nbsp; &lt;/p&gt; &lt;p&gt;So while trying to figure this out, and off the clock from the project I was on, I made a class that helped bridge the gap between WPF and the TextInputPanel.&lt;/p&gt; &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/TextInputPanel_5F00_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="92" alt="TextInputPanel" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/TextInputPanel_5F00_thumb.png" width="354" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Before you try to use this you will need to do two things. &lt;/p&gt; &lt;p&gt;First you need to download and install the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B46D4B83-A821-40BC-AA85-C9EE3D6E9699&amp;amp;displaylang=en" target="_blank"&gt;TabletPC SDK 1.7&lt;/a&gt; (if you haven't already) and download my class (&lt;a href="http://interactiveasp.net/media/p/94.aspx" target="_blank"&gt;Source&lt;/a&gt; / &lt;a href="http://interactiveasp.net/media/p/93.aspx" target="_blank"&gt;Binary&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;Second you need to start the Tablet PC Input Panel if you on a regular PC.&amp;nbsp; To do this go to:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Start -&amp;gt; All Programs -&amp;gt; Accessories -&amp;gt; Tablet PC -&amp;gt; Tablet PC Input Panel&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;To use the class as a binary application, simply add the DLL as a reference.&amp;nbsp; Once that is done you will need to create an instance of the class for each text box you wish to have ink input (shown below).&amp;nbsp; &lt;strong&gt;&lt;em&gt;IMPORTANT: THIS SHOULD BE DONE ON THE WINDOW LOAD EVENT! IF YOU PUT THIS CODE IN THE CONSTRUCTOR IT WILL NOT WORK!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml" 
        &lt;/span&gt;&lt;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;="TestApp" 
        &lt;/span&gt;&lt;span style="color: red"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;="Ink Input App" 
        &lt;/span&gt;&lt;span style="color: red"&gt;Loaded&lt;/span&gt;&lt;span style="color: blue"&gt;="Window_Loaded"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="tbTest" &lt;/span&gt;&lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="30" &lt;/span&gt;&lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="300" /&amp;gt; 
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;protected &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InkInputPanel &lt;/span&gt;pnltbTestInk;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;...&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;Window_Loaded(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e)
{
    &lt;span style="color: green"&gt;// Enable the Ink Input Panel
    &lt;/span&gt;pnltbTestInk= &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InkInputPanel&lt;/span&gt;(tbTest, &lt;span style="color: blue"&gt;true&lt;/span&gt;);
}&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;The code above will display the TextInputPanel anytime the textbox has focus and will go away when it looses focus.&amp;nbsp; This is the simplest way to use the class.&amp;nbsp; If you are doing something more complex like making the input panel appear when a button is clicked you will have some slightly different code.&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;Window_Loaded(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e)
{
&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: green"&gt;    // Enable the Ink Input Panel
&lt;/span&gt;    pnltbTestInk = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InkInputPanel&lt;/span&gt;(tbTest, &lt;span style="color: blue"&gt;false&lt;/span&gt;); &lt;span style="color: green"&gt;// False for AutoShow&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;pre class="code"&gt;}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;InputFieldButton_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e) {
    tbTest.Focus();
    pnltbTestInk.Show();
}

&lt;span style="color: blue"&gt;protected void &lt;/span&gt;tbTest_LostFocus(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e) {
    pnltbTestInk.Hide();
}&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;em&gt;Just make sure that you focus the text box before you call show on the Text Input Panel.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Basically the class I created uses the COM object exposed by the SDK rather than the &lt;em&gt;Microsoft.Ink.dll&lt;/em&gt; assembly.&amp;nbsp; The COM object is called "&lt;em&gt;Microsoft PenInputPanel 1.7&lt;/em&gt;" and is found at &lt;em&gt;C:\Program Files\Common Files\Microsoft Shared\ink\tiptsf.dll&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you are able to make use of my class or have questions or feedback, please leave a comment!&lt;/p&gt;
&lt;h2&gt;UPDATE&lt;/h2&gt;
&lt;p&gt;I received a number of emails indicating that using this code for multiple text boxes didn't work (it threw a COM exception).&amp;nbsp; I have modified the code to fix this issue and have uploaded it.&amp;nbsp; Because of a COM limitation, there is a change in how you use the API.&amp;nbsp; The biggest change is that you only need one instance of the class and you can attach multiple text boxes to this one instance.&lt;/p&gt;
&lt;h4&gt;Example:&lt;/h4&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;protected &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InkInputPanel &lt;/span&gt;pnltbTest;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;...&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;Window_Loaded(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e) {
    pnltbTest = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InkInputPanel&lt;/span&gt;(tbTest, &lt;span style="color: blue"&gt;true&lt;/span&gt;);
    pnltbTest.AddAttachedTextBox(tbTest1, &lt;span style="color: blue"&gt;true&lt;/span&gt;);
    pnltbTest.AddAttachedTextBox(tbTest2, &lt;span style="color: blue"&gt;true&lt;/span&gt;);
    pnltbTest.AddAttachedTextBox(tbTest3, &lt;span style="color: blue"&gt;true&lt;/span&gt;);
}&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;if you are going to hide and show the panel explictly, then you will need to use one of the indexers available on the InkInputPanel class.&lt;/p&gt;
&lt;h4&gt;Example:&lt;/h4&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;protected &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InkInputPanel &lt;/span&gt;pnltbTestInk;&lt;/pre&gt;
&lt;p&gt;...&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;Window_Loaded(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e) {
    &lt;span style="color: green"&gt;// Enable the Ink Input Panel
    // Pass false for AutoShow
    &lt;/span&gt;pnltbTestInk = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InkInputPanel&lt;/span&gt;(tbTest, &lt;span style="color: blue"&gt;false&lt;/span&gt;); 
}

&lt;span style="color: blue"&gt;private void &lt;/span&gt;InputFieldButton_Click(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e) {
    tbTest.Focus();
    pnltbTestInk[tbTest].Show();
}

&lt;span style="color: blue"&gt;protected void &lt;/span&gt;tbTest_LostFocus(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs &lt;/span&gt;e) {
    pnltbTestInk[tbTest].Hide();
}&lt;/pre&gt;&lt;/blockquote&gt;
&lt;h5&gt;Links&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyId=B46D4B83-A821-40BC-AA85-C9EE3D6E9699&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B46D4B83-A821-40BC-AA85-C9EE3D6E9699&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=B46D4B83-A821-40BC-AA85-C9EE3D6E9699&amp;amp;displaylang=en&lt;/a&gt; 
&lt;li&gt;&lt;a title="http://interactiveasp.net/media/p/93.aspx" href="http://interactiveasp.net/media/p/93.aspx"&gt;http://interactiveasp.net/media/p/93.aspx&lt;/a&gt; 
&lt;li&gt;&lt;a title="http://interactiveasp.net/media/p/94.aspx" href="http://interactiveasp.net/media/p/94.aspx"&gt;http://interactiveasp.net/media/p/94.aspx&lt;/a&gt; 
&lt;li&gt;&lt;a title="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3943590&amp;amp;SiteID=1" href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3943590&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3943590&amp;amp;SiteID=1&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:B3E14793-948F-49af-A347-D19C374A7C4F:fd17a0fe-a10b-43dc-b57b-fa9db31dc34c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;
&lt;script type="text/javascript"&gt;&lt;!--
digg_url = 'http://interactiveasp.net/blogs/natesstuff/archive/2008/10/01/ink-in-wpf-using-textinputpanel-for-text-input.aspx';
digg_title = 'Ink in WPF -- Using TextInputPanel for Text Input';
digg_bodytext = 'WPF has built-in controls for ink, but is missing much of the API that is available in the TabletPC SDK 1.7.&amp;nbsp; As a result, unless you are doing the most basic and mundane ink you will be required to use this library.&amp;nbsp; One of those basic things that are missing is the ability to open the TextInputPanel in an WPF application.&amp;nbsp;';
digg_topic = 'microsoft';
//--&gt;&lt;/script&gt;
&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=95" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Windows/default.aspx">Windows</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/.NET/default.aspx">.NET</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Ink/default.aspx">Ink</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Vista/default.aspx">Vista</category></item><item><title>Bug in Visual Studio 2008 SP1?</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/09/15/bug-is-visual-studio-2008-sp1.aspx</link><pubDate>Mon, 15 Sep 2008 17:25:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:85</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=85</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=85</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/09/15/bug-is-visual-studio-2008-sp1.aspx#comments</comments><description>&lt;p&gt;This is just a quick post.&amp;nbsp; I had a bug where any time I tried to compile a WPF project on my laptop I got the following pair of errors:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Error Message 1:&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;The &amp;quot;SplashScreen&amp;quot; parameter is not supported by the &amp;quot;MarkupCompilePass1&amp;quot; task. Verify the parameter exists on the task, and it is a settable public instance property.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Error Message 2:&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;The &amp;quot;MarkupCompilePass1&amp;quot; task could not be initialized with its input parameters.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I completely uninstalled Visual Studio 2008 &amp;amp; SP1 and reinstalled everything and this did not go away.&amp;nbsp; Anyway, here is how you fix it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Using a text editor, open the file: &lt;strong&gt;C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.WinFx.targets&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Search for &amp;quot;&lt;strong&gt;MarkupCompilePass1&lt;/strong&gt;&amp;quot;; this was line 294 for me&lt;/li&gt;
&lt;li&gt;Remove the following line from the XML tag line: &lt;strong&gt;SplashScreen=&amp;quot;@(SplashScreen)&amp;quot;&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have also posted my work around on the Microsoft Connect site (link below).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361596" title="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361596"&gt;https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361596&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=364103" title="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=364103"&gt;https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=364103&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=85" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/C_2300_+3.0/default.aspx">C# 3.0</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category></item><item><title>Moving a WPF Window Without a Title Bar</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/09/04/moving-a-wpf-window-without-a-title-bar.aspx</link><pubDate>Thu, 04 Sep 2008 20:42:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:69</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=69</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=69</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/09/04/moving-a-wpf-window-without-a-title-bar.aspx#comments</comments><description>&lt;p&gt;here is some great code for moving a window without a title bar.&amp;nbsp; &lt;/p&gt;
&lt;h3&gt;Step 1: Make your window transparent&lt;/h3&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window &lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;TestWpfApp.Window1&amp;quot;
    &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;
&lt;strong&gt;    &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;strong&gt;AllowsTransparency&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;=&amp;quot;True&amp;quot;
    &lt;/span&gt;&lt;span style="color:red;"&gt;WindowStyle&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;=&amp;quot;None&amp;quot;
    &lt;/span&gt;&lt;span style="color:red;"&gt;Background&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;=&amp;quot;Transparent&amp;quot;&lt;/strong&gt;
    &lt;/span&gt;&lt;span style="color:red;"&gt;Title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;My WPF Application&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;300&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Step 2: Make a new title bar&lt;/h3&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Rectangle &lt;/span&gt;&lt;span style="color:red;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Stretch&amp;quot;  &lt;/span&gt;&lt;span style="color:red;"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Top&amp;quot; &lt;br /&gt;               &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;40&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;MouseDown&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;move_window&amp;quot; /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 3: Add some code&lt;/h3&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Runtime.InteropServices;&lt;br /&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Windows.Interop;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;pre class="code"&gt;...&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public const int &lt;/span&gt;WM_NCLBUTTONDOWN = 0xA1;
&lt;span style="color:blue;"&gt;public const int &lt;/span&gt;HT_CAPTION = 0x2;

[&lt;span style="color:#2b91af;"&gt;DllImportAttribute&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;user32.dll&amp;quot;&lt;/span&gt;)]
&lt;span style="color:blue;"&gt;public static extern int &lt;/span&gt;SendMessage(&lt;span style="color:#2b91af;"&gt;IntPtr &lt;/span&gt;hWnd, &lt;span style="color:blue;"&gt;int &lt;/span&gt;Msg, &lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;span style="color:#000000;"&gt;        &lt;/span&gt;int &lt;/span&gt;wParam, &lt;span style="color:blue;"&gt;int &lt;/span&gt;lParam);&lt;/pre&gt;
&lt;pre class="code"&gt;[&lt;span style="color:#2b91af;"&gt;DllImportAttribute&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;user32.dll&amp;quot;&lt;/span&gt;)]
&lt;span style="color:blue;"&gt;public static extern bool &lt;/span&gt;ReleaseCapture();&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 4: Write the event&lt;/h3&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public void &lt;/span&gt;move_window(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, MouseButtonEventArgs e) {
    ReleaseCapture();
    SendMessage(&lt;span style="color:blue;"&gt;new &lt;/span&gt;WindowInteropHelper(&lt;span style="color:blue;"&gt;this&lt;/span&gt;).Handle, &lt;br /&gt;        WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;Links:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/cs/csharpmovewindow.aspx" title="http://www.codeproject.com/KB/cs/csharpmovewindow.aspx"&gt;http://www.codeproject.com/KB/cs/csharpmovewindow.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/wpfsdk/archive/2007/08/02/a-wpf-window-without-an-window-icon-the-thing-you-click-to-get-the-system-menu.aspx" title="http://blogs.msdn.com/wpfsdk/archive/2007/08/02/a-wpf-window-without-an-window-icon-the-thing-you-click-to-get-the-system-menu.aspx"&gt;http://blogs.msdn.com/wpfsdk/archive/2007/08/02/a-wpf-window-without-an-window-icon-the-thing-you-click-to-get-the-system-menu.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=69" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category></item><item><title>XAML Cheat Sheet</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/05/28/xaml-cheat-sheet.aspx</link><pubDate>Thu, 29 May 2008 04:33:05 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:27</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=27</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=27</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/05/28/xaml-cheat-sheet.aspx#comments</comments><description>&lt;p&gt;A few weeks ago I gave a presentation on Silverlight at the &lt;a href="http://www.utcodecamp.com" target="_blank"&gt;Utah Code Camp&lt;/a&gt;.&amp;nbsp; I was really impressed by a presentation I saw last time on Ruby and everyone really liked the cheat sheet that was provided.&amp;nbsp; For my presentation this year I created an XAML Cheat Sheet.&amp;nbsp; For those who are learning XAML it is a pretty good resource but it&amp;#39;s most helpful for me when I know how to do something but I can&amp;#39;t remember the syntax.&amp;nbsp; This is a work in progress so keep on checking back.&amp;nbsp; It can be downloaded in the Media section of this site or by clicking &lt;a href="http://interactiveasp.net/media/p/23/download.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Please drop me a line if you think you have something useful to add or you want to thank me for the hard work it took to put this thing together!&lt;/p&gt; &lt;p&gt;Nathan Zaugg&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=27" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Utah+Code+Camp/default.aspx">Utah Code Camp</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/C_2300_+3.0/default.aspx">C# 3.0</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/XAML/default.aspx">XAML</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Cheat+Sheet/default.aspx">Cheat Sheet</category></item><item><title>SP1 for the .Net Framework 3.5 and Visual Studio 2008 Released to Beta</title><link>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/05/19/sp1-for-the-net-framework-3-5-and-visual-studio-2008-released-to-beta.aspx</link><pubDate>Mon, 19 May 2008 18:34:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:26</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/rsscomments.aspx?PostID=26</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://interactiveasp.net:443/blogs/natesstuff/commentapi.aspx?PostID=26</wfw:comment><comments>https://interactiveasp.net:443/blogs/natesstuff/archive/2008/05/19/sp1-for-the-net-framework-3-5-and-visual-studio-2008-released-to-beta.aspx#comments</comments><description>&lt;p&gt;As promised by Microsoft when Visual Studio 2008 launched late last year, there is a service pack for available both for the .Net framework 3.5 and Visual Studio 2008.&amp;nbsp; Information about the release can be found on &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx"&gt;ScottGu&amp;#39;s Blog&lt;/a&gt; and mostly include bug fixes and performance enhancements, but the points of interest for me are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ASP.NET Routing Engine&lt;/strong&gt; which gives you the ability to map URL&amp;#39;s to route handlers. For example the URL &lt;a href="http://www.mysite.com/myapp/data/234/editComment"&gt;http://www.mysite.com/myapp/data/234/editComment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ASP.NET AJAX Back/Forward Button History Support&lt;/strong&gt; gives you the ability to control the forward &amp;amp; back button clicks on the browser.&amp;nbsp; This will be very useful for &amp;quot;single page&amp;quot; ASP.NET AJAX implementations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance improvements&lt;/strong&gt; on the web editor in VS 2008.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JavaScript Formatting Settings&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CLR performance improvements&lt;/strong&gt; including startup times that are 40% faster and faster ASP.NET requests (up to 10% faster).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WPF New Features and Performance Enhancements!&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Performance enhancements using GPU &lt;/li&gt;
&lt;li&gt;New &amp;quot;WritableBitmap&amp;quot; which allows for tear-free bitmap updates.&lt;/li&gt;
&lt;li&gt;ListBox, ListView, and TreeView now support &amp;quot;item container recycling&amp;quot; and virtualization which results in better performance.&amp;nbsp; This will have a huge effect on large amounts of data.&lt;/li&gt;
&lt;li&gt;Deferred Scrolling which doesn&amp;#39;t render until the mouse up on a scroll event.&amp;nbsp; This will can have a enormous effect on huge data sets.&lt;/li&gt;
&lt;li&gt;StringFormat support within binding expressions&lt;/li&gt;
&lt;li&gt;New Alternating Rows support for controls derived from ItemControl&lt;/li&gt;
&lt;li&gt;Events tab support within the property browser in VS 2008&lt;/li&gt;
&lt;li&gt;Go to Definition and Find All References now support things declared in XAML&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL Server 2008 Support&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;The long awaited &lt;strong&gt;ADO.NET Entity Framework&lt;/strong&gt; which includes integration with any database&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improvements in WCF&lt;/strong&gt; including scailability, ADO.NET Entities in service contracts, and Improved Debugging support for WCF.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improvements to C#&lt;/strong&gt;; The C# code editor now identifies and displays red squiggle errors for many semantic code issues that previously required an explicit compilation to identify. The debugger in VS 2008 SP1 has also been improved to provide more debugging support for evaluating LINQ expressions and viewing results at debug time&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fixes to TFS&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Installation Cautions&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you are running this on Vista, be sure Vista SP1 is installed!&lt;/li&gt;
&lt;li&gt;If you have installed the VS 2008 Tools for Silverlight 2 Beta1 package on your machine, you must uninstall it - as well as uninstall the KB949325 update for VS 2008 - &lt;em&gt;before &lt;/em&gt;installing VS 2008 SP1 Beta&lt;/li&gt;
&lt;li&gt;If you are running anything earlier than Expression Blend 2.5, then you need to update it to the latest.&amp;nbsp; Earlier versions will cease to run.&lt;/li&gt;
&lt;li&gt;This is still beta software -- Install at your own risk!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A direct download link can also be found here: &lt;a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx" title="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx"&gt;http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;--Nathan Zaugg&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://interactiveasp.net:443/aggbug.aspx?PostID=26" width="1" height="1"&gt;</description><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/C_2300_+3.0/default.aspx">C# 3.0</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WPF/default.aspx">WPF</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Technology+News/default.aspx">Technology News</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/Javascript/default.aspx">Javascript</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/CLR/default.aspx">CLR</category><category domain="https://interactiveasp.net:443/blogs/natesstuff/archive/tags/WCF/default.aspx">WCF</category></item></channel></rss>