<?xml version="1.0" encoding="utf-16"?>
<?xml-stylesheet type="text/xsl" href="ViewRss.xsl" version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Fons Sonnemans Weblog</title>
    <link>http://www.reflectionit.nl/Blog/default.aspx</link>
    <description>Time to reflect</description>
    <managingEditor>Fons.Sonnemans@reflectionit.nl</managingEditor>
    <item>
      <title>Keyboard selection on Silverlight ListBox and ComboBox</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=d137c1f7-a515-4084-8199-f8b3cf892b8f</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkd137c1f7-a515-4084-8199-f8b3cf892b8f.aspx</link>
      <pubDate>Sat, 06 Feb 2010 23:00:00 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Silverlight doesn't support keyboard selection on a ListBox or Combox. I have created a small Behavior which fixes this problem. You can attach the KeyboardSelectionBehavior to a ListBox or ComboBox using Microsoft Expression Blend. You drag it from the Assets and drop it on your ComboBox or ListBox. If you have a custom ItemTemplate you will have to set the SelectionMemberPath property.&lt;/p&gt;
&lt;p&gt;Try my behavior below. If you press a key on the ComboBox or ListBoxes it will select the next item starting with the given key.&lt;/p&gt;&lt;object height="350" width="520" data="data:application/x-silverlight-2," type="application/x-silverlight-2"&gt;   &lt;param name="source" value="http://www.reflectionit.nl/ClientBin/KeyboardSelectionSample.xap" /&gt;   &lt;param name="onError" value="onSilverlightError" /&gt;   &lt;param name="background" value="white" /&gt;   &lt;param name="minRuntimeVersion" value="3.0.40624.0" /&gt;   &lt;param name="autoUpgrade" value="true" /&gt;   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=3.0.40624.0" style="text-decoration: none;"&gt;    &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none;" /&gt;   &lt;/a&gt;     &lt;/object&gt;&lt;br /&gt;
&lt;p&gt;The ComboBox in this example is not databound, The behavior uses the Convert.ToString() method to convert the Content of each ListBoxItem/ComboBoxItem to a string. An invariant case insensitive StartWith() comparison is used to find the next item.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.reflectionit.nl/images/blog/KeyboardSelectionBehaviorInBlend.jpg" target="_self"&gt;&lt;img width="700" src="http://www.reflectionit.nl/images/blog/KeyboardSelectionBehaviorInBlend.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;                  
&lt;p&gt;The left ListBox is databound to SampleData containing Employees. The behavior uses the DisplayMemberPath of the ListBox. The Name of the&amp;nbsp;databound Employee is used for keyboard selection.&lt;/p&gt;
&lt;div style="font-family: lucida console; font-size: 10pt; color: black; background: #ddd;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;79,64,0,23&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; DisplayMemberPath&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Name&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemsSource&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Employees&lt;/span&gt;&lt;span style="color: blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Left&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;176&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;local&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;KeyboardSelectionBehavior&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;   
&lt;p&gt;The right ListBox is also databound but has a custom ItemTemplate. We can't use the DisplayMemberPath. The behavior has a SelectionMemberPath property to specify which property to use for selection. In this example it is set to the Name of the databound Employee.&lt;/p&gt;   
&lt;div style="font-family: lucida console; font-size: 10pt; color: black; background: #ddd;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;272,23,23,23&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemsSource&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Employees&lt;/span&gt;&lt;span style="color: blue;"&gt;}&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;local&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;KeyboardSelectionBehavior&lt;/span&gt;&lt;span style="color: red;"&gt; SelectionMemberPath&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Name&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: red;"&gt; Orientation&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Horizontal&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Image&lt;/span&gt;&lt;span style="color: red;"&gt; Source&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Image&lt;/span&gt;&lt;span style="color: blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;32&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;32&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span 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;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/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: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Name&lt;/span&gt;&lt;span style="color: blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; FontWeight&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Bold&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/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: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Description&lt;/span&gt;&lt;span style="color: blue;"&gt;}&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span 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;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&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;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;   
&lt;p&gt;Here is the code:&lt;br /&gt;
            &lt;/p&gt;
&lt;div style="background: #dddddd none repeat scroll 0% 0%;font-family: lucida console; font-size: 10pt; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Linq;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Windows;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Windows.Controls.Primitives;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Windows.Data;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Windows.Input;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Windows.Interactivity;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; ReflectionIT.Silverlight.Behaviors {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; This behavior can be attached to a ListBox or ComboBox to &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; add keyboard selection&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;KeyboardSelectionBehavior&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;Behavior&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Selector&lt;/span&gt;&amp;gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Gets or sets the Path used to select the text&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; SelectionMemberPath { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; KeyboardSelectionBehavior() {}&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Attaches to the specified object: subscribe on KeyDown event&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnAttached() {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnAttached();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.AssociatedObject.KeyDown += DoKeyDown;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;void&lt;/span&gt; DoKeyDown(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;KeyEventArgs&lt;/span&gt; e) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Create a list of strings and indexes&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; index = 0;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Item&lt;/span&gt;&amp;gt; list = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; path = SelectionMemberPath ?? &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.AssociatedObject.DisplayMemberPath;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; evaluator = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BindingEvaluator&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (path != &lt;span style="color: blue;"&gt;null&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; list = &lt;span style="color: blue;"&gt;this&lt;/span&gt;.AssociatedObject.Items.OfType&amp;lt;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt;()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .Select(item =&amp;gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// retrieve the value using the supplied Path&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; binding = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Binding&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; binding.Path = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyPath&lt;/span&gt;(path);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; binding.Source = item;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;BindingOperations&lt;/span&gt;.SetBinding(evaluator, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;BindingEvaluator&lt;/span&gt;.TargetProperty, binding);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; value = evaluator.Target;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Item&lt;/span&gt; { Index = index++, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Text = &lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToString(value) };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;span style="color: blue;"&gt;else&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; list = &lt;span style="color: blue;"&gt;this&lt;/span&gt;.AssociatedObject.Items.OfType&amp;lt;&lt;span style="color: #2b91af;"&gt;ListBoxItem&lt;/span&gt;&amp;gt;()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .Select(item =&amp;gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Item&lt;/span&gt; { Index = index++, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Text = &lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToString(item.Content) });&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Sort the list starting at next selectedIndex to the end and &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// then from the beginning&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; list = list.OrderBy(item =&amp;gt; item.Index &amp;lt;= &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.AssociatedObject.SelectedIndex ? &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; item.Index + &lt;span style="color: blue;"&gt;this&lt;/span&gt;.AssociatedObject.Items.Count : item.Index);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Find first starting with &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; text = e.Key.ToString();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; first = list.FirstOrDefault(item =&amp;gt; item.Text.StartsWith(text, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;StringComparison&lt;/span&gt;.InvariantCultureIgnoreCase));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (first != &lt;span style="color: blue;"&gt;null&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// found&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.AssociatedObject.SelectedIndex = first.Index;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Helper class&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Item&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Index;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Text;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Helper class used for property path value retrieval&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BindingEvaluator&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;FrameworkElement&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt; TargetProperty =&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;&amp;quot;Target&amp;quot;&lt;/span&gt;,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;object&lt;/span&gt;),&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;BindingEvaluator&lt;/span&gt;), &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;object&lt;/span&gt; Target {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; GetValue(TargetProperty); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; { SetValue(TargetProperty, &lt;span style="color: blue;"&gt;value&lt;/span&gt;); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;You can download the code including the sample application &lt;a href="http://www.reflectionit.nl/download.aspx?URL=KeyboardSelectionBehavior.zip" target="_self"&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Silverlight Behaviors and Commands</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=b4ece869-e2f8-4e7d-a69e-d2bf6d9f8b48</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkb4ece869-e2f8-4e7d-a69e-d2bf6d9f8b48.aspx</link>
      <pubDate>Sun, 20 Dec 2009 23:00:00 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;A few months ago I wrote an blog post about a &lt;a href="http://www.reflectionit.nl/Blog/default.aspx?guid=07718d3c-9cdb-471a-a3d0-2b0385708b7e" target="_self"&gt;Silverlight 3.0 LetItSnowBehavior&lt;/a&gt;. This Behavior can be used to add a Snow effect to a Canvas. Very usefull if you want to create a christmas card. &lt;/p&gt;
&lt;p&gt;This behavior was always showing you falling snow flakes. You couldn't stop and (re)start&amp;nbsp;the gameloop. The best way to implement this is by adding Commands to the behavior. This allows you to select one or more triggers to Start or Stop the gameloop. I have added the Start and Stop properties of the type ICommand to the&amp;nbsp;LetItSnowBehavior class. In the constructor I have initialized these properties with new ActionCommand objects (Microsoft.Expression.Interactions.dll)&amp;nbsp;and delegates to the OnStop() and OnStart() methods. Triggers attached to these commands will execute the these methods.&lt;style type="text/css"&gt;
              .cf { padding: 3px; font-family: Lucida Console; font-size: 11pt; color: black; background: #ddd; } .cl { margin: 0px; } .cb1 { color: blue; } .cb2 { color: #2b91af; } .cb3 { color: green; }&lt;/style&gt;&lt;/p&gt;
&lt;div class="cf"&gt;
&lt;p class="cl"&gt;&lt;span class="cb1"&gt;public&lt;/span&gt; &lt;span class="cb1"&gt;class&lt;/span&gt; &lt;span class="cb2"&gt;LetItSnowBehavior&lt;/span&gt; : &lt;span class="cb2"&gt;Behavior&lt;/span&gt;&amp;lt;&lt;span class="cb2"&gt;Canvas&lt;/span&gt;&amp;gt; {&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;private&lt;/span&gt; &lt;span class="cb2"&gt;DispatcherTimer&lt;/span&gt; _gameLoop = &lt;span class="cb1"&gt;new&lt;/span&gt; &lt;span class="cb2"&gt;DispatcherTimer&lt;/span&gt;();&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;public&lt;/span&gt; LetItSnowBehavior() {&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb3"&gt;// Create Commands&lt;/span&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;this&lt;/span&gt;.Start = &lt;span class="cb1"&gt;new&lt;/span&gt; &lt;span class="cb2"&gt;ActionCommand&lt;/span&gt;(&lt;span class="cb1"&gt;this&lt;/span&gt;.OnStart);&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;this&lt;/span&gt;.Stop = &lt;span class="cb1"&gt;new&lt;/span&gt; &lt;span class="cb2"&gt;ActionCommand&lt;/span&gt;(&lt;span class="cb1"&gt;this&lt;/span&gt;.OnStop);&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb3"&gt;// Init timer&lt;/span&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _gameLoop.Interval = &lt;span class="cb1"&gt;new&lt;/span&gt; &lt;span class="cb2"&gt;TimeSpan&lt;/span&gt;(0, 0, 0, 0, 10);&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _gameLoop.Tick += &lt;span class="cb1"&gt;new&lt;/span&gt; &lt;span class="cb2"&gt;EventHandler&lt;/span&gt;(gameLoop_Tick);&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _gameLoop.Start();&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;public&lt;/span&gt; &lt;span class="cb2"&gt;ICommand&lt;/span&gt; Start { &lt;span class="cb1"&gt;get&lt;/span&gt;; &lt;span class="cb1"&gt;private&lt;/span&gt; &lt;span class="cb1"&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;public&lt;/span&gt; &lt;span class="cb2"&gt;ICommand&lt;/span&gt; Stop { &lt;span class="cb1"&gt;get&lt;/span&gt;; &lt;span class="cb1"&gt;private&lt;/span&gt; &lt;span class="cb1"&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;private&lt;/span&gt; &lt;span class="cb1"&gt;void&lt;/span&gt; OnStart() {&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _gameLoop.Start();&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;private&lt;/span&gt; &lt;span class="cb1"&gt;void&lt;/span&gt; OnStop() {&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _gameLoop.Stop();&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;You can use Expression Blend to attach triggers to the Commands. Select the LetItSnowBehavior object and open it properties. Click the + button for the Start property and select an EventTrigger. Select the 'buttonStart' as source and the 'Click' as event. You can even add multiple triggers to the command.&lt;/p&gt;&lt;img alt="Set Triggers on LetItSnowBehavior in Expression Blend 3.0" src="http://www.reflectionit.nl/Images/Blog/LetItSnowTriggers.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
You can download the code from &lt;a href="http://www.reflectionit.nl/download.aspx?URL=LetItSnow.zip"&gt;here&lt;/a&gt;.</description>
    </item>
    <item>
      <title>Watch my Silverlight Christmas card</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=33ffb9d7-1fdf-4b05-8a94-5322234f1584</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink33ffb9d7-1fdf-4b05-8a94-5322234f1584.aspx</link>
      <pubDate>Sun, 20 Dec 2009 10:00:31 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Click the following image to see my Christmas card which I have created using Silverlight 3.0 and Expression Blend.&lt;/p&gt;&lt;a href="http://www.reflectionit.nl/XMas2009/default.html"&gt;&lt;img alt="Click to view this Christmas card" src="http://www.reflectionit.nl/Images/Blog/Xmas2009.png" /&gt;&lt;/a&gt;
&lt;p&gt;I didn't have to write any line of &amp;nbsp;C# code. I only re-used some of my existing behaviors: &lt;a href="http://www.reflectionit.nl/Blog/default.aspx?guid=07718d3c-9cdb-471a-a3d0-2b0385708b7e"&gt;LetItSnowBehavior&lt;/a&gt; and &lt;a href="http://www.reflectionit.nl/Blog/default.aspx?guid=d81a8cf8-0345-48ee-bbde-84c2e3f21a25"&gt;ControlMediaElementAction&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Beschikbaar voor Silverlight projecten</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=b02c6b48-e815-46d1-bd85-e2a1860acb6b</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkb02c6b48-e815-46d1-bd85-e2a1860acb6b.aspx</link>
      <pubDate>Mon, 07 Dec 2009 11:42:03 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Op dit moment ben ik als Silverlight ontwikkelaar op zoek naar een project. Bent u op zoek naar een ervaren silverlight specialist/architect neem dan &lt;a href="http://www.reflectionit.nl/Contact.aspx" target="_self"&gt;contact&lt;/a&gt; met mij op. Zie ook mijn &lt;a href="http://www.reflectionit.nl/CV/default.aspx" target="_self"&gt;CV&lt;/a&gt;&amp;nbsp;voor extra infromatie over mij.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple ReportDocument for Silverlight 4</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=430acaae-2bc2-4523-b9ea-2221c8f3d11a</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink430acaae-2bc2-4523-b9ea-2221c8f3d11a.aspx</link>
      <pubDate>Wed, 25 Nov 2009 12:08:41 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have written an &lt;a href="http://www.reflectionit.nl/Articles/Report.aspx"&gt;Simple Report Library&lt;/a&gt; for Windows Forms applications a few years ago.&amp;nbsp;The&amp;nbsp;new &lt;a href="http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx#printing"&gt;Printing API&lt;/a&gt; makes it possible to create a similar solution for Silverlight 4.&lt;/p&gt;
&lt;p&gt;You create a report by instantiating a new ReportDocument object. You can set the Title and the SubTitle. Next you add Paragraphs (FrameworkElements) to the report. Finally you Print the report.&lt;/p&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: lucida console; background: #ddd; color: black; font-size: 9pt; padding-top: 5px"&gt;
&lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;ReportDocument&lt;/span&gt; r = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ReportDocument&lt;/span&gt;() {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title = &lt;span style="color: #a31515"&gt;&amp;quot;Test Title&amp;quot;&lt;/span&gt;,&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubTitle = &lt;span style="color: #a31515"&gt;&amp;quot;Test SubTitle&amp;quot;&lt;/span&gt;,&lt;/p&gt;
&lt;p style="margin: 0px"&gt;};&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt; (&lt;span style="color: blue"&gt;int&lt;/span&gt; i = &lt;span style="color: #a52a2a"&gt;0&lt;/span&gt;; i &amp;lt; &lt;span style="color: #a52a2a"&gt;40&lt;/span&gt;; i++) {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; tb = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TextBlock&lt;/span&gt;() {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Text = &lt;span style="color: #a31515"&gt;&amp;quot;Test text &amp;quot;&lt;/span&gt; + i,&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FontSize = i + &lt;span style="color: #a52a2a"&gt;10&lt;/span&gt;,&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; r.Paragraphs.Add(tb);&lt;/p&gt;
&lt;p style="margin: 0px"&gt;}&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;r.Print();&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;This prints the following &lt;a href="http://www.reflectionit.nl/Images/Blog/TestTitle.pdf" target="_blank"&gt;Test Title.pdf&lt;/a&gt; if you print it to a PDF writer.&lt;/p&gt;&lt;img alt="Test Title.pdf" src="http://www.reflectionit.nl/Images/Blog/TestTitleReport.png" /&gt; 
&lt;p&gt;The real magic is in the dp_PrintPage event handler of the ReportDocument class. The Header and the Paragraphs are added to a StackPanel. Before a paragraph is added the height (actual or the measured desired) is compared with the available space. If it doesn't fit the page is full and ready to be printed. The PageVisual is set to the StackPanel. The next page will continue with the current paragraph.&lt;/p&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: lucida console; background: #ddd; color: black; font-size: 9pt; padding-top: 5px"&gt;
&lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; pd_PrintPage(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;PrintPageEventArgs&lt;/span&gt; e) {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PageNumber++;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (_panel.Children.Count == &lt;span style="color: #a52a2a"&gt;0&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _panel.Children.Add(Header);&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;span style="color: blue"&gt;else&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// remove all except header&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;while&lt;/span&gt; (_panel.Children.Count &amp;gt; &lt;span style="color: #a52a2a"&gt;1&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _panel.Children.RemoveAt(&lt;span style="color: #a52a2a"&gt;1&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _visual.Height = e.PrintableArea.Height;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _visual.Width = e.PrintableArea.Width;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;double&lt;/span&gt; totalHeight = e.PrintableArea.Height - &lt;span style="color: blue"&gt;this&lt;/span&gt;.Margin.Top - &lt;span style="color: blue"&gt;this&lt;/span&gt;.Margin.Bottom;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;double&lt;/span&gt; totalWidth = e.PrintableArea.Width - &lt;span style="color: blue"&gt;this&lt;/span&gt;.Margin.Left - &lt;span style="color: blue"&gt;this&lt;/span&gt;.Margin.Right;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;double&lt;/span&gt; height;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (_header.ActualHeight &amp;gt; &lt;span style="color: #a52a2a"&gt;0&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; height = Header.ActualHeight;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;span style="color: blue"&gt;else&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Header.Measure(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Size&lt;/span&gt;(totalWidth, totalHeight));&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; height = Header.DesiredSize.Height;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;while&lt;/span&gt; (_currentParagraphIndex &amp;lt; Paragraphs.Count) {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; paragraph = Paragraphs[_currentParagraphIndex];&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (paragraph.ActualHeight &amp;gt; &lt;span style="color: #a52a2a"&gt;0&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; height += paragraph.ActualHeight;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;span style="color: blue"&gt;else&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;var&lt;/span&gt; size = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Size&lt;/span&gt;(totalWidth, totalHeight - height);&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; paragraph.Measure(size);&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; height += paragraph.DesiredSize.Height;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; (height &amp;gt; totalHeight) {&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// doesn't fit anymore&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _currentParagraphIndex++;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _panel.Children.Add(paragraph);&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.PageVisual = _visual;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.HasMorePages = _currentParagraphIndex &amp;lt; Paragraphs.Count;&lt;/p&gt;
&lt;p style="margin: 0px"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;I hope you like it. I will discuss creating custom headers in a next post. You can download the code from &lt;a href="http://slreportlibrary.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=38371"&gt;Codeplex&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SilverlightXP 2.0 release</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=852000e2-2be2-4fc7-a150-c1e0ddf4194a</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink852000e2-2be2-4fc7-a150-c1e0ddf4194a.aspx</link>
      <pubDate>Tue, 24 Nov 2009 12:46:14 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;&lt;a href="http://www.silverlightxp.net"&gt;&lt;img alt="Visit SilverlightXP" src="http://www.reflectionit.nl/images/blog/slxplogo.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.silverlightxp.net"&gt;SilverlightXP&lt;/a&gt; is a web application where Silverlight Developers and&amp;nbsp;Designers&amp;nbsp;can post links to controls, resources and other interesting information about Microsoft Silverlight. &lt;/p&gt;
&lt;h5&gt;AUTHORS: &lt;/h5&gt;
&lt;p&gt;SilverlightXP is a collaboration between &lt;a href="http://funkyweb.wordpress.com/" target="_self"&gt;Loek van den Ouweland&lt;/a&gt; and &lt;a href="http://www.reflectionit.nl/Blog/default.aspx"&gt;Fons Sonnemans&lt;/a&gt;. The goal was to create a great User Experience for the Silverlight Community when they search for the latest and greatest stuff about Silverlight. &lt;/p&gt;
&lt;h5&gt;TECHNICAL: &lt;/h5&gt;
&lt;p&gt;SilverlightXP is a Silverlight 3 application created with Visual Studio 2008, Expression Design 3 and Expression Blend 3. Used techniques include .NET RIA services and LINQ. A combination of URL rewriting, Silverlight Navigation Framework and ASP.NET SEO-optimization was used for optimal Google integration. &lt;/p&gt;
&lt;h5&gt;FUTURE: &lt;/h5&gt;
&lt;p&gt;SilverlightXP was built for all of us in the Silverlight Community and we would love to hear from you. If you have ideas, comments, found errors or other things you would like to share with us, please send an email to &lt;a href="feedback@silverlightxp.net "&gt;feedback@silverlightxp.net &lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Silverlight Flip Clock </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=5686196f-adbd-43c0-85aa-fdd7cb4cf54c</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink5686196f-adbd-43c0-85aa-fdd7cb4cf54c.aspx</link>
      <pubDate>Wed, 04 Nov 2009 13:40:25 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have created a simple Flip Clock using Silverlight 3 and Expression Blend 3. It uses some simple animations to flip the hours, minutes and seconds. I hope you like it. &lt;br /&gt;
&lt;/p&gt; &lt;object height="150" width="400" data="data:application/x-silverlight-2," type="application/x-silverlight-2"&gt;   &lt;param name="source" value="/ClientBin/FlipClockApp.xap" /&gt;   &lt;param name="onError" value="onSilverlightError" /&gt;   &lt;param name="background" value="white" /&gt;   &lt;param name="minRuntimeVersion" value="3.0.40624.0" /&gt;   &lt;param name="autoUpgrade" value="true" /&gt;   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=3.0.40624.0" style="text-decoration: none;"&gt;    &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none;" /&gt;&lt;/a&gt;&lt;/object&gt;
&lt;p&gt;You can download the sourcecode from &lt;a href="http://www.reflectionit.nl/download.aspx?URL=FlipClockApp.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Control a MediaElement using a custom Behavior</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=d81a8cf8-0345-48ee-bbde-84c2e3f21a25</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkd81a8cf8-0345-48ee-bbde-84c2e3f21a25.aspx</link>
      <pubDate>Sun, 11 Oct 2009 10:18:59 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Controlling a MediaElement in Silverlight isn't difficult. You use the Play(), Stop() and Pause() methods in your code. I have written the 'ControlMediaElementAction' Behavior which makes it even easier. You don't have to write a single line of code. The ControlMediaElementAction is associated with a MediaElement. It has a ControlMediaElementOption which you can set to Play, Stop, Pause and RewindAndPlay. The Invoke() methods controls (Plays, Stops, Pauses and RewindAndPlays) the AssociatedObject (MediaElement).&lt;/p&gt;&lt;style type="text/css"&gt;
 .cf { padding: 3px; font-family: Lucida Console; font-size: 10pt; color: black; background: #ddd; } .cl { margin: 0px; } .cb1 { color: blue; } .cb2 { color: #2b91af; }&lt;/style&gt;
&lt;div class="cf"&gt;
&lt;p class="cl"&gt;&lt;span class="cb1"&gt;public&lt;/span&gt; &lt;span class="cb1"&gt;class&lt;/span&gt; &lt;span class="cb2"&gt;ControlMediaElementAction&lt;/span&gt; : &lt;span class="cb2"&gt;TriggerAction&lt;/span&gt;&amp;lt;&lt;span class="cb2"&gt;MediaElement&lt;/span&gt;&amp;gt; {&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;protected&lt;/span&gt; &lt;span class="cb1"&gt;override&lt;/span&gt; &lt;span class="cb1"&gt;void&lt;/span&gt; Invoke(&lt;span class="cb1"&gt;object&lt;/span&gt; o) {&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;switch&lt;/span&gt; (ControlMediaElementOption) {&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;case&lt;/span&gt; &lt;span class="cb2"&gt;ControlMediaElementOption&lt;/span&gt;.Play:&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;this&lt;/span&gt;.AssociatedObject.Play();&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;case&lt;/span&gt; &lt;span class="cb2"&gt;ControlMediaElementOption&lt;/span&gt;.Stop:&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;this&lt;/span&gt;.AssociatedObject.Stop();&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;case&lt;/span&gt; &lt;span class="cb2"&gt;ControlMediaElementOption&lt;/span&gt;.Pause:&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;this&lt;/span&gt;.AssociatedObject.Pause();&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;case&lt;/span&gt; &lt;span class="cb2"&gt;ControlMediaElementOption&lt;/span&gt;.RewindAndPlay:&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;this&lt;/span&gt;.AssociatedObject.Position = &lt;span class="cb2"&gt;TimeSpan&lt;/span&gt;.Zero;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;this&lt;/span&gt;.AssociatedObject.Play();&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;default&lt;/span&gt;:&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;public&lt;/span&gt; &lt;span class="cb2"&gt;ControlMediaElementOption&lt;/span&gt; ControlMediaElementOption { &lt;span class="cb1"&gt;get&lt;/span&gt;; &lt;span class="cb1"&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;}&lt;/p&gt;
&lt;p class="cl"&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="cl"&gt;&lt;span class="cb1"&gt;public&lt;/span&gt; &lt;span class="cb1"&gt;enum&lt;/span&gt; &lt;span class="cb2"&gt;ControlMediaElementOption&lt;/span&gt; {&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Play, Stop, Pause, RewindAndPlay&lt;/p&gt;
&lt;p class="cl"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;You assign a ControlMediaElementAction to a MediaElement. In Expression Blend you drag it from you Asset tab and drop it on a MediaElement. Then you can select your trigger and set all other properties from the Properties tab.&lt;/p&gt;&lt;a href="http://www.reflectionit.nl/Images/Blog/ControlMediaElementAction.png"&gt;&lt;img alt="ControlMediaElementAction in Blend 3.0" src="http://www.reflectionit.nl/Images/Blog/ControlMediaElementAction.png" width="700" /&gt;&lt;/a&gt;
&lt;p&gt;In the following example I have 3 ControlMediaElementAction assigned to a MediaElement. The first is triggerd by the 'Click' event of 'buttonPlay' and uses the 'Play' option. The second is triggerd by the 'Click' event of 'buttonPause' and uses the 'Pause' option. The third is triggerd by the 'MediaEnded' event of the MediaElement and uses the 'RewindAndPlay' option, making the movie loop.&lt;/p&gt;

&lt;div style="padding:3px;font-family: Lucida Console; font-size: 10pt; color: black; background: #ddd;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp; &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;local&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:SilverlightApplication7&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;SilverlightApplication7.MainPage&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;640&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;480&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MediaElement&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SL_wmv&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;200&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Left&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;160,40,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;160&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Source&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;/SL.wmv&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Stretch&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Fill&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; AutoPlay&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;False&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Interaction.Triggers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;EventTrigger&lt;/span&gt;&lt;span style="color: red;"&gt; SourceName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;buttonPlay&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; EventName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Click&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;local&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ControlMediaElementAction&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;EventTrigger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;EventTrigger&lt;/span&gt;&lt;span style="color: red;"&gt; SourceName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;buttonPause&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; EventName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Click&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;local&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ControlMediaElementAction&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; ControlMediaElementOption&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Pause&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;EventTrigger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;EventTrigger&lt;/span&gt;&lt;span style="color: red;"&gt; EventName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;MediaEnded&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;local&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ControlMediaElementAction&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; ControlMediaElementOption&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;RewindAndPlay&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;EventTrigger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;i&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Interaction.Triggers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MediaElement&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Button&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;buttonPlay&amp;quot;&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; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;160,0,0,160&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;160&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Content&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Play&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Button&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;buttonPause&amp;quot;&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; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;160,0,0,80&amp;quot;&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;160&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Content&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Pause&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&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;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;



&lt;p&gt;You can download the sourcecode&amp;nbsp;&lt;a href="http://www.reflectionit.nl/download.aspx?URL=ControlMediaElementAction.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Silverlight XP.net </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=8ed42131-059e-4264-9a26-1bad2fa27c0b</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink8ed42131-059e-4264-9a26-1bad2fa27c0b.aspx</link>
      <pubDate>Tue, 01 Sep 2009 06:28:26 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I'm proud to announce the &lt;a href="http://www.silverlightxp.net"&gt;Silverlight XP.net&lt;/a&gt; website. It is a web application where Silverlight Developers can post links to interesting information, controls, resources e.t.c. We invite you to submit your Silverlight resources.&lt;/p&gt;
&lt;p&gt;Silverlight XP.net is a Silverlight 3.0 LOB application which uses a lot of the new techniques:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.NET Ria Services&lt;/li&gt;
&lt;li&gt;Navigation Application (deeplinking + history)&lt;/li&gt;
&lt;li&gt;Search Engine Optimization (SEO)&lt;/li&gt;
&lt;li&gt;Behaviors&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://www.silverlightxp.net"&gt;&lt;img src="http://www.reflectionit.nl/images/blog/SilverlightXP.png" /&gt;&lt;/a&gt;

&lt;p&gt;Silverlight XP was created by &lt;a href="http://funkyweb.wordpress.com/" target="_self"&gt;Loek van den Ouweland&lt;/a&gt; and me, and is currently at version 1.0. We plan to add a lot of features soon. We don’t have a feedback-function yet. Please drop comments about the website by &lt;a href="mailto:fons.sonnemans@reflectionit.nl"&gt;mail&lt;/a&gt;. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Microsoft Silverlight 3 training</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=6d82fedc-ca81-4fcf-80f7-63fa179b0d77</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink6d82fedc-ca81-4fcf-80f7-63fa179b0d77.aspx</link>
      <pubDate>Mon, 17 Aug 2009 12:34:50 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Silverlight is een 'cross-over browser plugin' van Microsoft die het mogelijk maakt om animaties, audio en video weer te geven in de webbrowser (zoals bijvoorbeeld Explorer, Firefox, Safari).&lt;/p&gt;
&lt;p&gt;Silverlight bevat een subset van het .NET 3.5 Framework waarmee,&amp;nbsp;vanuit een Microsoft .NET taal zoals C#, Visual Basic of .NET, een programma geschreven kan worden dat in een browser draait. Tot nu toe kon dat alleen met JavaScript of met Flash van Adobe.&lt;/p&gt;Reflection IT&amp;nbsp;is de eerste opleider met een &lt;a href="http://www.reflectionit.nl/Training/Silverlight3.aspx" target="_self"&gt;Microsoft Silverlight 3 training&lt;/a&gt;.
&lt;p&gt;Docenten &lt;a href="http://www.reflectionit.nl/CV/default.aspx" target="_self"&gt;Fons Sonnemans&lt;/a&gt; en &lt;a href="http://funkyweb.wordpress.com/" target="_self"&gt;Loek van den Ouweland&lt;/a&gt; verzorgen deze interactieve en praktijkgerichte trainingen voor zowel geinteresseerden als startende en meer ervaren programmeurs en grafisch vormgevers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Silverlight 3.0 LetItSnowBehavior</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=07718d3c-9cdb-471a-a3d0-2b0385708b7e</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink07718d3c-9cdb-471a-a3d0-2b0385708b7e.aspx</link>
      <pubDate>Fri, 14 Aug 2009 11:36:54 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Silverlight 3.0 has a great new feature called Behaviors. You can use them for a lot of things, one of them is to create a SNOW effect in a canvas. I know it is not yet Christmas 

but I like to be prepared. If you don't know what a behavior is or how to write them read first &lt;a href="http://silverlightplayground.boschin.it/post/2009/07/10/Silverlight-30-RTW-An-

universal-MouseWheelScrolling-behavior.aspx"&gt;this blog post&lt;/a&gt; from &lt;a href="http://silverlightplayground.boschin.it"&gt;Andrea Boschin&lt;/a&gt;.&lt;/p&gt; 

&lt;object data="data:application/x-silverlight," type="application/x-silverlight-2"
 width="500" height="400" type="application/x-silverlight-2"&gt;&lt;param name="source" value="http://www.reflectionit.nl/ClientBin/BehaviorDemo.xap" /&gt;&lt;param name="onerror" 

value="onSilverlightError" /&gt;&lt;param name="background" value="white" /&gt;&lt;param name="onLoad" value="plugInLoaded" /&gt;&lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;&lt;param 

name="autoUpgrade" value="true" /&gt;&lt;/object&gt;

&lt;p&gt;You can download the sourcecode from &lt;a href="http://www.reflectionit.nl/download.aspx?URL=LetItSnow.zip"&gt;here&lt;/a&gt;.

&lt;h3&gt;Usage&lt;/h3&gt;

&lt;p&gt;To add the LetITSnow Behavior to your own application you first have to reference the 'ReflectionIT.Behavior.dll'. Then you can apply the LetItSnowBehavior from Expression Blend 3.0 

by dragging it from the Asset Tab onto an empty Canvas. That's all.&lt;p&gt;

&lt;a href="http://www.reflectionit.nl/Images/Blog/LetItSnow.png"&gt;&lt;img src="http://www.reflectionit.nl/Images/Blog/LetItSnow.png" width="700"&gt;&lt;/a&gt;

&lt;p&gt;The Canvas will now have a Interaction.Behaviors element with the LetItSnowBehavior in it.&lt;/p&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: 11px;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #dddddd;
	/*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;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:i&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"&lt;/span&gt; 
    &lt;span class="attr"&gt;xmlns:ritb&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:ReflectionIT.Behaviors;assembly=ReflectionIT.Behaviors"&lt;/span&gt; 
    &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="BehaviorDemo.MainPage"&lt;/span&gt;
    &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="500"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="400"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="LayoutRoot"&lt;/span&gt; &lt;span class="attr"&gt;Background&lt;/span&gt;&lt;span 

class="kwrd"&gt;="White"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Canvas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;i:Interaction.Behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ritb:LetItSnowBehavior&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;i:Interaction.Behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Canvas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;FontSize&lt;/span&gt;&lt;span class="kwrd"&gt;="50"&lt;/span&gt; &lt;span 

class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Center"&lt;/span&gt; &lt;span 

class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Center"&lt;/span&gt;&lt;br /&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="LetItSnowBehavior "&lt;/span&gt; &lt;span 

class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;UserControl&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3&gt;LetItSnowBehavior implementation&lt;/h3&gt;

&lt;p&gt;The LetItSnowBehavior was created using the Behavior 'Add New Item...' template from Blend 3.0. The overriden OnAttached method generates the SnowFlakes. The SnowFlake is an Image 
with a random size, speed and opacity. The position is updated every 10 milliseconds using a DispatcherTimer.&lt;/p&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Controls;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Interactivity;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Threading;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ReflectionIT.Behaviors {

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; LetItSnowBehavior : Behavior&amp;lt;Canvas&amp;gt; {

        &lt;span class="kwrd"&gt;private&lt;/span&gt; DispatcherTimer _gameLoop = &lt;span class="kwrd"&gt;new&lt;/span&gt; DispatcherTimer();
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; _numberOfFlakes = 200;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; LetItSnowBehavior() {
            _gameLoop.Interval = &lt;span class="kwrd"&gt;new&lt;/span&gt; TimeSpan(0, 0, 0, 0, 10);
            _gameLoop.Tick += &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(gameLoop_Tick);
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnAttached() {
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.OnAttached();
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.AssociatedObject.SizeChanged +=&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="kwrd"&gt;new&lt;/span&gt; SizeChangedEventHandler

(AssociatedObject_SizeChanged);
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnDetaching() {
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.OnDetaching();
            _gameLoop.Stop();
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.AssociatedObject.Children.Clear();
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; NumberOfFlakes {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _numberOfFlakes; }
            set { _numberOfFlakes = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GenerateSnowFlakes() {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.AssociatedObject.Children.Clear();
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; NumberOfFlakes; i++) {
                SnowFlake flake = &lt;span class="kwrd"&gt;new&lt;/span&gt; SnowFlake(i, &lt;span class="kwrd"&gt;this&lt;/span&gt;.AssociatedObject.ActualHeight, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span 

class="kwrd"&gt;this&lt;/span&gt;.AssociatedObject.ActualWidth);
                &lt;span class="kwrd"&gt;this&lt;/span&gt;.AssociatedObject.Children.Add(flake);
            }
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AssociatedObject_SizeChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, SizeChangedEventArgs e) {
            GenerateSnowFlakes();
            _gameLoop.Start();
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; gameLoop_Tick(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) {
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SnowFlake flake &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.AssociatedObject.Children) {
                flake.Update();
            }
        }

    }
}&lt;/pre&gt;

&lt;p&gt;You can download the sourcecode from &lt;a href="http://www.reflectionit.nl/download.aspx?URL=LetItSnow.zip"&gt;here&lt;/a&gt;.</description>
    </item>
    <item>
      <title>ImageSlider in Silverlight 2.0</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=887a2bb4-62a6-4bb4-bc5b-4b4e91beff9a</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink887a2bb4-62a6-4bb4-bc5b-4b4e91beff9a.aspx</link>
      <pubDate>Tue, 23 Jun 2009 11:19:39 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Today I found this blog about&amp;nbsp;&lt;a href="http://speckyboy.com/2009/06/03/15-amazing-jquery-image-galleryslideshow-plugins-and-tutorials/" target="_blank"&gt;&lt;strong&gt;&lt;font color="#263f5f"&gt;15 Amazing jQuery Image Gallery/Slideshow Plugins and Tutorials&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;. I really like the &lt;a href="http://www.dreamcss.com/2009/04/create-beautiful-jquery-sliders.html" target="_blank"&gt;&lt;strong&gt;&lt;font color="#263f5f"&gt;Beautiful jQuery Slider Tutorial&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;which you can try on &lt;a href="http://dreamcss.comli.com/jquery%20sliders/" target="_self"&gt;&lt;strong&gt;&lt;font color="#263f5f"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;page. &lt;/p&gt;
&lt;p&gt;I wondered how easy it would be to create a similar solution using Silverlight 2.0. So I tried it and it was easy. I have used the HtmlBridge to initialize the ImageSlider with the correct images. Added some animations using Expression Blend. Used the VisualStateManager to style the RadioButtons.&lt;/p&gt;
&lt;p&gt;You can download the sourcecode from &lt;a href="http://www.reflectionit.nl/download.aspx?URL=ImageSlider.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;script language="javascript" type="text/javascript"&gt;  
function plugInLoaded(sender) {         
   var slider = sender.getHost().Content.Slider;         
   slider.Initialize(5, 586, 200);         
   slider.AddImage("nature-photo.png" , "Photo 1" );         
   slider.AddImage("nature-photo1.png", "Photo 2");         
   slider.AddImage("nature-photo2.png", "Photo 3");         
   slider.AddImage("nature-photo3.png", "Photo 4");         
   slider.AddImage("nature-photo4.png", "Photo 5");         
   slider.AddImage("nature-photo5.png", "Photo 6");         
   slider.AddImage("nature-photo6.png", "Photo 7");     
}
&lt;/script&gt;

&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="586" height="200"&gt;
&lt;param name="source" value="/ClientBin/ImageSlider/ClientBin/ImageSlider.xap"/&gt;
&lt;param name="onerror" value="onSilverlightError" /&gt;
&lt;param name="background" value="white" /&gt;
&lt;param name="onLoad" value="plugInLoaded" /&gt;
&lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;
&lt;param name="autoUpgrade" value="true" /&gt;
&lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;
    &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt;
&lt;/a&gt;
&lt;/object&gt;

&lt;p&gt;You have to initialize the control and add images to it using JavaScript as demonstrated in the plugInLoaded() function below. Simular to the JQuery solution.&lt;/p&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: 11px;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #dddddd;
	/*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;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;function&lt;/span&gt; plugInLoaded(sender) {
    &lt;span class="kwrd"&gt;var&lt;/span&gt; slider = sender.getHost().Content.Slider;
    slider.Initialize(5, 586, 200);
    slider.AddImage(&lt;span class="str"&gt;"nature-photo.png"&lt;/span&gt;, &lt;span class="str"&gt;"Photo 1"&lt;/span&gt;);
    slider.AddImage(&lt;span class="str"&gt;"nature-photo1.png"&lt;/span&gt;, &lt;span class="str"&gt;"Photo 2"&lt;/span&gt;);
    slider.AddImage(&lt;span class="str"&gt;"nature-photo2.png"&lt;/span&gt;, &lt;span class="str"&gt;"Photo 3"&lt;/span&gt;);
    slider.AddImage(&lt;span class="str"&gt;"nature-photo3.png"&lt;/span&gt;, &lt;span class="str"&gt;"Photo 4"&lt;/span&gt;);
    slider.AddImage(&lt;span class="str"&gt;"nature-photo4.png"&lt;/span&gt;, &lt;span class="str"&gt;"Photo 5"&lt;/span&gt;);
    slider.AddImage(&lt;span class="str"&gt;"nature-photo5.png"&lt;/span&gt;, &lt;span class="str"&gt;"Photo 6"&lt;/span&gt;);
    slider.AddImage(&lt;span class="str"&gt;"nature-photo6.png"&lt;/span&gt;, &lt;span class="str"&gt;"Photo 7"&lt;/span&gt;);
}
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

...

&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;object&lt;/span&gt; &lt;span class="attr"&gt;data&lt;/span&gt;&lt;span class="kwrd"&gt;="data:application/x-silverlight-2,"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="application/x-silverlight-2"&lt;/span&gt;
    &lt;span class="attr"&gt;width&lt;/span&gt;&lt;span class="kwrd"&gt;="586"&lt;/span&gt; &lt;span class="attr"&gt;height&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="source"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="ClientBin/ImageSlider.xap"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="onerror"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="onSilverlightError"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="background"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="white"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="onLoad"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="plugInLoaded"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="minRuntimeVersion"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="2.0.31005.0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="autoUpgrade"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="http://go.microsoft.com/fwlink/?LinkID=124807"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="text-decoration: none;"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;img&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="http://go.microsoft.com/fwlink/?LinkId=108181"&lt;/span&gt; &lt;span class="attr"&gt;alt&lt;/span&gt;&lt;span class="kwrd"&gt;="Get Microsoft Silverlight"&lt;/span&gt;
            &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="border-style: none"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;object&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Silverlight projects in Visual Studio 2010 </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=8ecd1cd1-066d-4e55-a883-abd80d311e00</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink8ecd1cd1-066d-4e55-a883-abd80d311e00.aspx</link>
      <pubDate>Tue, 19 May 2009 17:31:08 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I finally found some time to test the beta of Visual Studio 2010. No problems found yet. It even supports a visual designer (Cider) for Silverlight projects. You can now use it to drag &amp;amp; drop controls from your toolbox, add rows/columns to a grid and set properties. Things which where only possible in Expression Blend.&lt;/p&gt;

&lt;a href="http://www.reflectionit.nl/images/blog/vs2003sl.png" &gt;
&lt;img src="http://www.reflectionit.nl/images/blog/vs2003sl.png" width="500" alt="Cider in Visual Studio 2010" /&gt;&lt;/a&gt;</description>
    </item>
    <item>
      <title>Playing with Silverlight 3D Perspective</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=b1016c10-8c2e-4588-ae89-fd7d95f61636</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkb1016c10-8c2e-4588-ae89-fd7d95f61636.aspx</link>
      <pubDate>Thu, 16 Apr 2009 05:48:17 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have created a simple rotating clock using Silverlight 3.0. It uses Databinding, Animation and the new Projection property of UI Elements to apply 3D Transformations. You will have to install the &lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx" target="_blank"&gt;Developer Runtime&lt;/a&gt; first before you can see it!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.reflectionit.nl/download.aspx?URL=Silverlight3Clock.zip" target="_blank"&gt;Download the sourcecode&lt;/a&gt;&lt;/p&gt;

&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="300" height="300"&gt;
  &lt;param name="source" value="http://www.reflectionit.nl/ClientBin/Silverlight3Clock.xap"/&gt;
  &lt;param name="background" value="white" /&gt;
  &lt;param name="minRuntimeVersion" value="3.0.40307.0" /&gt;
  &lt;param name="enableGPUAcceleration" value="true" /&gt;
  &lt;param name="autoUpgrade" value="true" /&gt;
  &lt;a href="http://go.microsoft.com/fwlink/?LinkID=141205" style="text-decoration: none;"&gt;
  &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt;
  &lt;/a&gt;
&lt;/object&gt;
&lt;iframe style='visibility:hidden;height:0;width:0;border:0px'&gt;&lt;/iframe&gt;
</description>
    </item>
    <item>
      <title>Favorite MIX09 Videos</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=a1d73c9d-63a1-4002-a313-09206787ceb8</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinka1d73c9d-63a1-4002-a313-09206787ceb8.aspx</link>
      <pubDate>Tue, 31 Mar 2009 07:19:54 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I didn't go to the &lt;a href="http://live.visitmix.com/" target="_blank"&gt;MIX09&lt;/a&gt;. Luckily Microsoft has published the sessions using high quality &lt;a href="http://videos.visitmix.com/MIX09/All" target="_blank"&gt;videos&lt;/a&gt;. Here are my favorites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T16F" target="_blank"&gt;Building Microsoft Silverlight Controls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T42F" target="_blank"&gt;Consuming Web Services in Microsoft Silverlight 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T14F" target="_blank"&gt;What's New in Microsoft Silverlight 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T15F" target="_blank"&gt;High-Speed RIA Development with the Microsoft Silverlight Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T41F" target="_blank"&gt;.NET RIA Services - Building Data-Driven Applications with Microsoft Silverlight and Microsoft ASP.NET&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T60F" target="_blank"&gt;Miss March and Other Distractions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T40F" target="_blank"&gt;Building Amazing Business Centric Applications with Microsoft Silverlight 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T48F" target="_blank"&gt;Microsoft ASP.NET: Taking AJAX to the Next Level&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T63M" target="_blank"&gt;Building Data-Driven Scalable AJAX Web Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T46F" target="_blank"&gt;Microsoft ASP.NET 4.0 : What's Next?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T23F" target="_blank"&gt;Choosing between ASP.NET Web Forms and MVC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/C17F" target="_blank"&gt;Web Form Design&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/C30M" target="_blank"&gt;User Experience Design for Non-Designers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/C06F" target="_blank"&gt;Ten Ways to Ensure RIA Failure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T10F" target="_blank"&gt;RESTful Services for the Programmable Web with Windows Communication Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T39F" target="_blank"&gt;What's New in Windows Presentation Foundation (WPF) 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T73M" target="_blank"&gt;What's New for Microsoft Silverlight and Microsoft Windows Presentation Foundation (WPF) Developers in Microsoft Visual Studio 2010&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Silverlight 3.0 Beta </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=cd56a197-7d1b-4167-a5a7-561f18de041e</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkcd56a197-7d1b-4167-a5a7-561f18de041e.aspx</link>
      <pubDate>Fri, 20 Mar 2009 06:26:45 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;The Silverlight 3.0 Beta is out. Tim Heuer has written a great &lt;a href="http://timheuer.com/blog/archive/2009/03/18/silverlight-3-whats-new-a-guide.aspx" target="_blank"&gt;blog&lt;/a&gt; with all the new features. I have added the new SaveFileDialog to my &lt;a href="http://www.silverarcade.com/games/sonnemaf/sudoku" target="_blank"&gt;Sudoku&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Now I can start to write a new &lt;a href="http://www.reflectionit.nl/Training/Silverlight2.aspx" target="_blank"&gt;Silverlight 3 training!&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Update 20 july 2009: Implemented Silverlight 3.0 RTW and moved the game to &lt;a href="http://www.silverarcade.com"&gt;http://www.silverarcade.com/games/sonnemaf/sudoku&lt;/a&gt;&amp;nbsp;&lt;/p&gt;</description>
    </item>
    <item>
      <title>SCRUM in Under 10 Minutes</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=077380c1-5aae-4e72-a569-29da567c04c1</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink077380c1-5aae-4e72-a569-29da567c04c1.aspx</link>
      <pubDate>Tue, 24 Feb 2009 17:03:26 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have found  a great 'SCRUM in Under 10 Minutes' movie on &lt;a href="http://www.youtube.com/watch?hl=nl&amp;amp;v=Q5k7a9YEoUI" target="_blank"&gt;YouTube&lt;/a&gt;.&lt;br /&gt;If you don't know what SCRUM is you should really watch it.&lt;/p&gt; 

&lt;object width="445" height="284"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Q5k7a9YEoUI&amp;hl=nl&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Q5k7a9YEoUI&amp;hl=nl&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="284"&gt;&lt;/embed&gt;&lt;/object&gt;</description>
    </item>
    <item>
      <title>C# LINQ Pivot() Function</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=e3b1a10d-cd24-4810-a4bf-a4285b74dbb6</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinke3b1a10d-cd24-4810-a4bf-a4285b74dbb6.aspx</link>
      <pubDate>Thu, 22 Jan 2009 18:54:12 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have created a LINQ extension method which can be used to Pivot an enumeration. Just like you can PIVOT a SQL Query in SQL Server.&lt;/p&gt;
&lt;p&gt;The following example uses the Pivot() function to group Employees by Department and Function and aggregates the Salary using a SUM. The second example uses a different grouping and Counts the number of employees per group.&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
font-size: 11px;
        font-family: Consolas, "Courier New", Courier, Monospace;
	color: black;
	background-color: #DDDDDD;
        padding: 5px 5px 5px 5px;

}

.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;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;class&lt;/span&gt; Program {

    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Employee {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Department { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Function { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; Salary { get; set; }
    }

    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args) {

        var l = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Employee&amp;gt;() {
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Employee() { Name = &lt;span class="str"&gt;"Fons"&lt;/span&gt;, Department = &lt;span class="str"&gt;"R&amp;amp;D"&lt;/span&gt;, 
                Function = &lt;span class="str"&gt;"Trainer"&lt;/span&gt;, Salary = 2000 },
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Employee() { Name = &lt;span class="str"&gt;"Jim"&lt;/span&gt;, Department = &lt;span class="str"&gt;"R&amp;amp;D"&lt;/span&gt;, 
                Function = &lt;span class="str"&gt;"Trainer"&lt;/span&gt;, Salary = 3000 },
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Employee() { Name = &lt;span class="str"&gt;"Ellen"&lt;/span&gt;, Department = &lt;span class="str"&gt;"Dev"&lt;/span&gt;, 
                Function = &lt;span class="str"&gt;"Developer"&lt;/span&gt;, Salary = 4000 },
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Employee() { Name = &lt;span class="str"&gt;"Mike"&lt;/span&gt;, Department = &lt;span class="str"&gt;"Dev"&lt;/span&gt;, 
                Function = &lt;span class="str"&gt;"Consultant"&lt;/span&gt;, Salary = 5000 },
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Employee() { Name = &lt;span class="str"&gt;"Jack"&lt;/span&gt;, Department = &lt;span class="str"&gt;"R&amp;amp;D"&lt;/span&gt;, 
                Function = &lt;span class="str"&gt;"Developer"&lt;/span&gt;, Salary = 6000 },
            &lt;span class="kwrd"&gt;new&lt;/span&gt; Employee() { Name = &lt;span class="str"&gt;"Demy"&lt;/span&gt;, Department = &lt;span class="str"&gt;"Dev"&lt;/span&gt;, 
                Function = &lt;span class="str"&gt;"Consultant"&lt;/span&gt;, Salary = 2000 }};

        var result1 = l.Pivot(emp =&amp;gt; emp.Department, 
            emp2 =&amp;gt; emp2.Function, lst =&amp;gt; lst.Sum(emp =&amp;gt; emp.Salary));

        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var row &lt;span class="kwrd"&gt;in&lt;/span&gt; result1) {
            Console.WriteLine(row.Key);
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var column &lt;span class="kwrd"&gt;in&lt;/span&gt; row.Value) {
                Console.WriteLine(&lt;span class="str"&gt;"  "&lt;/span&gt; + column.Key + 
                    &lt;span class="str"&gt;"\t"&lt;/span&gt; + column.Value);

            }
        }

        Console.WriteLine(&lt;span class="str"&gt;"----"&lt;/span&gt;);

        var result2 = l.Pivot(emp =&amp;gt; emp.Function, 
            emp2 =&amp;gt; emp2.Department, lst =&amp;gt; lst.Count());

        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var row &lt;span class="kwrd"&gt;in&lt;/span&gt; result2) {
            Console.WriteLine(row.Key);
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var column &lt;span class="kwrd"&gt;in&lt;/span&gt; row.Value) {
                Console.WriteLine(&lt;span class="str"&gt;"  "&lt;/span&gt; + column.Key + 
                    &lt;span class="str"&gt;"\t"&lt;/span&gt; + column.Value);

            }
        }
        Console.WriteLine(&lt;span class="str"&gt;"----"&lt;/span&gt;);
    }
}
&lt;/pre&gt;
&lt;p&gt;The results in:&lt;/p&gt;
&lt;img src="http://www.reflectionit.nl/images/blog/Pivot.png" border="0" alt="Pivot Result" /&gt;
&lt;p&gt;
&lt;a href="http://www.extensionmethod.net/Details.aspx?ID=147" target="_blank"&gt;Download from extensionmethod.net&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Silverlight 2.0 Sudoku</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=e6d6ad4b-693e-42f1-93ab-0bdc19ae4dc5</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinke6d6ad4b-693e-42f1-93ab-0bdc19ae4dc5.aspx</link>
      <pubDate>Sun, 11 Jan 2009 18:59:45 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I'm developing a Silverlight 2.0 version of &lt;a href="http://en.wikipedia.org/wiki/Sudoku" target="_blank"&gt;Sudoku&lt;/a&gt;. It is mainly a programming exercise, so there aren't too many multimedia bells and whistles (yet). I would really like to get feedback on it, thanks!&lt;/p&gt;
&lt;p&gt;Click on the image below to play the Sudoku&lt;/p&gt;
&lt;a href="http://www.mydotnetplayground.nl/Sudoku/default.aspx" target="_blank"&gt;&lt;img src="http://www.reflectionit.nl/images/blog/SudokuSL.png" border="0" alt="Play Sudoku" /&gt;&lt;/a&gt;</description>
    </item>
    <item>
      <title>Silverlight 2.0 Cross Domain Policy File Checker</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=feb7dbf5-a3fe-4dff-b677-ef75aef009f4</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkfeb7dbf5-a3fe-4dff-b677-ef75aef009f4.aspx</link>
      <pubDate>Thu, 18 Dec 2008 09:31:03 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;In order to make Cross Domain calls in Silverlight 2 applications, the server you wish to download data from must have a Policy File in place that allows access to your site. I have created a Silverlight Application in which you can check the content of the Policy Files (if exists).&lt;/p&gt;
&lt;p&gt;Click on the image below to try the application&lt;/p&gt;
&lt;a href="http://www.mydotnetplayground.nl/PolicyChecker/" target="_blank"&gt;&lt;img src="http://www.reflectionit.nl/images/blog/PolicyChecker.png" border="0" alt="Try application" /&gt;&lt;/a&gt;</description>
    </item>
    <item>
      <title>Silverlight 2.0 Locator for Objectmap</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=657df9c1-e173-47dc-82bd-a5a508152dcf</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink657df9c1-e173-47dc-82bd-a5a508152dcf.aspx</link>
      <pubDate>Mon, 10 Nov 2008 17:13:36 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have created a new Silverlight 2 Control which is used in the &lt;a href="http://www.objectmap.nl/" target="_blank"&gt;Objectmap&lt;/a&gt; website. This control makes it easy for the customers of accounts to find their nearest object (branch, offices or sales outlet). They can also immediately retrieve dynamic directions to this location or link to a more info page.
&lt;/p&gt;
&lt;p&gt;Have a look at &lt;a href="http://www.objectmap.nl/OverOns/Locator.aspx" target="_blank"&gt;this&lt;/a&gt; demopage, sorry in Dutch only.&lt;/p&gt;
&lt;p&gt;This control uses: Cross Domain WCF networking, Data Binding, Isolated Storage Settings, Google Maps API calls, Cross Domain HTML Bridge and Styling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Silverlight 2.0 Minesweeper</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=17c3d73f-241b-4039-9087-802029e7445c</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink17c3d73f-241b-4039-9087-802029e7445c.aspx</link>
      <pubDate>Thu, 23 Oct 2008 06:15:27 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Earlier I have created a &lt;a href="http://www.reflectionit.nl/Blog/default.aspx?guid=64871c13-0969-49a7-afb8-020d20c07916" target="_blank"&gt;WPF&lt;/a&gt; and a &lt;a href="http://www.reflectionit.nl/Articles/Minesweeper.aspx" target="_blank"&gt;Windows Forms&lt;/a&gt; version of Minesweeper. Today I proud to show you my Silverlight 2.0 (RTW) version. Click on the image below to play this version.&lt;/p&gt;
&lt;a href="http://www.mydotnetplayground.nl/minesweepersl2"&gt;
&lt;img src="http://www.reflectionit.nl/images/blog/MinesweeperSL.png" border=0 /&gt;
&lt;/a&gt;
&lt;p&gt;You can download the C# source code and the example website &lt;a href="http://www.reflectionit.nl/download.aspx?URL=MinesweeperSL.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>SQL Server 2008 HierarchyID Data Type</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=c858bb70-af9d-47e5-b079-4ffad2d36e9a</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkc858bb70-af9d-47e5-b079-4ffad2d36e9a.aspx</link>
      <pubDate>Wed, 15 Oct 2008 16:16:38 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;br /&gt;
&lt;table&gt;
&lt;tr valign="top"&gt;
&lt;td&gt;
&lt;img src="http://www.reflectionit.nl/images/blog/dotnetmagazine22.jpg" /&gt;

&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;The Dutch Microsoft .NET magazine #22 (September 2008) contains an article I have written an Introduction to the SQL Server 2008 HierarchyID Data Type. You can download the complete source of the article &lt;a href="http://www.reflectionit.nl/download.aspx?URL=IntroHIERARCHYID.zip" target="_blank"&gt;here&lt;/a&gt;. In this source I also fixed the problem with the IsDescendant() method. This method was renamed in RC0, my article was based on a Beta. The method is renamed to IsDescendantOf() and the argument has also changed.
&lt;/p&gt;
&lt;p&gt;
The article is available online in PDF format on &lt;a href="http://download.microsoft.com/download/1/3/0/130ccf47-be89-48ee-829d-3a6568befbaa/114605.pdf" target="_blank"&gt;download.microsoft.com&lt;/a&gt;. Please note that the article is in Dutch. The complete .NET magazine #22 is available online &lt;a href="http://msdn.microsoft.com/nl-nl/cc998678.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</description>
    </item>
    <item>
      <title>Hello World in Silverlight 2 using Visual Studio 2008 SP1 Video</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=da53e37e-0951-470e-b02a-0383fc2823b4</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkda53e37e-0951-470e-b02a-0383fc2823b4.aspx</link>
      <pubDate>Thu, 09 Oct 2008 09:06:52 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Dit is mijn eerste Silverlight 2 instructie video. In deze video toon ik hoe je een eenvoudige Hello World applicatie kunt opzetten met behulp van Silverlight 2 (RC0) en Visual Studio 2008 met Service Pack 1. &lt;/p&gt;
&lt;a href="http://www.reflectionit.nl/Blog/Videos/HelloWorld/Default.html"&gt;
&lt;img src="http://www.reflectionit.nl/Images/Blog/HelloWorld.png" Width="400" Height="300" border="0" alt="Toon Video" /&gt;
&lt;/a&gt;
&lt;p&gt;Download de
&lt;a href="http://www.reflectionit.nl/download.aspx?URL=Silverlight/HelloWorld.zip" target="_blank"&gt;HelloWorld.zip&lt;/a&gt; sourcecode. Zorg er wel voor dat je alle &lt;a href="http://silverlight.net/GetStarted/sl2rc0.aspx" target="_blank"&gt;benodigde software&lt;/a&gt; geinstalleerd hebt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fix the ASP.NET Themes with IE8’s X-UA-Compatible header problem</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=5d3b9eb5-54e6-47de-9d61-0f09033cb943</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink5d3b9eb5-54e6-47de-9d61-0f09033cb943.aspx</link>
      <pubDate>Fri, 26 Sep 2008 05:31:57 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
font-size: 11px;
        font-family: Consolas, "Courier New", Courier, Monospace;
	color: black;
	background-color: #DDDDDD;
        padding: 5px 5px 5px 5px;

}

.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;
&lt;p&gt;If you’ve got a page that doesn’t render correctly in IE8’s new standards mode, you can add a meta tag to the page which requests that IE8 render it in IE7 mode. IE8 only recognizes the X-UA-Compatible header if it’s the first META tag, appearing immediately after the &lt;HEAD&gt; tag.&lt;/p&gt; 
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;  &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="Head1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;meta&lt;/span&gt; &lt;span class="attr"&gt;http-equiv&lt;/span&gt;&lt;span class="kwrd"&gt;="X-UA-Compatible"&lt;/span&gt; &lt;span class="attr"&gt;content&lt;/span&gt;&lt;span class="kwrd"&gt;="IE=7"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;meta&lt;/span&gt; &lt;span class="attr"&gt;http-equiv&lt;/span&gt;&lt;span class="kwrd"&gt;="Content-Type"&lt;/span&gt; &lt;span class="attr"&gt;content&lt;/span&gt;&lt;span class="kwrd"&gt;="text/html; charset=utf-8"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;link&lt;/span&gt; &lt;span class="attr"&gt;rel&lt;/span&gt;&lt;span class="kwrd"&gt;="shortcut icon"&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="favicon.ico"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Test&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;[...]&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h4&gt;The Problem&lt;/h4&gt;
&lt;p&gt;The ASP.NET Theme system writes out the theme CSS reference immediately after the &amp;lt;HEAD&amp;gt; tag. This makes it impossible to set the X-UA-Compatible header or to use Stylesheets in your theme folder.
&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="Head1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;link&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="App_Themes/Default/Stylesheet.css"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/css"&lt;/span&gt; &lt;span class="attr"&gt;rel&lt;/span&gt;&lt;span class="kwrd"&gt;="stylesheet"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;meta&lt;/span&gt; &lt;span class="attr"&gt;http-equiv&lt;/span&gt;&lt;span class="kwrd"&gt;="X-UA-Compatible"&lt;/span&gt; &lt;span class="attr"&gt;content&lt;/span&gt;&lt;span class="kwrd"&gt;="IE=7"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;meta&lt;/span&gt; &lt;span class="attr"&gt;http-equiv&lt;/span&gt;&lt;span class="kwrd"&gt;="Content-Type"&lt;/span&gt; &lt;span class="attr"&gt;content&lt;/span&gt;&lt;span class="kwrd"&gt;="text/html; charset=utf-8"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;link&lt;/span&gt; &lt;span class="attr"&gt;rel&lt;/span&gt;&lt;span class="kwrd"&gt;="shortcut icon"&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="favicon.ico"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Test&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;[...]&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h4&gt;The Solution&lt;/h4&gt;
&lt;p&gt;To fix this problem I have added an implementation for the Application_PreRequestHandlerExecute event in the Global.asax. This method will sort the controls inside the header. It places the X-UA-Compatible metatag on top. I use an anonymous method which is subscribed to the PreRenderComplete event of page. This method uses LINQ to find the metatag. Then removes it from the header and add it again on top.&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;void&lt;/span&gt; Application_PreRequestHandlerExecute(&lt;span class="kwrd"&gt;object&lt;/span&gt; src, EventArgs e) {
    Page p = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Context.Handler &lt;span class="kwrd"&gt;as&lt;/span&gt; Page;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (p != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
        p.PreRenderComplete += (sender, ee) =&amp;gt; {
            &lt;span class="rem"&gt;// I can't use p, it has no Header set (strange), use sender instead&lt;/span&gt;
            Page page = sender &lt;span class="kwrd"&gt;as&lt;/span&gt; Page; 
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (page.Header != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
                &lt;span class="rem"&gt;// Find the Compatible Meta tag&lt;/span&gt;
                var ctrl = page.Header.Controls.Cast&amp;lt;Control&amp;gt;().FirstOrDefault(
                    c =&amp;gt; c &lt;span class="kwrd"&gt;is&lt;/span&gt; HtmlMeta &amp;amp;&amp;amp; ((HtmlMeta)c).HttpEquiv == &lt;span class="str"&gt;"X-UA-Compatible"&lt;/span&gt;);

                &lt;span class="rem"&gt;// If found remove it and add it on top&lt;/span&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (ctrl != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
                    page.Header.Controls.Remove(ctrl);
                    page.Header.Controls.AddAt(0, ctrl);
                }
            }
        };
    }
}&lt;/pre&gt;
&lt;p&gt;This results in the correct HTML.&lt;/p&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="Head1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;meta&lt;/span&gt; &lt;span class="attr"&gt;http-equiv&lt;/span&gt;&lt;span class="kwrd"&gt;="X-UA-Compatible"&lt;/span&gt; &lt;span class="attr"&gt;content&lt;/span&gt;&lt;span class="kwrd"&gt;="IE=7"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;link&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="App_Themes/Default/Stylesheet.css"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/css"&lt;/span&gt; &lt;span class="attr"&gt;rel&lt;/span&gt;&lt;span class="kwrd"&gt;="stylesheet"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;meta&lt;/span&gt; &lt;span class="attr"&gt;http-equiv&lt;/span&gt;&lt;span class="kwrd"&gt;="Content-Type"&lt;/span&gt; &lt;span class="attr"&gt;content&lt;/span&gt;&lt;span class="kwrd"&gt;="text/html; charset=utf-8"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;link&lt;/span&gt; &lt;span class="attr"&gt;rel&lt;/span&gt;&lt;span class="kwrd"&gt;="shortcut icon"&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="favicon.ico"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Test&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;[...]&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>PEAK-IT Summer DevNight 2008 </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=3d249847-7299-4f9c-af3c-ff4c7ff2732f</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink3d249847-7299-4f9c-af3c-ff4c7ff2732f.aspx</link>
      <pubDate>Fri, 04 Jul 2008 04:49:41 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;On Juny 3, I did a Visual Studio 2008 presentation on the &lt;a href="http://www.peak-it.nl/" target="_blank"&gt;PEAK-IT&lt;/a&gt; Summer DevNight 2008 at the Fulcotheater in IJsselstein.&lt;/p&gt;

&lt;p&gt;You can download the slide deck &lt;a href="http://www.reflectionit.nl/download.aspx?URL=VS2008@PeakIT.ppt"&gt;here&lt;/a&gt;.&lt;/P&gt;

&lt;p&gt;I had a good time presenting this sessions. I hope it was a useful for you as well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Silverlight 2.0 RollMenu</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=bfb16878-c299-47b8-8c1f-934e5381510a</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkbfb16878-c299-47b8-8c1f-934e5381510a.aspx</link>
      <pubDate>Tue, 24 Jun 2008 10:41:48 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have created a RollMenu control in Silverlight 2 Beta 2. It uses an Xml file to configure the menu items.&lt;/p&gt;
&lt;p&gt;Click on following image for a live demo.&lt;/p&gt;
&lt;a href="http://www.mydotnetplayground.nl/menu/" /&gt;
&lt;img alt="Live Demo" border="0" src="http://www.reflectionit.nl/images/blog/SL2Menu.png" /&gt;&lt;/a&gt;
&lt;p&gt;You can download the C# source code and the example website &lt;a href="http://www.reflectionit.nl/download.aspx?URL=Silverlight2RollMenu.zip"&gt;here&lt;/a&gt;.&lt;/P&gt;
&lt;p&gt;
&lt;strong&gt;Update 16-Oct-2008&lt;/strong&gt;: Upgraded to the RTW version of Silverlight.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hot Technologies Day </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=7274d6d5-9fbb-4cd2-b0d5-e804b294bf85</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink7274d6d5-9fbb-4cd2-b0d5-e804b294bf85.aspx</link>
      <pubDate>Wed, 18 Jun 2008 05:43:14 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;On June 17, I did two sessions on the Hot Technologies Day for Achmea (Interpolis) in Tilburg. I have given many &lt;a href="http://www.reflectionit.nl/Training/default.aspx"&gt;trainings&lt;/a&gt; (C#, ASP.NET 2.0, AJAX, SQL2005, VS2008) at Achmea the last year. It is a very innovative company and very fun to work for.&lt;/p&gt;

&lt;p&gt;This Hot Technologies Day was a mini seminar with 4 sessions: Silverlight 2, VSTS DB Pro, LINQ + Entity Framework, Microsoft Office SharePoint Server. Here is a picture of me taken during the Silverlight 2 session:&lt;/p&gt;

&lt;img src="http://www.reflectionit.nl/images/blog/FotoFonsSonnemans.png" /&gt;

&lt;p&gt;In the Silverlight 2 session I gave an overview of Silverlight 2 Beta 2. You can download the slide deck &lt;a href="http://www.reflectionit.nl/download.aspx?URL=Silverlight2.ppt"&gt;here&lt;/a&gt;.&lt;/P&gt;

&lt;p&gt;In the LINQ + Entity Framework session I gave an overview of C# 3.0, LINQ, LINQ to SQL and Entity Framework. You can download the slide deck &lt;a href="http://www.reflectionit.nl/download.aspx?URL=LinqAndEF.ppt"&gt;here&lt;/a&gt;.&lt;/P&gt;


&lt;p&gt;I had a good time presenting these sessions. I hope it was a useful for you as well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generic BidirectionalAssociationCollection</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=b0ff4947-b110-458e-a903-6c66936d43d3</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkb0ff4947-b110-458e-a903-6c66936d43d3.aspx</link>
      <pubDate>Tue, 25 Mar 2008 12:39:12 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Bidirectional associations are easy to design but difficult to program. You must write lot's of synchronization code with the risk of making mistakes. Have a look at the following example in which there is a bidirectional association between Employee (Employer) and Company (Employees).&lt;/p&gt;
&lt;img src="http://www.reflectionit.nl/images/blog/EmpComp1.png" /&gt;
&lt;p&gt;The synchronization code is implemented in the AddEmployee(), RemoveEmployee() and the (Set)Employer methods.&lt;/p&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
font-size: 11px;
        font-family: Consolas, "Courier New", Courier, Monospace;
	color: black;
	background-color: #DDDDDD;
        padding: 5px 5px 5px 5px;

}

.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;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Employee {

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; Salary { get; set; }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; Company _employer;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; Company Employer {
        get {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; _employer;
        }
        set {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Employer != &lt;span class="kwrd"&gt;value&lt;/span&gt;) {
                
                &lt;span class="rem"&gt;// Remove from 'old' Employer&lt;/span&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (Employer != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
                    Company old = _employer;
                    &lt;span class="kwrd"&gt;this&lt;/span&gt;._employer = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
                    old.RemoveEmployee(&lt;span class="kwrd"&gt;this&lt;/span&gt;);
                }

                &lt;span class="rem"&gt;// Set the Employer    &lt;/span&gt;
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._employer = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
                
                &lt;span class="rem"&gt;// Add to 'new' Employer&lt;/span&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (Employer != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
                    Employer.AddEmployee(&lt;span class="kwrd"&gt;this&lt;/span&gt;);
                }
            }
        }
    }
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Company {

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; List&amp;lt;Employee&amp;gt; _employees = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Employee&amp;gt;();

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddEmployee(Employee emp) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!_employees.Contains(emp)) {
            _employees.Add(emp);
            emp.Employer = &lt;span class="kwrd"&gt;this&lt;/span&gt;;  &lt;span class="rem"&gt;// Synchronize&lt;/span&gt;
        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RemoveEmployee(Employee emp) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (_employees.Contains(emp)) {
            _employees.Remove(emp);
            emp.Employer = &lt;span class="kwrd"&gt;null&lt;/span&gt;; &lt;span class="rem"&gt;// Synchronize&lt;/span&gt;
        }
    }
}&lt;/pre&gt;

&lt;p&gt;In the following example Employee 'fons' is added to Company 'Reflection IT'. The Employer property of Employee 'Jim' is set to Company 'Dummy inc'.&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
Employee fons = &lt;span class="kwrd"&gt;new&lt;/span&gt; Employee { Name = &lt;span class="str"&gt;"Fons"&lt;/span&gt;, Salary = 2000 };
Employee jim = &lt;span class="kwrd"&gt;new&lt;/span&gt; Employee { Name = &lt;span class="str"&gt;"Jim"&lt;/span&gt;, Salary = 3000 };

Company r = &lt;span class="kwrd"&gt;new&lt;/span&gt; Company { Name = &lt;span class="str"&gt;"Reflection IT"&lt;/span&gt; };
Company d = &lt;span class="kwrd"&gt;new&lt;/span&gt; Company { Name = &lt;span class="str"&gt;"Dummy Inc"&lt;/span&gt; };

r.AddEmployee(fons);

jim.Employer = d;&lt;/pre&gt;

&lt;p&gt;This solution has some limitations. The employees collection in Company is private and the AddEmployee() and RemoveEmployee() methods are necessary but not business related. I have tried to solve this by creating an extra EmployeeList class which solves these problems.&lt;/p&gt;
&lt;img src="http://www.reflectionit.nl/images/blog/EmpComp2.png" /&gt;
&lt;p&gt;The Employees property is now a readonly public field of the type EmployeeList. The AddEmployee() and RemoveEmployee() methods are removed. This synchonisation logic is now implemented in the InsertItem() and RemoveItem() methods of the EmployeeList class. These methods override the base class (Collection&lt;T&gt;) implementation and are automatically called when an item is added or removed.&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Company {

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; EmployeeList Employees;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; Company() {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.Employees = &lt;span class="kwrd"&gt;new&lt;/span&gt; EmployeeList(&lt;span class="kwrd"&gt;this&lt;/span&gt;);
    }

}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; EmployeeList : Collection&amp;lt;Employee&amp;gt; {

    &lt;span class="kwrd"&gt;private&lt;/span&gt; Company _owner;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; EmployeeList(Company owner) {
        _owner = owner;
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InsertItem(&lt;span class="kwrd"&gt;int&lt;/span&gt; index, Employee item) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;this&lt;/span&gt;.Contains(item)) {
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.InsertItem(index, item);
            item.Employer = _owner;
        }
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RemoveItem(&lt;span class="kwrd"&gt;int&lt;/span&gt; index) {
        Employee emp = &lt;span class="kwrd"&gt;this&lt;/span&gt;[index];
        &lt;span class="kwrd"&gt;base&lt;/span&gt;.RemoveItem(index);
        emp.Employer = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
    }
}&lt;/pre&gt;

&lt;p&gt;Employees are added to a Company using the Add() method of the Employees property. Or you can set the Employer of an Employee.&lt;/p&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
Employee fons = &lt;span class="kwrd"&gt;new&lt;/span&gt; Employee { Name = &lt;span class="str"&gt;"Fons"&lt;/span&gt;, Salary = 2000 };
Employee jim = &lt;span class="kwrd"&gt;new&lt;/span&gt; Employee { Name = &lt;span class="str"&gt;"Jim"&lt;/span&gt;, Salary = 3000 };

Company r = &lt;span class="kwrd"&gt;new&lt;/span&gt; Company { Name = &lt;span class="str"&gt;"Reflection IT"&lt;/span&gt; };
Company d = &lt;span class="kwrd"&gt;new&lt;/span&gt; Company { Name = &lt;span class="str"&gt;"Dummy Inc"&lt;/span&gt; };

r.Employees.Add(fons);

jim.Employer = d;&lt;/pre&gt;

&lt;p&gt;The design is now much better but the implementation still sucks. The risk of making mistakes is still too high. I have created a Generic BidirectionalAssociationCollection class which solves this.&lt;/p&gt;
&lt;img src="http://www.reflectionit.nl/images/blog/EmpComp3.png" /&gt;
&lt;p&gt;The EmployeeList class now derives from the abstract BidirectionalAssociationCollection class. In it's overriden SyncChild() method the synchronisation is implemented by setting the Employer property of the child to the parent.&lt;/p&gt;
&lt;p&gt;The Employee class is now also simplified a lot, reducing the risk of mistakes. The setter of the Employee property is now only 1 line of code. This code uses the static SyncParent() method to synchronize the Employees and the Employer. A Lambda expression is used to retrieve the Employees property of a Company.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; I had to introduce a PauseSync field to avoid call stack overflows. This solution is not thread safe (yet).&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Employee {

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; Salary { get; set; }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; Company _employer;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; Company Employer {
        get {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; _employer;
        }
        set {
            _employer = EmployeeList.SyncParent(&lt;span class="kwrd"&gt;this&lt;/span&gt;, _employer, &lt;span class="kwrd"&gt;value&lt;/span&gt;, p =&amp;gt; p.Employees);
        }
    }
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Company {

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; EmployeeList Employees;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; Company() {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.Employees = &lt;span class="kwrd"&gt;new&lt;/span&gt; EmployeeList(&lt;span class="kwrd"&gt;this&lt;/span&gt;);
    }
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; BidirectionalAssociationCollection&amp;lt;TChild, TParent&amp;gt; : Collection&amp;lt;TChild&amp;gt; {

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; TParent SyncParent(TChild child, TParent oldParent, TParent newParent, 
             Func&amp;lt;TParent, BidirectionalAssociationCollection&amp;lt;TChild, TParent&amp;gt;&amp;gt; getCollection) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;object&lt;/span&gt;.ReferenceEquals(oldParent, newParent)) {

            &lt;span class="rem"&gt;// Remove from 'old' Employer&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (oldParent != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
                var oldList = getCollection(oldParent);
                &lt;span class="kwrd"&gt;try&lt;/span&gt; {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!oldList.PauseSync) {
                        oldList.PauseSync = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                        oldList.Remove(child);
                    }
                } &lt;span class="kwrd"&gt;finally&lt;/span&gt; {
                    oldList.PauseSync = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                }
            }

            &lt;span class="rem"&gt;// Add to 'new' Employer&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (newParent != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
                var newList = getCollection(newParent);
                &lt;span class="kwrd"&gt;try&lt;/span&gt; {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!newList.PauseSync) {
                        newList.PauseSync = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                        newList.Add(child);
                    }
                } &lt;span class="kwrd"&gt;finally&lt;/span&gt; {
                    newList.PauseSync = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                }
            }
        }
        &lt;span class="kwrd"&gt;return&lt;/span&gt; newParent;
    }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; PauseSync;
    &lt;span class="kwrd"&gt;protected&lt;/span&gt; TParent Owner { get; &lt;span class="kwrd"&gt;private&lt;/span&gt; set; }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; BidirectionalAssociationCollection(TParent owner) {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.Owner = owner;
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InsertItem(&lt;span class="kwrd"&gt;int&lt;/span&gt; index, TChild item) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;this&lt;/span&gt;.Contains(item)) {
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.InsertItem(index, item);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!PauseSync) {
                SyncChild(item, Owner);
            }
        }
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RemoveItem(&lt;span class="kwrd"&gt;int&lt;/span&gt; index) {
        var item = &lt;span class="kwrd"&gt;this&lt;/span&gt;[index];
        &lt;span class="kwrd"&gt;base&lt;/span&gt;.RemoveItem(index);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!PauseSync) {
            SyncChild(item, &lt;span class="kwrd"&gt;default&lt;/span&gt;(TParent));
        }
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ClearItems() {
        var list = &lt;span class="kwrd"&gt;this&lt;/span&gt;.ToArray();
        &lt;span class="kwrd"&gt;base&lt;/span&gt;.ClearItems();
        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var item &lt;span class="kwrd"&gt;in&lt;/span&gt; list) {
            SyncChild(item, &lt;span class="kwrd"&gt;default&lt;/span&gt;(TParent));
        }
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetItem(&lt;span class="kwrd"&gt;int&lt;/span&gt; index, TChild item) {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.PauseSync = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        var old = &lt;span class="kwrd"&gt;this&lt;/span&gt;[index];
        SyncChild(old, &lt;span class="kwrd"&gt;default&lt;/span&gt;(TParent));
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.PauseSync = &lt;span class="kwrd"&gt;false&lt;/span&gt;;

        &lt;span class="kwrd"&gt;base&lt;/span&gt;.SetItem(index, item);

        &lt;span class="kwrd"&gt;this&lt;/span&gt;.PauseSync = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        SyncChild(item, Owner);
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.PauseSync = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SyncChild(TChild child, TParent parent);
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; EmployeeList : BidirectionalAssociationCollection&amp;lt;Employee, Company&amp;gt; {

    &lt;span class="kwrd"&gt;public&lt;/span&gt; EmployeeList(Company parent) : &lt;span class="kwrd"&gt;base&lt;/span&gt;(parent) {
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SyncChild(Employee child, Company parent) {
        child.Employer = parent;
    }
}&lt;/pre&gt;

&lt;p&gt;You can download the final solution written in C# 3.0 and a Visual Studio 2008 Test project 
&lt;a href="http://www.reflectionit.nl/download.aspx?URL=BidirectionalAssociationCollection.zip" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ExtensionMethod.net</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=0b8127b5-f0cb-49b0-b4b5-d16aa3cb7430</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink0b8127b5-f0cb-49b0-b4b5-d16aa3cb7430.aspx</link>
      <pubDate>Sun, 09 Dec 2007 20:04:55 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Together with my friend &lt;a href="http://www.toverstudio.nl"&gt;Loek van den Ouweland&lt;/a&gt; I have created our new website: &lt;a href="http://www.extensionmethod.net"&gt;ExtensionMethod.net&lt;/a&gt;. This website is setup for finding and sharing .NET 3.5 ExtensionMethods written in &lt;a href="http://msdn2.microsoft.com/en-us/library/bb383977(VS.90).aspx"&gt;C# 3.0&lt;/a&gt; or &lt;a href="http://msdn2.microsoft.com/en-us/library/bb384936(VS.90).aspx"&gt;VB.NET 2008&lt;/a&gt;. 
&lt;/p&gt;
&lt;a href="http://www.extensionmethod.net"&gt;&lt;img border="0" src="http://www.reflectionit.nl/images/blog/ExtensionMethod.jpg" /&gt;&lt;/a&gt;
&lt;p&gt;I hope you will use it to publish your own extension methods. It is still in BETA but we hope to go live real soon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trace LINQ to SQL Queries</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=cba15978-c792-44c9-aff2-26dbcc0da81e</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkcba15978-c792-44c9-aff2-26dbcc0da81e.aspx</link>
      <pubDate>Tue, 04 Dec 2007 11:11:11 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;ASP.NET Tracing is a powerful mechanism. LINQ to SQL doesn't support it out of the box. The DataContext class however has a Log property which can be set to a TextWriter object. This TextWriter object writes all SQL queries which are executed.&lt;/p&gt;
&lt;p&gt;I have created a small class which derives from TextWriter to write all SQL queries to the System.Diagnostics.Trace class. I found out that I only had to override the WriteLine(string) and Write(string) methods.&lt;/p&gt;
&lt;img src="/images/blog/TextToTraceWriter.jpg" /&gt;
&lt;p&gt;The easiest way to assign a new TextToTraceWriter to the Log property of the DataContext object is by implementing the partial OnCreated() method in a partial class. See the following example in which also the Trace Category is set.&lt;/p&gt;
&lt;img src="/images/blog/NorthwindDataClasesDataContext.jpg" /&gt;
&lt;p&gt;I changed my web.config and added a system.diagnostics section. In this section I added the WebPageTraceListener tracelistner. In my project the LINQ to SQL Classes are placed in the App_Code folder and not in a referenced ClassLibrary. To enable diagnostics tracing for my web project I have to add the compileOption="/d:TRACE" to the c# compiler in the system.compilers section of the web.config. For ClassLibraries you only have to check the 'Define TRACE constant' Build Option in the Project Properties.&lt;/p&gt;
&lt;img src="/images/blog/LinqDemo.web.config.jpg" /&gt;
&lt;p&gt;When you add tracing to the page you will see all LINQ queries in the Trace. This will give you a better understanding in what is going on behind the LINQ curtains&lt;/p&gt;
&lt;a href="/images/blog/LinqTrace.jpg"&gt;&lt;img src="/images/blog/LinqTrace.jpg" width="718px" /&gt;&lt;/a&gt;
&lt;p&gt;The TextToTraceWriter class can also be used for Windows Forms or Console Applications in which LINQ is used.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.reflectionit.nl/download.aspx?URL=TraceLINQ.zip" target="_blank"&gt;Click here&lt;/a&gt; to download a copy of the above sample in order to try it out on your own machine.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>ConvertSelectedTextToAssociatedLabel Macro</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=9d6e1353-4b62-4bdf-b8e4-6e7b52954456</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink9d6e1353-4b62-4bdf-b8e4-6e7b52954456.aspx</link>
      <pubDate>Tue, 09 Oct 2007 15:46:39 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have created a new Visual Studio 2005 Macro which can be used to convert a literal text to an asp:Label that is associated to the next control. You first have to select the text and then Run the ConvertSelectedTextToAssociatedLabel Macro. In the example below the text &lt;strong&gt;Age:&lt;/strong&gt; is selected.&lt;/p&gt;
&lt;img src="http://www.reflectionit.nl/images/blog/ConvertToLabel1.png" /&gt;
&lt;p&gt;The result is an asp:Label with the correct Text and AssociatedControlID attributes.&lt;/p&gt;
&lt;img src="http://www.reflectionit.nl/images/blog/ConvertToLabel2.png" /&gt;
&lt;p&gt;Download &lt;a href="http://www.reflectionit.nl/download.aspx?URL=ReflectionITMacros2005.zip" target="_blank"&gt;Zipfile&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My Code Snippets</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=3bfa2cb8-4c5f-4f69-9542-474924d337ec</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink3bfa2cb8-4c5f-4f69-9542-474924d337ec.aspx</link>
      <pubDate>Tue, 02 Oct 2007 10:19:16 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I use Visual Studio 2005 Code Snippets a lot. Especially during trainings. I have created some snippets myself which I want to share. Download this &lt;a href="http://www.reflectionit.nl/download.aspx?URL=MyCodeSnippets.zip" target="_blank"&gt;zipfile&lt;/a&gt; and extract it in the "&lt;i&gt;My Documents&lt;/i&gt;\Visual Studio 2005\Code Snippets\Visual C#\My Code Snippets" folder.&lt;/p&gt;
&lt;img src="http://www.reflectionit.nl/images/CodeSnippets.jpg" /&gt;</description>
    </item>
    <item>
      <title>ASP.NET ViewStateParameter</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=fb839763-f2db-493b-803e-4b2f2af8d13f</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkfb839763-f2db-493b-803e-4b2f2af8d13f.aspx</link>
      <pubDate>Wed, 30 May 2007 05:55:09 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I like the ASP.NET 2.0 DataSource controls. They are very flexible and easy to use. It has some great parameters like SessionParameter and ControlParameter. It doesn't have a ViewStateParameter. I have written it myself to fill this gap.&lt;/p&gt;

&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Data&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Configuration&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Web&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Web&lt;span class="punctuation"&gt;.&lt;/span&gt;Security&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Web&lt;span class="punctuation"&gt;.&lt;/span&gt;UI&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Web&lt;span class="punctuation"&gt;.&lt;/span&gt;UI&lt;span class="punctuation"&gt;.&lt;/span&gt;WebControls&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Web&lt;span class="punctuation"&gt;.&lt;/span&gt;UI&lt;span class="punctuation"&gt;.&lt;/span&gt;WebControls&lt;span class="punctuation"&gt;.&lt;/span&gt;WebParts&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Web&lt;span class="punctuation"&gt;.&lt;/span&gt;UI&lt;span class="punctuation"&gt;.&lt;/span&gt;HtmlControls&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;&lt;span class="keyword"&gt;namespace&lt;/span&gt; ClassLibrary&lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; ViewStateParameter &lt;span class="punctuation"&gt;:&lt;/span&gt; Parameter &lt;span class="punctuation"&gt;{&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;private&lt;/span&gt; String &lt;span class="identifier"&gt;_key&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;public&lt;/span&gt; String Key &lt;span class="punctuation"&gt;{&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="identifier"&gt;get&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="identifier"&gt;_key&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="identifier"&gt;set&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="identifier"&gt;_key&lt;/span&gt; &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="identifier"&gt;value&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;protected&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;object&lt;/span&gt; Evaluate&lt;span class="punctuation"&gt;(&lt;/span&gt;HttpContext &lt;span class="identifier"&gt;context&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; Control &lt;span class="identifier"&gt;control&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspType t &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="identifier"&gt;control&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;Page&lt;span class="punctuation"&gt;.&lt;/span&gt;GetType&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspSystem&lt;span class="punctuation"&gt;.&lt;/span&gt;Reflection&lt;span class="punctuation"&gt;.&lt;/span&gt;PropertyInfo &lt;span class="identifier"&gt;pi&lt;/span&gt; &lt;span class="punctuation"&gt;=&lt;/span&gt; t&lt;span class="punctuation"&gt;.&lt;/span&gt;GetProperty&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"ViewState"&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Reflection&lt;span class="punctuation"&gt;.&lt;/span&gt;BindingFlags&lt;span class="punctuation"&gt;.&lt;/span&gt;Instance &lt;span class="punctuation"&gt;|&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Reflection&lt;span class="punctuation"&gt;.&lt;/span&gt;BindingFlags&lt;span class="punctuation"&gt;.&lt;/span&gt;NonPublic&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspStateBag &lt;span class="identifier"&gt;pageViewState&lt;/span&gt; &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="identifier"&gt;pi&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;GetValue&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="identifier"&gt;control&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;Page&lt;span class="punctuation"&gt;,&lt;/span&gt; &lt;span class="keyword"&gt;null&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;as&lt;/span&gt; StateBag&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="identifier"&gt;pageViewState&lt;/span&gt;&lt;span class="punctuation"&gt;[&lt;/span&gt;Key&lt;span class="punctuation"&gt;]&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;My solution uses Reflection to retrieve the ViewState out of the Page. You will need FullTrust to use the code, bummer.&lt;/p&gt;

&lt;a href="http://www.reflectionit.nl/download.aspx?URL=CustomParameters.zip" target="_blank"&gt;Download the source + sample website here.&lt;/a&gt;

</description>
    </item>
    <item>
      <title>My First XNA Game</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=7658c3a2-a419-43c1-9188-7b9516600d4a</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink7658c3a2-a419-43c1-9188-7b9516600d4a.aspx</link>
      <pubDate>Sun, 27 May 2007 15:44:01 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I finally found some time to play with &lt;a href="http://msdn2.microsoft.com/en-us/xna/default.aspx" target="_blank"&gt;XNA&lt;/a&gt;. I learned a lot from &lt;a href="http://www.robmiles.com/" target="_blank"&gt;Rob Miles&lt;/a&gt; at TechEd 2006. He has some great samples on his &lt;a href="http://www.robmiles.com/xna-files/teched-2006/" target="_blank"&gt;website&lt;/a&gt;. Rob will also be presenting about this subject on the &lt;a href="http://www.microsoft.com/netherlands/msdn/devdays/track2dag2.aspx#3" target="_blank"&gt;DevDays 2007&lt;/a&gt; in the Netherlands. Fun is guaranteed.&lt;/p&gt;

&lt;p&gt;My first game is a remake of a game I build 20 years ago on my Commodore 64. You must move around a bouncing ball using your joystick. The ball may not collide with the flying birds. It took me only a few hours to build and it was great fun.&lt;/p&gt;

&lt;a href="http://www.reflectionit.nl/download.aspx?URL=XnaGame1.zip" target="_blank"&gt;&lt;img src="http://www.reflectionit.nl/images/XnaGame1.png" /&gt;&lt;/a&gt;

&lt;/p&gt;I have used the &lt;a href="http://www.ziggyware.com/readarticle.php?article_id=44" target="_blank"&gt;XNA - Drawing Text in XNA&lt;/a&gt; article (Creator tool + XnaFont class) to fix a drawing text bug from Rob's code.&lt;/p&gt;

&lt;a href="http://www.reflectionit.nl/download.aspx?URL=XnaGame1.zip" target="_blank"&gt;Download the source here.&lt;/a&gt;

</description>
    </item>
    <item>
      <title>Objectmap.nl</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=152d445a-804c-4979-bfac-4a65c631005e</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink152d445a-804c-4979-bfac-4a65c631005e.aspx</link>
      <pubDate>Sun, 05 Nov 2006 08:05:46 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Today we have published a new website called &lt;a href="http://www.objectmap.nl" target="_blank"&gt;Objectmap&lt;/a&gt;. It is for now in Dutch only. It uses &lt;a href="http://maps.google.nl/" target="_blank"&gt;Google Maps&lt;/a&gt; to display objects on a map. Registered users can add the objects to the system. A script is generated for each object which can be used to display the map. When you copy&amp;amp;paste this script into your own webpage you can display the map in a pop-up window or IFrame.&lt;p&gt;
&lt;img src="http://www.reflectionit.nl/images/objectmap.jpg"&gt;
&lt;br&gt;
&lt;p&gt;Click &lt;script src="http://www.objectmap.nl/JavaScript/ObjectMap.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;a href="javascript:ShowObjectMapWindow( '3febb822-f7f4-4e22-a629-285587ad8914', 500, 400, 'o')"&gt;here&lt;/a&gt; for a pop-up window demo.&lt;/p&gt;
&lt;p&gt;A complete explanation how to add objects and how to make them visible on your own site can be found &lt;a href="http://www.objectmap.nl/Help/Objecten.aspx" target="_blank"&gt;here&lt;/a&gt;. The website is still in BETA. You can send a mail to &lt;a href="mailto:info@objectmap.nl" target="_blank"&gt;info@objectmap.nl&lt;/a&gt; to request a beta account.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Playing with Google Maps </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=4ed40f57-7b00-48b8-8cf9-812e7eb99530</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink4ed40f57-7b00-48b8-8cf9-812e7eb99530.aspx</link>
      <pubDate>Fri, 22 Sep 2006 07:13:44 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have developed a small website which uses &lt;a href="http://maps.google.nl" target="_blank"&gt;Google Maps&lt;/a&gt; to prepare myself for a new project. Have a look &lt;a href="http://www.mydotnetplayground.nl/" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;a href="http://www.mydotnetplayground.nl/GoogleMapsDemo" target="_blank"&gt;&lt;img border="0" src="http://www.reflectionit.nl/images/GoogleMaps.jpg"&gt;&lt;/a&gt;

&lt;p&gt;I have used &lt;a href="http://googlemaps.subgurim.net/"&gt;GoogleMaps.Subgurim.NET&lt;/a&gt; to simplify things. This is an ASP.NET control which encapsulates the &lt;a href="http://www.google.com/apis/maps/" target="_blank"&gt;Google Maps API&lt;/a&gt;. Their site is in Spanish but with &lt;a href="http://babelfish.altavista.com/" target="_blank"&gt;Babel Fish&lt;/a&gt; you can translate it to English.&lt;/p&gt;

&lt;p&gt;The full C# source of the website can be downloaded from &lt;a href="http://www.reflectionit.nl/download.aspx?URL=GoogleMapsDemo.zip" target="_blank"&gt;here&lt;/a&gt;.</description>
    </item>
    <item>
      <title>Windows Vista RC1 First Impressions</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=82888c67-aae7-4347-bdf7-d814eebb5223</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink82888c67-aae7-4347-bdf7-d814eebb5223.aspx</link>
      <pubDate>Thu, 14 Sep 2006 05:21:23 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have just installed the RC1 version of Windows Vista (Build 5600). My first impressions aren't good. It is slow: moving around my mouse cursor on an empty desktop makes my processor go up to 40%. Deleting 12GB took 25 minutes. 
I have a 2.6Mhz AMD processor, 1.5Gb RAM, SATA harddisk and a NVIDIA FX6200 graphics card. It looks like this is not enough.&lt;/p&gt;

&lt;p&gt;It is buggy: IE7 crashed already 4 times when visiting my favorite sites.&lt;/p&gt;

&lt;p&gt;Worst of all is the fact that Visual Studio 2005 Professional isn't working. It won't start. I get the following error dialog:&lt;/p&gt;
&lt;img src="http://www.reflectionit.nl/images/vista2005.jpg" /&gt;

&lt;p&gt;The Vista UI looks slick. I hope Microsoft will be able to fix my problems soon. For now I will have to keep working on my XP machine. I can also go back to the Beta2 version in which VS2005 worked well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated my DAL article!</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=531968ca-a3bc-4851-b143-0fed620e91c7</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink531968ca-a3bc-4851-b143-0fed620e91c7.aspx</link>
      <pubDate>Wed, 17 May 2006 11:41:59 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have updated my &lt;a href="http://www.reflectionit.nl/Articles/DAL.aspx"&gt;DAL&lt;/a&gt; article which I wrote late 2002. This article was one of my first aricles and needed an update. The &lt;a href="http://www.reflectionit.nl/download.aspx?URL=DAL.zip" target="_blank"&gt;download&lt;/a&gt; project now also contains a .NET 2.0 project. It uses the new TraceSource class for tracing purposes. I hope you like it.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Playing with Ajax (Atlas)</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=044e3c32-baf9-4b70-9955-950ca7509658</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink044e3c32-baf9-4b70-9955-950ca7509658.aspx</link>
      <pubDate>Mon, 27 Mar 2006 14:29:13 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have finally found some time to play with &lt;a href="http://ajax.asp.net" target="_blank"&gt;Ajax&lt;/a&gt;. I have built some simple Grid/Detail pages which are place inside an UpdatePanel. This server centric model is really easy and powerful. I have never really liked the user experience of web applications. Atlas will changes this and will make the WEB even more popular.&lt;/p&gt;

&lt;p&gt;Have a look at the result &lt;a href="http://www.mydotnetplayground.nl/Buffy2005/Bedrijven.aspx" target="_blank"&gt;demo&lt;/a&gt; site. I use the ObjectDataSource to bind to &lt;a href="http://www.reflectionit.nl/download.aspx?URL=Buffy.ppt" target="_blank"&gt;Buffy.NET&lt;/a&gt; BusinessObjects. It's so easy.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Extending my .NET Freelance Network</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=4430a9e5-08a0-404e-baf1-5e361d2d7850</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink4430a9e5-08a0-404e-baf1-5e361d2d7850.aspx</link>
      <pubDate>Fri, 24 Mar 2006 14:41:10 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;&lt;i&gt;Sorry Dutch only.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Vanwege mijn brede expertise en de aantrekkende markt krijg ik de laatste tijd veel leuke opdrachten in Nederland en België aangeboden waarop ik regelmatig nee op moet verkopen. Daarbij wordt mij meestal ook gevraagd of ik in mijn netwerk nog andere .NET freelancers ken. Daarom heb ik een netwerk opgezet zodat ik potentiële opdrachtgevers kan doorverwijzen naar een collega.&lt;/p&gt;

&lt;p&gt;Via deze blog nodig ik .NET freelancers uit zich gratis en vrijblijvend bij mij aan te melden. Mijn netwerk is alleen voor Microsoft specialisten, hierbij gaat het dus om:&lt;/p&gt; 
&lt;ul&gt;
&lt;li&gt;Software Architecten
&lt;li&gt;Team en Projectleiders
&lt;li&gt;Coaches
&lt;li&gt;Trainers
&lt;li&gt;Ontwerpers
&lt;li&gt;Programmeurs (C#, VB.NET, ASP.NET, SQL, XML)
&lt;li&gt;DBA’s
&lt;li&gt;Web-designers
&lt;li&gt;(unit)testers
&lt;/ul&gt;

&lt;p&gt;Aanmelden kan heel eenvoudig via een e-mailtje naar &lt;a href="mailto:dotnetwerk@reflectionit.nl"&gt;dotnetwerk@reflectionit.nl&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I will be speaking at this year's SDN Software Developer Event </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=66c541ee-26ae-4be0-a57d-4dfce107e146</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink66c541ee-26ae-4be0-a57d-4dfce107e146.aspx</link>
      <pubDate>Wed, 15 Mar 2006 06:13:47 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;This year first &lt;a href="http://www.sdn.nl/Default.aspx?tabid=233" target="_blank"&gt;SDN Software Developer Event&lt;/a&gt; is held on March 24 in De Reehorst - Ede. The theme of this event is 'Tools &amp; Productivity'. The title of my &lt;a href="http://www.sdn.nl/Default.aspx?tabid=236" target="_blank"&gt;session&lt;/a&gt; is 'Designing using the Visual Studio 2005 Class Designer'. I hope to see you there. It is a great event with a lot of interesting sessions.
&lt;/p&gt;</description>
    </item>
    <item>
      <title>Move to ASP.NET 2.0</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=6e0a72d7-c54d-45ef-bcfe-89a2cef9fd70</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink6e0a72d7-c54d-45ef-bcfe-89a2cef9fd70.aspx</link>
      <pubDate>Thu, 02 Mar 2006 17:23:30 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have finally rewritten this website to &lt;a href="http://msdn.microsoft.com/asp.net/" target="_blank"&gt;ASP.NET 2.0&lt;/a&gt;. It was really a good learning experience. You only learn it by doing it. I have tried to use the new features like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MasterPages&lt;/li&gt;
&lt;li&gt;Themes &amp; Skins&lt;/li&gt;
&lt;li&gt;Menu Controls&lt;/li&gt;
&lt;li&gt;SiteMap with roles and the SiteMapPath control&lt;/li&gt;
&lt;li&gt;Profiles&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;UrlMapping&lt;/li&gt;
&lt;li&gt;Expressions&lt;/li&gt;
&lt;li&gt;GridView Control&lt;/li&gt;
&lt;li&gt;MultiView Control&lt;/li&gt;
&lt;li&gt;Login Control&lt;/li&gt;
&lt;li&gt;DataBinding AccessDataSource and XmlDataSource&lt;/li&gt;
&lt;li&gt;TableAdapters&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/vstudio/eula.aspx?id=96713a8e-b8d4-4d6e-bb8f-027e6c8e15d8 " target="_blank"&gt;Sample Access Providers Starter Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Role base authorization&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/asp.net/reference/infrastructure/wdp/default.aspx" target="_blank"&gt;Web Deployment Projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MS Build with a AfterMerge target to deploy the website to web host&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.newtonsoft.com/products/googlesitemap/%20" target="_blank"&gt;Google Sitemaps &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.asp.net/cssadapters/%20" target="_blank"&gt;CSS Friendly ASP.NET 2.0 Control Adapters (Menu)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.urlrewriting.net" target="_blank"&gt;UrlRewritingNet.UrlRewrite&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It wasn't really difficult to do. Microsoft really kept their promise that 70% of the code could disappear. ASP.NET 2.0 rocks. I'm planning to add some extra features soon, like: WebParts, Health Monitoring, other new controls, comments on blog posts, a new stylesheet and a new logo.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update 2006-sept-25:&lt;/b&gt; Added Google Sitemaps, Control Adapters and UrlRewritingNet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hooray!</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=e3b0c050-8c69-46b0-b6dd-c9f240aea072</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinke3b0c050-8c69-46b0-b6dd-c9f240aea072.aspx</link>
      <pubDate>Sun, 19 Feb 2006 16:54:44 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;I have just received mail from &lt;a href="http://www.vue.com/" target="_blank"&gt;Pearson VUE&lt;/a&gt; informing me that have passed the Beta Exam &lt;a href="http://www.microsoft.com/learning/exams/70-528.asp" target="_blank"&gt;70-528 TS: Microsoft .NET Framework 2.0 - Web-Based Client Development&lt;/a&gt; (called 71-528 while it's in Beta).  I also received a free Voucher for a next exam, thanks guys. &lt;/p&gt;
			&lt;p&gt;On Friday I will try the Beta Exam &lt;a href="http://www.microsoft.com/learning/exams/70-551.asp" target="_blank"&gt;70-551 UPGRADE: MCAD Skills to MCPD Web Developer by Using the Microsoft .NET Framework&lt;/a&gt;. One week later I will try the Beta Exam&lt;a href="http://www.microsoft.com/learning/exams/70-552.asp" target="_blank"&gt;70-552 UPGRADE: MCAD Skills to MCPD Windows Developer by Using the Microsoft .NET Framework &lt;/a&gt;. Wish me luck.&lt;/p&gt;
		</description>
    </item>
    <item>
      <title>Very nice free screensavers</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=e3da810c-8948-4541-913b-12be5ba13008</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinke3da810c-8948-4541-913b-12be5ba13008.aspx</link>
      <pubDate>Tue, 24 Jan 2006 16:36:43 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I stumbled today on this &lt;a href="http://sourceforge.net/index.php" target="_blank"&gt;SourceForge&lt;/a&gt; project with some really nice screensavers. Goto &lt;a href="http://prdownloads.sourceforge.net/rssavers" target="_blank"&gt;rssavers&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New VS2005 Macros</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=1147a601-3bdf-4702-80bb-f27896bf0ae3</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink1147a601-3bdf-4702-80bb-f27896bf0ae3.aspx</link>
      <pubDate>Fri, 18 Nov 2005 17:42:47 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>			&lt;p&gt;Three years ago I have written some useful Visual Studio 2003 macros: &lt;a href="http://www.reflectionit.nl/SortCode.aspx" target="_blank"&gt;SortCode&lt;/a&gt; and &lt;a href="http://www.reflectionit.nl/Macro.aspx" target="_blank"&gt;CreateProperty&lt;/a&gt;. With the introduction of VS2005 it was time to upgrade them.&lt;/p&gt;
			&lt;p&gt;The new SortCode macro also supports VB.NET 2005. Totally new is the &lt;b&gt;EncapsulateAllNonPrivateFields&lt;/b&gt; macro. It creates properties get/set for all non private (public, protected, internal) fields. By using the CodeDom I managed to supports VB.NET and C#.&lt;/p&gt;

			&lt;p&gt;Example&lt;/p&gt;
			&lt;img src='http://www.reflectionit.nl/articles/images/Macro/MacroDemo1.jpg'&gt;
			&lt;p&gt;After running the marco the 3 fields are private and there are 3 extra properties.&lt;/p&gt;
			&lt;img src='http://www.reflectionit.nl/articles/images/Macro/MacroDemo2.jpg'&gt;
			&lt;p&gt;Download
			&lt;a href="http://www.reflectionit.nl/download.aspx?URL=ReflectionITMacros2005.zip" target="_blank"&gt;Zipfile&lt;/a&gt;&lt;/p&gt;
		</description>
    </item>
    <item>
      <title>Qliner hotkeys </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=5a7b36e4-4c13-43df-b6d8-f52ac67a4ee9</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink5a7b36e4-4c13-43df-b6d8-f52ac67a4ee9.aspx</link>
      <pubDate>Fri, 11 Nov 2005 19:36:57 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;A friend of my send me a link to a great freeware software &lt;a href="http://www.qliner.com/hotkeys/default.htm" target="_blank"&gt;application&lt;/a&gt;. I love it!&lt;/p&gt;
			&lt;p&gt;&lt;a href="http://www.qliner.com/hotkeys/default.htm" target="_blank"&gt;Qliner hotkeys&lt;/a&gt; is a free and open source keyboard productivity environment. It is the first product of it's kind that is usable by computer geeks and non geeks alike.&lt;/p&gt;

			&lt;p&gt;Key features:&lt;/p&gt;
			&lt;ul&gt;
			&lt;li&gt;Smart Application Launching&lt;/li&gt;
			&lt;li&gt;Smart Application Instance Switching&lt;/li&gt;
			&lt;li&gt;Drag and Drop Configuration using an Onscreen Keyboard&lt;/li&gt;
			&lt;li&gt;Support for 100+ International Keyboards (making it a handy tool for international keyboard users).&lt;/li&gt;
			&lt;li&gt;Support for Dvorak keyboards&lt;/li&gt;
			&lt;li&gt;Volume Control Add-in&lt;/li&gt;
			&lt;li&gt;Clock Add-in&lt;/li&gt;
			&lt;li&gt;Optionally maps Caps Lock key to Window key (handy if your keyboard does not have a Windows key or if you just hate the default bahavior of Caps Lock)&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;Hotkeys builds on the concept of Windows shortcut keys but takes this concept to a whole new level. Do you think key combinations are hard to remember? Just hold the Windows key for three seconds and up pops a Onscreen Keyboard with icons on the keys that are configured. This you can you use , not only to remind you of hotkey combinations, but also for Drag and Drop Configuration.&lt;/p&gt;
			&lt;img src='http://www.qliner.com/hotkeys/hk475.jpg' /&gt;
		</description>
    </item>
    <item>
      <title>Websites using my CMS are online</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=8494240f-2540-4153-a0eb-34abef0de904</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink8494240f-2540-4153-a0eb-34abef0de904.aspx</link>
      <pubDate>Thu, 20 Oct 2005 10:03:23 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;I have written a small content management system using ASP.NET. &lt;a href="http://www.decorte.nl" target="_blank"&gt;Sjef de Corte&lt;/a&gt; has implemented 3 websites with it. Well done Sjef!&lt;/p&gt;
			&lt;ul&gt;
			&lt;li&gt;
			&lt;a href="http://www.chemiepartner.com" target="_blank"&gt;http://www.chemiepartner.com&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href="http://www.driessenvlierden.com" target="_blank"&gt;http://www.driessenvlierden.com&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href="http://www.dacs-amsterdam.com" target="_blank"&gt;http://www.dacs-amsterdam.com&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;
		</description>
    </item>
    <item>
      <title>More Avalon/XAML Minesweeper samples</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=9e399e9a-d303-456f-9c17-57319505c921</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink9e399e9a-d303-456f-9c17-57319505c921.aspx</link>
      <pubDate>Sat, 01 Oct 2005 18:03:46 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;I have found two more Avalon Minesweeper implementations.&lt;/p&gt;
			&lt;ul&gt;
			&lt;li&gt;
			&lt;a href="http://incongruous.net/blog/2005/09/minesweeper-in-xamlproject-files.html" target="_blank"&gt;pete blois &lt;/a&gt;
			&lt;/li&gt;
			&lt;li&gt;
			&lt;a href="http://blogs.msdn.com/okoboji/archive/2005/09/22/473196.aspx" target="_blank"&gt;Kevin Moore&lt;/a&gt;
			&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;BTW I plan to post the sourcecode of my implementation soon. I have to clean it up first.&lt;/p&gt;
		</description>
    </item>
    <item>
      <title>What is an architect?</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=7ba6c88a-4160-45db-bd5e-4710cff562cb</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink7ba6c88a-4160-45db-bd5e-4710cff562cb.aspx</link>
      <pubDate>Thu, 29 Sep 2005 15:58:26 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I just saw the great &lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=115387" target="_blank"&gt;Sparkle&lt;/a&gt; video on &lt;a href="http://channel9.msdn.com" target="_blank"&gt;Channel9&lt;/a&gt;. On of the most funny part was the question 'What is an Architect?'. The anwer from &lt;a href="http://blogs.msdn.com/johngossman/default.aspx" target="_blank"&gt;John Gossman&lt;/a&gt; was 'It is a fancy title for a programmer' or in other words 'You are old'. I hope you enjoy the movie, I did. I can't wait to play with it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Avalon and ClickOnce demo</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=64871c13-0969-49a7-afb8-020d20c07916</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink64871c13-0969-49a7-afb8-020d20c07916.aspx</link>
      <pubDate>Fri, 23 Sep 2005 15:45:31 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>			&lt;p&gt;I have build my first Windows Presentation Foundation (WPF) application. It is a remake of my WinForms &lt;a href="http://www.reflectionit.nl/Articles/Minesweeper.aspx" target="_blank"&gt;Minesweeper&lt;/a&gt; game. Go to the ClickOnce publisher page and install &lt;a href="http://www.vandermijden.nl/AvalonMinesweeper"&gt;Avalon Minesweeper&lt;/a&gt;.&lt;/p&gt;
			&lt;a href="http://www.mydotnetplayground.nl/WpfMinesweeper/Minesweeper.application"&gt;
			&lt;img border=0 src='http://www.reflectionit.nl/images/AvalonMinesweeper.jpg' /&gt;&lt;/a&gt;
			&lt;p&gt;Make sure you have the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ffd636f0-86e9-41e8-9e1c-100a4cc4888f&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Pre-Release Software WinFX Runtime Components - September Community Technology Preview (CTP)&lt;/a&gt; installed on your computer.&lt;/p&gt;

			&lt;p&gt;To run this sample you must add &lt;a href="http://www.mydotnetplayground.nl/WpfMinesweeper" target="_blank"&gt;'http://www.mydotnetplayground.nl/WpfMinesweeper'&lt;/a&gt; to your Trusted Sites in Internet Explorer.&lt;/p&gt;

			&lt;p&gt;&lt;b&gt;UPDATE 1-1-2006:&lt;/b&gt; Moved to my own &lt;a href="http://www.vevida.nl" target="_blank"&gt;provider&lt;/a&gt; and updated to the December CTP.&lt;/p&gt;
		</description>
    </item>
    <item>
      <title>SDE Slides</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=257dd810-650f-4660-b2e6-21fac51c3c5f</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink257dd810-650f-4660-b2e6-21fac51c3c5f.aspx</link>
      <pubDate>Tue, 20 Sep 2005 10:02:17 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;The &lt;a href="http://www.reflectionit.nl/download.aspx?URL=NDocAndVisualStudio.ppt" target="_blank"&gt;slides&lt;/a&gt; from my presentation 'NDoc Integratie in Visual Studio 2003 &amp; 2005' can now be downloaded.&lt;/p&gt;
		</description>
    </item>
    <item>
      <title>C# 3.0 looks like Smalltak</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=f6f154dd-fe3c-4d27-a5e9-f3cd87730e0c</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkf6f154dd-fe3c-4d27-a5e9-f3cd87730e0c.aspx</link>
      <pubDate>Wed, 14 Sep 2005 04:39:40 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;Many years ago I programmed in Smalltalk (Enfin which later became ObjectStudio). I have always liked it although it was not very programmer friendly (no IntelliSense). I have just wachted this &lt;a href="http://download.microsoft.com/download/4/7/0/4703eba2-78c4-4b09-8912-69f6c38d3a56/LanguageEnhancements.wmv" target="_blank"&gt;C# 3.0 Language Enhancements in action&lt;/a&gt; video. The shown Extension Methods feature realy looks like the Secondary Class files of Smalltalk. Nice to see them back, they where very handy.&lt;/p&gt;

			&lt;p&gt;In the following example I have added the 'IsPrime()' method to the 'Int32' type. The 'this' keyword in front of the 'number' parameter of the IsPrime() method did the real trick. This makes it an Extension Method.&lt;/p&gt;

			&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;&lt;span class="keyword"&gt;class&lt;/span&gt; Program &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; Main&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span class="punctuation"&gt;[&lt;/span&gt;&lt;span class="punctuation"&gt;]&lt;/span&gt; &lt;span class="identifier"&gt;args&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspConsole&lt;span class="punctuation"&gt;.&lt;/span&gt;WriteLine&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="number"&gt;5&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;IsPrime&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;  &lt;span class="comment"&gt;// true
			&lt;br&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspConsole&lt;span class="punctuation"&gt;.&lt;/span&gt;WriteLine&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="number"&gt;9&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;IsPrime&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;  &lt;span class="comment"&gt;// false
			&lt;br&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspConsole&lt;span class="punctuation"&gt;.&lt;/span&gt;WriteLine&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="number"&gt;23&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;IsPrime&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt; &lt;span class="comment"&gt;// true
			&lt;br&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; Extensions &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;bool&lt;/span&gt; IsPrime&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt; &lt;span class="keyword"&gt;int&lt;/span&gt; &lt;span class="identifier"&gt;number&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="identifier"&gt;number&lt;/span&gt; &lt;span class="punctuation"&gt;=&lt;/span&gt;&lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="punctuation"&gt;|&lt;/span&gt;&lt;span class="punctuation"&gt;|&lt;/span&gt; &lt;span class="identifier"&gt;number&lt;/span&gt; &lt;span class="punctuation"&gt;=&lt;/span&gt;&lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt; &lt;span class="punctuation"&gt;|&lt;/span&gt;&lt;span class="punctuation"&gt;|&lt;/span&gt; &lt;span class="identifier"&gt;number&lt;/span&gt; &lt;span class="punctuation"&gt;=&lt;/span&gt;&lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="identifier"&gt;number&lt;/span&gt; &lt;span class="punctuation"&gt;%&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;=&lt;/span&gt;&lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;false&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;int&lt;/span&gt; &lt;span class="identifier"&gt;sqrt&lt;/span&gt; &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;int&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;Math&lt;span class="punctuation"&gt;.&lt;/span&gt;Sqrt&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="identifier"&gt;number&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;for&lt;/span&gt; &lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;int&lt;/span&gt; t &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt; t &amp;lt;&lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="identifier"&gt;sqrt&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt; t &lt;span class="punctuation"&gt;=&lt;/span&gt; t &lt;span class="punctuation"&gt;+&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="identifier"&gt;number&lt;/span&gt; &lt;span class="punctuation"&gt;%&lt;/span&gt; t &lt;span class="punctuation"&gt;=&lt;/span&gt;&lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;false&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&lt;/div&gt;

		</description>
    </item>
    <item>
      <title>PDC05 Keynote</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=cf161ac1-0506-4bf7-a89e-14618c6cf30b</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkcf161ac1-0506-4bf7-a89e-14618c6cf30b.aspx</link>
      <pubDate>Tue, 13 Sep 2005 18:00:34 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;I have just watched the live &lt;a href="http://www.microsoft.com/events/executives/billgates.mspx" target="_blank"&gt;PDC05 Keynote&lt;/a&gt; Webcast. I'm very impressed. Great demo's showing LINQ, Indigo, Atlas and Avalon. The problem for Microsoft will be to get us 'the developers' to use these new technologies as soon as possible. I'm afraid it is all to much for a 'normal' developer too cope with.&lt;p&gt;
		</description>
    </item>
    <item>
      <title>SDN Software Developer Event</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=3eb0ed7d-bbd3-45ba-859b-5946248e7b04</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink3eb0ed7d-bbd3-45ba-859b-5946248e7b04.aspx</link>
      <pubDate>Tue, 30 Aug 2005 06:19:48 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;I will be speaking at the &lt;a href="http://www.sdn.nl/Default.aspx?tabid=195" target="_blank"&gt;SDN Software Developer Event&lt;/a&gt; on the September 16 2005, De Reehorst - Ede . I will talk about the integration of NDoc with Visual Basic 2003 and 2005. Hope to see you there.&lt;/p&gt;
		</description>
    </item>
    <item>
      <title>My Favorite Visual Studio 2005 and .NET 2.0 features</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=3c256262-0fa7-4f92-bc2c-0efe6e11d684</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink3c256262-0fa7-4f92-bc2c-0efe6e11d684.aspx</link>
      <pubDate>Fri, 05 Aug 2005 13:24:05 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;ul&gt;
			&lt;li&gt;C# 2.0&lt;/li&gt;
			&lt;li&gt;Class Designer&lt;/li&gt;
			&lt;li&gt;Unit Testing&lt;/li&gt;
			&lt;li&gt;Code Coverage&lt;/li&gt;
			&lt;li&gt;FXCop Integration&lt;/li&gt;
			&lt;li&gt;Debugging: DataTips, Visualizers and Viewers&lt;/li&gt;
			&lt;li&gt;Refactoring&lt;/li&gt;
			&lt;li&gt;Improved IntelliSense&lt;/li&gt;
			&lt;li&gt;Code Snippets&lt;/li&gt;
			&lt;li&gt;Profiles&lt;/li&gt;
			&lt;li&gt;Strongly-typed resource class generator&lt;/li&gt;
			&lt;li&gt;Improved (not perfect) Windows Forms controls&lt;/li&gt;
			&lt;/ul&gt;
		</description>
    </item>
    <item>
      <title>Binary Compatiblity</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=a14f8127-64b7-4542-acb5-5ef328b21bce</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinka14f8127-64b7-4542-acb5-5ef328b21bce.aspx</link>
      <pubDate>Fri, 22 Jul 2005 05:57:57 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;Microsoft has released a free &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=4b5b7f29-1939-4e5b-a780-70e887964165&amp;amp;displaylang=en" target="_blank"&gt;LibCheck&lt;/a&gt; tool that allows you to compare two versions of an assembly, and determine the differences. The tool reports the differences as a combination of 'removed' and 'added' APIs. The tool is limited to looking only at APIs (i.e, it can't check for behavioral changes), and only compares public differences, or changes which are deemed to be 'breaking'. The tool can be used to quickly determine what has changed between one version of your assembly and another, and can help ensure that you won't introduce any breaking changes to clients of your assembly. Instructions and intended use of the tool are described in the 'libcheck tool specification' document with the zip file. &lt;p&gt;
			&lt;p&gt;This was a feature I always was missing. VB6 had this, VS.NET didn't. Thanks MS.&lt;/P&gt;
		</description>
    </item>
    <item>
      <title>AsyncHelper for VB.NET</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=f2427109-c373-4806-a5d3-40838db11c54</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkf2427109-c373-4806-a5d3-40838db11c54.aspx</link>
      <pubDate>Thu, 21 Apr 2005 16:28:50 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;I received a mail today from Rolf Gasber asking me whether I could help him with a VB.NET version of the &lt;a href="http://www.reflectionit.nl/DotNetLog.aspx?guid=ec2011f9-7e8a-4d7d-8507-84837480092f" target="_blank"&gt;AsyncHelper&lt;/a&gt; which I used in an earlier post. Here it is:
			&lt;div&gt;
			&lt;FONT color="#0000ff" size="2"&gt;
			&lt;P&gt;
			Public&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;Class&lt;/FONT&gt;&lt;FONT size="2"&gt;
			AsyncHelper&lt;/P&gt;
			&lt;P&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private&lt;/FONT&gt;&lt;FONT size="2"&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;Delegate&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;
			Sub&lt;/FONT&gt;&lt;FONT size="2"&gt; DynamicInvokeShimProc(&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;ByVal&lt;/FONT&gt;&lt;FONT size="2"&gt;
			d &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;As&lt;/FONT&gt;&lt;FONT size="2"&gt; [Delegate], _&lt;BR&gt;
			&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;ByVal&lt;/FONT&gt;&lt;FONT size="2"&gt; args() &lt;/FONT&gt;
			&lt;FONT color="#0000ff" size="2"&gt;As&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;
			Object&lt;/FONT&gt;&lt;FONT size="2"&gt;)&lt;/P&gt;
			&lt;P&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private&lt;/FONT&gt;&lt;FONT size="2"&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;Shared&lt;/FONT&gt;&lt;FONT size="2"&gt; _dynamicInvokeShim
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;As&lt;/FONT&gt;&lt;FONT size="2"&gt; _
			&lt;BR&gt;
			&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;New&lt;/FONT&gt;&lt;FONT size="2"&gt; DynamicInvokeShimProc(&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;AddressOf&lt;/FONT&gt;&lt;FONT size="2"&gt;
			DynamicInvokeShim)&lt;/P&gt;
			&lt;P&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private&lt;/FONT&gt;&lt;FONT size="2"&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;Shared&lt;/FONT&gt;&lt;FONT size="2"&gt; _dynamicInvokeDone
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;As&lt;/FONT&gt;&lt;FONT size="2"&gt; _&lt;BR&gt;
			&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;New&lt;/FONT&gt;&lt;FONT size="2"&gt; AsyncCallback(&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;AddressOf&lt;/FONT&gt;&lt;FONT size="2"&gt;
			DynamicInvokeDone)&lt;/P&gt;
			&lt;P&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public&lt;/FONT&gt;&lt;FONT size="2"&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;Shared&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;
			Sub&lt;/FONT&gt;&lt;FONT size="2"&gt; FireAndForget(&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;ByVal&lt;/FONT&gt;&lt;FONT size="2"&gt;
			d &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;As&lt;/FONT&gt;&lt;FONT size="2"&gt; [Delegate], _&lt;BR&gt;
			&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;ByVal&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;
			ParamArray&lt;/FONT&gt;&lt;FONT size="2"&gt; args() &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;As&lt;/FONT&gt;&lt;FONT size="2"&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;Object&lt;/FONT&gt;&lt;FONT size="2"&gt;)&lt;BR&gt;
			&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _dynamicInvokeShim.BeginInvoke(d,
			args, &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;AddressOf _&lt;BR&gt;
			&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT size="2"&gt;&amp;nbsp;DynamicInvokeDone,
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;Nothing&lt;/FONT&gt;&lt;FONT size="2"&gt;)&lt;BR&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;
			&lt;FONT color="#0000ff" size="2"&gt;Sub&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="2"&gt;
			&lt;P&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;
			&lt;FONT color="#0000ff" size="2"&gt;Shared&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;
			Sub&lt;/FONT&gt;&lt;FONT size="2"&gt; DynamicInvokeShim(&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;ByVal&lt;/FONT&gt;&lt;FONT size="2"&gt;
			d &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;As&lt;/FONT&gt;&lt;FONT size="2"&gt; [Delegate], _&lt;BR&gt;
			&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;ByVal&lt;/FONT&gt;&lt;FONT size="2"&gt; args() &lt;/FONT&gt;
			&lt;FONT color="#0000ff" size="2"&gt;As&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;
			Object&lt;/FONT&gt;&lt;FONT size="2"&gt;)&lt;BR&gt;
			&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;d.DynamicInvoke(args)&lt;BR&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;
			&lt;FONT color="#0000ff" size="2"&gt;Sub&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="2"&gt;
			&lt;P&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;
			&lt;FONT color="#0000ff" size="2"&gt;Shared&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;
			Sub&lt;/FONT&gt;&lt;FONT size="2"&gt; DynamicInvokeDone(&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;ByVal&lt;/FONT&gt;&lt;FONT size="2"&gt;
			ar &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;As&lt;/FONT&gt;&lt;FONT size="2"&gt; IAsyncResult)&lt;BR&gt;
			&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size="2"&gt;_dynamicInvokeShim.EndInvoke(ar)&lt;BR&gt;
			&lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;
			&lt;FONT color="#0000ff" size="2"&gt;Sub&lt;/P&gt;
			&lt;P&gt;
			End&lt;/FONT&gt;&lt;FONT size="2"&gt; &lt;/FONT&gt;&lt;FONT color="#0000ff" size="2"&gt;Class&lt;/P&gt;&lt;/FONT&gt;
			&lt;/div&gt;
		</description>
    </item>
    <item>
      <title>Microsoft has put my 'Dual List' .NET Magazine article online!</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=f3a0f858-6665-46b5-9fcb-c765baff4649</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkf3a0f858-6665-46b5-9fcb-c765baff4649.aspx</link>
      <pubDate>Sat, 09 Apr 2005 06:27:08 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&amp;nbsp;
&lt;table&gt;
&lt;tr valign="top"&gt;
&lt;td&gt;&lt;a href="http://www.microsoft.com/netherlands/msdn/netmagazine/code/magazine8.aspx"&gt;&lt;img src='http://www.microsoft.com/netherlands/msdn/netmagazine/code/_images_magazine8_/6437e715c5c74ece.jpg' border='0' /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;
&lt;p&gt;Microsoft has put my &lt;a href="http://download.microsoft.com/download/7/9/8/79802a44-7903-402c-a1a7-e7442aa29382/Net8_p18-21_109.pdf" target="_blank"&gt;Visueel programmeren met .NET: Dual List Control&lt;/a&gt; article online. It is published in the &lt;a href="http://www.microsoft.com/netherlands/msdn/netmagazine/default.aspx" target="_blank"&gt;.NET Magazine #8&lt;/a&gt; and it is &lt;a href="http://www.microsoft.com/netherlands/msdn/netmagazine/abonnementen.aspx" target="_blank"&gt;free&lt;/a&gt; for Dutch developers.&lt;br/&gt;

			They didn't publish the sourcecode (yet) but you can &lt;a href="http://www.reflectionit.nl/download.aspx?URL=Code.zip" target="_blank"&gt;download&lt;/a&gt; it from my own site. The aricle is in Dutch. You can find an (old) English version of this article &lt;a href="http://www.reflectionit.nl/DualList.aspx" target="_blank"&gt;here&lt;/a&gt;. An even more advanced implementation that also supports Drag &amp; Drop can be found &lt;a href="http://www.reflectionit.nl/DragDrop.aspx" target="_blank"&gt;here&lt;/a&gt;.
			&lt;/p&gt;
		&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description>
    </item>
    <item>
      <title>WaitCursor</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=001a00ef-d711-4957-a61b-29d0a223a0da</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink001a00ef-d711-4957-a61b-29d0a223a0da.aspx</link>
      <pubDate>Thu, 10 Feb 2005 14:28:52 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;For a long time I thought that I only had to set the Cursor.Current to a WaitCursor before a long running operation, the .NET runtime would reset it back to the Default cursor. Turns out that this is only true when the mouse is moved. Bummer.&lt;/p&gt;

			&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;&lt;span class="comment"&gt;// Cursor.Current are automatically reset to Default when the
			&lt;br&gt;&lt;/span&gt;&lt;span class="comment"&gt;// mouse is moved and the application is idle!
			&lt;br&gt;&lt;/span&gt;Cursor&lt;span class="punctuation"&gt;.&lt;/span&gt;Current &lt;span class="punctuation"&gt;=&lt;/span&gt; Cursors&lt;span class="punctuation"&gt;.&lt;/span&gt;WaitCursor&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&lt;/div&gt;

			&lt;p&gt;The solution for this problem is very easy. I created a helper class called WaitCursor which set the Cursor.Current and restores it to the original value when it it disposed.&lt;/p&gt;

			&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;sealed&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; WaitCursor &lt;span class="punctuation"&gt;:&lt;/span&gt; IDisposable &lt;span class="punctuation"&gt;{&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;private&lt;/span&gt; Cursor &lt;span class="identifier"&gt;_prev&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;public&lt;/span&gt; WaitCursor&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="identifier"&gt;_prev&lt;/span&gt; &lt;span class="punctuation"&gt;=&lt;/span&gt; Cursor&lt;span class="punctuation"&gt;.&lt;/span&gt;Current&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspCursor&lt;span class="punctuation"&gt;.&lt;/span&gt;Current &lt;span class="punctuation"&gt;=&lt;/span&gt; Cursors&lt;span class="punctuation"&gt;.&lt;/span&gt;WaitCursor&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; Dispose&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspCursor&lt;span class="punctuation"&gt;.&lt;/span&gt;Current &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="identifier"&gt;_prev&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&lt;/div&gt;

			&lt;p&gt;I create the instance of the WairCursor class inside a &lt;b&gt;using&lt;/b&gt; statement. This will automatically call the Dispose() method when it goes out of scope.&lt;/p&gt;

			&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt; WaitCursor&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="comment"&gt;// long running operation, for example:
			&lt;br&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspSystem&lt;span class="punctuation"&gt;.&lt;/span&gt;Threading&lt;span class="punctuation"&gt;.&lt;/span&gt;Thread&lt;span class="punctuation"&gt;.&lt;/span&gt;Sleep&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="number"&gt;1000&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&lt;/div&gt;

			&lt;p&gt;Afterwards I did some searching around on the web. Turns out I'm not the first to come up with this solution. &lt;a href="http://www.charliepoole.org/source.php?p=WaitCursor.cs" target="_blank"&gt;Charlie Poole&lt;/a&gt; already posted it a few years ago. Another bummer. &lt;/p&gt;
		</description>
    </item>
    <item>
      <title>Micro-ISV</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=e980d55e-527c-4b4a-ade2-5372ef5981ba</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinke980d55e-527c-4b4a-ade2-5372ef5981ba.aspx</link>
      <pubDate>Tue, 11 Jan 2005 20:26:00 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;Microsoft has invented a new name &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsoftware/html/software12142004.asp" target="_blank"&gt;Micro-ISV&lt;/a&gt;, which are software companies that are comprised of only one person. So, I'm a Micro-ISV. Planning to launch my product this year. I hope to succeed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dispose Modal WinForm Dialogs</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=7a2db2fc-eff3-4ad0-9e8c-2a8392a60c29</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink7a2db2fc-eff3-4ad0-9e8c-2a8392a60c29.aspx</link>
      <pubDate>Sun, 12 Dec 2004 09:21:39 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;There is a difference in disposing Modal and Non-Modal forms. In a training I gave last week I noticed that even experienced developers didn't know that Modal Dialogs don't dispose automatically, Non-Modal do.&lt;/p&gt;

			&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;&lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="identifier"&gt;buttonShowNonModalForm&lt;/span&gt;&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;object&lt;/span&gt; &lt;span class="identifier"&gt;sender&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;EventArgs e&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;new&lt;/span&gt; TestForm&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;Show&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="identifier"&gt;buttonShowModalDialog&lt;/span&gt;&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;object&lt;/span&gt; &lt;span class="identifier"&gt;sender&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;EventArgs e&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;new&lt;/span&gt; Form&lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;ShowDialog&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&lt;/div&gt;

			&lt;p&gt;The solution to this problem is very simple by creating the Form instance within a using block. This will dispose the Form when it is closed.&lt;/p&gt;

			&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;&lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="identifier"&gt;buttonShowModalDialog&lt;/span&gt;&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;object&lt;/span&gt; &lt;span class="identifier"&gt;sender&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;EventArgs e&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="punctuation"&gt;(&lt;/span&gt;TestForm f &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; TestForm&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspf&lt;span class="punctuation"&gt;.&lt;/span&gt;ShowDialog&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;&lt;/div&gt;

			&lt;p&gt;An alternative solution uses a try/finnaly. Personally I prefer the previous, it is easier to read and write.&lt;/p&gt;

			&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;&lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="identifier"&gt;buttonShowModalDialog&lt;/span&gt;&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;object&lt;/span&gt; &lt;span class="identifier"&gt;sender&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;EventArgs e&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspTestForm f &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="keyword"&gt;null&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;try&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspf &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; TestForm&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspf&lt;span class="punctuation"&gt;.&lt;/span&gt;ShowDialog&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt; &lt;span class="keyword"&gt;finally&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="punctuation"&gt;(&lt;/span&gt;f &lt;span class="punctuation"&gt;!&lt;/span&gt;&lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="keyword"&gt;null&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspf&lt;span class="punctuation"&gt;.&lt;/span&gt;Dispose&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;&lt;/div&gt;

			&lt;p&gt;The following solution isn't correct. You might think it is, but it isn't. The Dispose will not be executed when an Exception is thrown from within the ShowDialog().&lt;/p&gt;

			&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;&lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="identifier"&gt;buttonShowModalDialog&lt;/span&gt;&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;object&lt;/span&gt; &lt;span class="identifier"&gt;sender&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;EventArgs e&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspTestForm f &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; TestForm&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspf&lt;span class="punctuation"&gt;.&lt;/span&gt;ShowDialog&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspf&lt;span class="punctuation"&gt;.&lt;/span&gt;Dispose&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;&lt;/div&gt;
		</description>
    </item>
    <item>
      <title>Best CV ever!</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=9eaa0c7c-5169-423f-8064-ee86f5df484f</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink9eaa0c7c-5169-423f-8064-ee86f5df484f.aspx</link>
      <pubDate>Sat, 13 Nov 2004 09:09:35 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>Today a friend of my pointed me to the best CV ever. Have a &lt;a href="http://213.186.36.10/~al/alstudio/cv/en.htm" target="_blank"&gt;look.&lt;/a&gt;</description>
    </item>
    <item>
      <title>DualList Drag &amp; Drop Component </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=2b89b58e-e378-4706-95a6-bb796ae7dff9</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink2b89b58e-e378-4706-95a6-bb796ae7dff9.aspx</link>
      <pubDate>Thu, 16 Sep 2004 15:38:09 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;It has been a while since I wrote my last article. Today I finally completed my new article &lt;a href="http://www.reflectionit.nl/DragDrop.aspx" target="_blank"&gt;DualList Drag &amp; Drop Component&lt;/a&gt;. I hope you enjoy it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ToolboxBitmap workaround</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=3049f413-bffe-4f6c-b7a1-75fa11bff1fa</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink3049f413-bffe-4f6c-b7a1-75fa11bff1fa.aspx</link>
      <pubDate>Fri, 03 Sep 2004 12:45:00 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>&lt;p&gt;I have found a solution for a problem which I had for a long time. I was unable to set the ToolboxBitmap attribute for a component using the (type, string) constructor. I found the solution for this problem (using an internal ResFinder class) on &lt;a href="http://www.bobpowell.net/toolboxbitmap.htm" target="_blank"&gt;www.bobpowell.net&lt;/a&gt;. This site has also some other &lt;a href="http://www.bobpowell.net/tipstricks.htm" target="_blank"&gt;Windows Forms Tips and Tricks&lt;/a&gt;. Great!&lt;/p&gt;</description>
    </item>
    <item>
      <title>New layout www.reflectionit.nl</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=faa9056f-5a32-4cc2-b014-a2a9b947854b</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkfaa9056f-5a32-4cc2-b014-a2a9b947854b.aspx</link>
      <pubDate>Mon, 30 Aug 2004 08:18:49 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;I have changed the layout of my website this weekend. A friend of my helped me with the design, thanks &lt;a href="http://www.toverstudio.nl" target="_blank"&gt;Loek&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;I'm not really finished. I still have to translate some pages to Dutch. I also want to add 'comments' to the Blog. Hope to do this soon.&lt;/p&gt;


		</description>
    </item>
    <item>
      <title>Visual C# 2005 Express Edition Beta is great</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=347202b7-ead6-4688-9230-da25ad963f50</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink347202b7-ead6-4688-9230-da25ad963f50.aspx</link>
      <pubDate>Wed, 14 Jul 2004 07:12:44 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;I'm testing &lt;a href="http://lab.msdn.microsoft.com/express/vcsharp/" target="_blank"&gt;Visual C# 2005 Express Edition Beta&lt;/a&gt; and I really like it. It has all of the features which I need to build Windows Forms applications. The Editor has also all new IntelliSense, Refactoring and Code Snippets features. They work great and really can boost productivity.&lt;/p&gt;

			&lt;p&gt;I have tested it on a PC with only 256Mb of ram. This is for the beta not enough. You need at least 512Mb.&lt;/p&gt;

			&lt;p&gt;I'm using the Online MSDN Help, it works OK. The looks are good but I find it difficult to get to the 'overview' of a class.&lt;/p&gt;

			&lt;p&gt;For professional development I would advise to use Visual Studio. For hobby work use the Express versions.&lt;/p&gt;
		</description>
    </item>
    <item>
      <title>Second day</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=e7bbcaba-0719-4922-bb8c-6dce9fa8fe20</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinke7bbcaba-0719-4922-bb8c-6dce9fa8fe20.aspx</link>
      <pubDate>Thu, 01 Jul 2004 04:13:38 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;After a disappointing soccer match yerterday I’m here to review the second day.&lt;/p&gt;

			&lt;p&gt;What disappoints me is that there are no sessions about Longhorn, WinFS, Xaml or Visual Studio Orca. I guess it is still so far away that it is not interesting to tell something about it. Still it is a pity. There should be new things to show after the PDC.&lt;/p&gt;

			&lt;p&gt;The overall quality of the sessions is OK, nothing special. &lt;/p&gt;

			&lt;p&gt;Tonight is the TechEd party, hope it will rock.&lt;/p&gt;



		</description>
    </item>
    <item>
      <title>First Day</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=70cb0f59-133b-4624-b8b0-c3f4f302880a</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink70cb0f59-133b-4624-b8b0-c3f4f302880a.aspx</link>
      <pubDate>Wed, 30 Jun 2004 04:09:33 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;This is my second day at TechEd. Yesterday was a good day. The Keynote started with a demo by a blind person (sorry I forgot his name). He demonstrated how difficult it is to surf the internet when you are blind and what we ‘developers’ should do to help him. The drum’s where very nice. It is funny to hear 6000 nerds drum. For the rest the keynote was boring. &lt;/p&gt;

			&lt;p&gt;I went to a very nice session WIN320 IIS and ASP.NET security. Not overwhelming but nice. My next session on DAT313 SQL Server 2005 Data Transformation Services was also nice. DTS has been greatly improved (at last).&lt;/p&gt;

			&lt;p&gt;The last two sessions did not really satisfy me. This could be my own fault. I was tired so I couldn’t concentrate very well.&lt;/p&gt;

			&lt;p&gt;I went to eat with my good friend Paul and some of his colleagues, Thai always good. &lt;/p&gt;

			&lt;p&gt;Today I’m going to a XP programming, InfoPath, WSE SQL 2005 session. Hope to enjoy myself. In the evening there is a big country party where we will watch the football game Portugal-The Netherlands. Hope we will win but once again I’m not very optimistic. &lt;/p&gt;

			&lt;p&gt;O yeah let’s finish with the orange bag. How ugly can you make it. Ok it’s orange which at the moment is nice but the model is useless. I was hoping to get a bag which I could use for my new laptop. This isn’t it.&lt;/p&gt;




		</description>
    </item>
    <item>
      <title>TechEd Bloggers Europe </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=2874b92a-4d0f-4816-a09a-839b4b622a0c</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink2874b92a-4d0f-4816-a09a-839b4b622a0c.aspx</link>
      <pubDate>Mon, 28 Jun 2004 06:49:10 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>I have just registered myself as a blogger on &lt;a href="http://techedbloggers.net" target="_blank"&gt;TechEd Bloggers&lt;/a&gt;. I hope you will enjoy it.</description>
    </item>
    <item>
      <title>SmartPart for SharePoint</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=c15f811c-c48a-4847-a7c6-96eae1914503</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkc15f811c-c48a-4847-a7c6-96eae1914503.aspx</link>
      <pubDate>Thu, 10 Jun 2004 19:15:53 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;Together with &lt;a href="http://weblogs.asp.net/jan" target="_blank"&gt;Jan Tielens&lt;/a&gt;, I have created a improved version of my &lt;a href="http://www.reflectionit.nl/WebPart1.aspx" target="_blank"&gt;User Control Container Web Part&lt;/a&gt; called the &lt;B&gt;SmartPart for SharePoint&lt;/b&gt;.&lt;/p&gt;

			&lt;p&gt; Jan has written an &lt;a href="http://weblogs.asp.net/jan/archive/2004/06/10/152932.aspx" target="_blank"&gt;introduction&lt;/a&gt; and even created a &lt;a href="http://blogs.leadit.be/files/SmartPartDropDownNavigation.wmv" target="_blank"&gt;video&lt;/a&gt; demonstrating it in action.&lt;p&gt;

			&lt;p&gt;We have created a &lt;a href="http://workspaces.gotdotnet.com/smartpart" target="_blank"&gt;GotDotNet Workspace&lt;/a&gt; for the SmartPart. Over there you can download an installation package that will install the SmartPart, the source code and an example user control. At this point there isn’t very much documentation, but I will work on that. :-) There are a lot of cool ideas which (I hope) will be added to the SmartPart (for example a connectable SmartPart). I’ve IM-ed with Patrick today and he has another cool idea which he discussed in one of his latest posts: using the User Interface Process block together with web parts. Anyway, some nice ideas are waiting to be implemented!&lt;/p&gt;
		</description>
    </item>
    <item>
      <title>I will be at TechEd 2004 Amsterdam</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=674664dd-f492-4bf9-9bd1-1861a21b8f64</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink674664dd-f492-4bf9-9bd1-1861a21b8f64.aspx</link>
      <pubDate>Wed, 12 May 2004 16:36:28 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>			&lt;table&gt;
			&lt;tr valign=top&gt;
			&lt;td&gt;
			&lt;img src="http://www.reflectionit.nl/images/te04amsterdam.gif" /&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;This will be my 6th &lt;a href="http://www.microsoft.com/europe/teched/" target="_blank"&gt;TechED&lt;/a&gt; (97 and 98 in Nice, 99 and 2000 in Amsterdam, 2002 in Barcelona).
			&lt;/p&gt;&lt;p&gt; It is a great event in which I learn a lot and get lot's of inspiration. It's not cheap but it is worth every peny!&lt;/p&gt;
			&lt;/td&gt;
			&lt;/tr&gt;
			&lt;/table&gt;
		</description>
    </item>
    <item>
      <title>String Array Sorting</title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=3d45164f-9090-4ae2-891c-7dc70ec9eb0d</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLink3d45164f-9090-4ae2-891c-7dc70ec9eb0d.aspx</link>
      <pubDate>Tue, 27 Apr 2004 12:10:44 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;It took me today some time to figure out how to sort an array of strings case-sensitively. The default behavior of the Array.Sort() uses an default Comparer object which should be case-sensitive. When I tested this I found out that I had misinterpreted the definition of 'case-sensitive'. What I wanted was 'Oridinal' sorting. So I created an OrdinalStringComparer class which implements IComparer and I got what I wanted.&lt;/p&gt;
			&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="punctuation"&gt;.&lt;/span&gt;Collections&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&lt;span class="keyword"&gt;namespace&lt;/span&gt; ReflectionIT&lt;span class="punctuation"&gt;.&lt;/span&gt;Test &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;class&lt;/span&gt; Class&lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;[&lt;/span&gt;STAThread&lt;span class="punctuation"&gt;]&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; Main&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span class="punctuation"&gt;[&lt;/span&gt;&lt;span class="punctuation"&gt;]&lt;/span&gt; &lt;span class="identifier"&gt;args&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspTest&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt; CaseInsensitiveComparer&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspTest&lt;span class="punctuation"&gt;(&lt;/span&gt;Comparer&lt;span class="punctuation"&gt;.&lt;/span&gt;Default&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspTest&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt; OridinalStringComparer&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspConsole&lt;span class="punctuation"&gt;.&lt;/span&gt;ReadLine&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; Test&lt;span class="punctuation"&gt;(&lt;/span&gt;IComparer &lt;span class="identifier"&gt;comparer&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span class="punctuation"&gt;[&lt;/span&gt;&lt;span class="punctuation"&gt;]&lt;/span&gt; &lt;span class="identifier"&gt;words&lt;/span&gt; &lt;span class="punctuation"&gt;=&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span class="punctuation"&gt;[&lt;/span&gt;&lt;span class="punctuation"&gt;]&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt; &lt;span class="string"&gt;"c"&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; &lt;span class="string"&gt;"a"&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; &lt;span class="string"&gt;"A"&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; &lt;span class="string"&gt;"aB"&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; &lt;span class="string"&gt;"ab"&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; &lt;span class="string"&gt;"Ab"&lt;/span&gt; &lt;span class="punctuation"&gt;}&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspArray&lt;span class="punctuation"&gt;.&lt;/span&gt;Sort&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="identifier"&gt;words&lt;/span&gt;&lt;span class="punctuation"&gt;,&lt;/span&gt; &lt;span class="identifier"&gt;comparer&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspConsole&lt;span class="punctuation"&gt;.&lt;/span&gt;WriteLine&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="identifier"&gt;comparer&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;GetType&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;Name &lt;span class="punctuation"&gt;+&lt;/span&gt; &lt;span class="string"&gt;":"&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;foreach&lt;/span&gt; &lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="identifier"&gt;word&lt;/span&gt; &lt;span class="keyword"&gt;in&lt;/span&gt; &lt;span class="identifier"&gt;words&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt; &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspConsole&lt;span class="punctuation"&gt;.&lt;/span&gt;WriteLine&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="identifier"&gt;word&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbspConsole&lt;span class="punctuation"&gt;.&lt;/span&gt;WriteLine&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; OridinalStringComparer &lt;span class="punctuation"&gt;:&lt;/span&gt; IComparer  &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;int&lt;/span&gt; IComparer&lt;span class="punctuation"&gt;.&lt;/span&gt;Compare&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;object&lt;/span&gt; x&lt;span class="punctuation"&gt;,&lt;/span&gt; &lt;span class="keyword"&gt;object&lt;/span&gt; y &lt;span class="punctuation"&gt;)&lt;/span&gt;  &lt;span class="punctuation"&gt;{&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span class="punctuation"&gt;.&lt;/span&gt;CompareOrdinal&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;x&lt;span class="punctuation"&gt;,&lt;/span&gt; &lt;span class="punctuation"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span class="punctuation"&gt;)&lt;/span&gt;y&lt;span class="punctuation"&gt;)&lt;/span&gt;&lt;span class="punctuation"&gt;;&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp
			&lt;br&gt;&lt;span class="punctuation"&gt;}&lt;/span&gt;
			&lt;br&gt;&lt;/div&gt;
			&lt;p&gt;And when you run this program you get the following output:&lt;/p&gt;
			&lt;div class="dotnetcoders-code" style="padding-left:0px;padding-top:0px;padding-bottom:0px;"&gt;CaseInsensitiveComparer&lt;span class="punctuation"&gt;:&lt;/span&gt;
			&lt;br&gt;A
			&lt;br&gt;a
			&lt;br&gt;Ab
			&lt;br&gt;&lt;span class="identifier"&gt;ab&lt;/span&gt;
			&lt;br&gt;&lt;span class="identifier"&gt;aB&lt;/span&gt;
			&lt;br&gt;c
			&lt;br&gt;
			&lt;br&gt;Comparer&lt;span class="punctuation"&gt;:&lt;/span&gt;
			&lt;br&gt;a
			&lt;br&gt;A
			&lt;br&gt;&lt;span class="identifier"&gt;ab&lt;/span&gt;
			&lt;br&gt;&lt;span class="identifier"&gt;aB&lt;/span&gt;
			&lt;br&gt;Ab
			&lt;br&gt;c
			&lt;br&gt;
			&lt;br&gt;OridinalStringComparer&lt;span class="punctuation"&gt;:&lt;/span&gt;
			&lt;br&gt;A
			&lt;br&gt;Ab
			&lt;br&gt;a
			&lt;br&gt;&lt;span class="identifier"&gt;aB&lt;/span&gt;
			&lt;br&gt;&lt;span class="identifier"&gt;ab&lt;/span&gt;
			&lt;br&gt;c&lt;/div&gt;
		</description>
    </item>
    <item>
      <title>System.Collections and System.Collections.Specialized </title>
      <guid>http://www.reflectionit.nl/Blog/default.aspx?guid=f35fbcfa-9236-42a4-bcdd-b3b9bba6c07e</guid>
      <link>
        http://www.reflectionit.nl/Blog/PermaLinkf35fbcfa-9236-42a4-bcdd-b3b9bba6c07e.aspx</link>
      <pubDate>Mon, 08 Mar 2004 08:48:41 GMT</pubDate>
      <author>Fons Sonnemans</author>
      <description>
			&lt;p&gt;This table gives you an overview of all collections in the &lt;a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemCollections.asp" target="_blank"&gt;System.Collections&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemCollectionsSpecialized.asp" target="_blank"&gt;System.Collections.Specialized&lt;/a&gt; namespaces.&lt;/p&gt;
			&lt;table border="1" cellpadding="0" cellspacing="0" ID="Table1"&gt;
			&lt;tr valign='top'&gt;
			&lt;td bgColor="#ffffcc"&gt;Class&lt;/td&gt;
			&lt;td bgColor="#ffffcc"&gt;Key&lt;/td&gt;
			&lt;td bgColor="#ffffcc"&gt;Value&lt;/td&gt;
			&lt;td bgColor="#ffffcc"&gt;Remarks&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr valign='top'&gt;
			&lt;td&gt;System.Array&lt;/td&gt;
			&lt;td&gt;&amp;nbsp;&lt;/td&gt;
			&lt;td&gt;?&lt;/td&gt;
			&lt;td&gt;Predefined size, used for passing data around.&lt;/td&gt;
