<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>WPF</title>
        <link>http://geekswithblogs.net/lbugnion/category/4828.aspx</link>
        <description>Windows Presentation Foundation</description>
        <language>en-US</language>
        <copyright>Laurent Bugnion</copyright>
        <managingEditor>laurent@galasoft.ch</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
        <item>
            <title>A short break</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2008/05/31/a-short-break.aspx</link>
            <description>&lt;p class="gslb_rsbPParagraph"&gt;I am going to take a short break of blogging for a couple of months. The reason is simple: I have been working on a book about Silverlight 2 since September last year, and we are in a phase now where I need to concentrate on that exclusively, and put other activities aside. I might post the occasional article from time to time, but until mid-Summer, it's going to be write write write. &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;Stay posted for news about the book coming up, and don't delete me from your feeds, it's really only temporary :) &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122512"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122512" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/122512.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2008/05/31/a-short-break.aspx</guid>
            <pubDate>Sat, 31 May 2008 11:34:38 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/122512.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2008/05/31/a-short-break.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/122512.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/122512.aspx</trackback:ping>
        </item>
        <item>
            <title>My talk at the &amp;quot;Internet Briefing RIA conference&amp;quot; in Zurich</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2008/05/29/my-talk-at-the-quotinternet-briefing-ria-conferencequot-in-zurich.aspx</link>
            <description>&lt;p class="gslb_rsbPParagraph"&gt; I just &lt;a href="http://www.galasoft.ch/presentations_en.html#UltraRichApplications" target="_blank"&gt;posted today's talk&lt;/a&gt; at the RIA conference in the World Trade Center, Zurich. Unfortunately it was not recorded, but the slides and the demos' source code is available on my site. &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt; The talk went really good, even though the crowd was rather tough :) Trying to "sell" Windows Presentation Foundation, a desktop Windows-only technology, to an audience of web developers, many of them using Java and open source technologies (and even one Adobe employee) sparkled some very interesting discussions. I can't say I convinced everyone (and it was most certainly not my intention), but I think everybody had a really good time. I know for sure that I did! &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt; To all those who stayed until the end of my presentation, and even though mine was the last presentation of the day, thank you very much!! To those who couldn't stay, I hope you'll have fun checking the slides and the demos, and &lt;a href="http://www.galasoft.ch/contact" target="_blank"&gt;contact me&lt;/a&gt; if anything is unclear!! &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122482"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122482" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/122482.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2008/05/29/my-talk-at-the-quotinternet-briefing-ria-conferencequot-in-zurich.aspx</guid>
            <pubDate>Thu, 29 May 2008 21:11:28 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/122482.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2008/05/29/my-talk-at-the-quotinternet-briefing-ria-conferencequot-in-zurich.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/122482.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/122482.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF talk this Thursday: "Ultra Rich Interactive Applications"</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2008/05/27/wpf-talk-this-thursday-ultra-rich-interactive-applications.aspx</link>
            <description>&lt;p class="gslb_rsbPParagraph"&gt;
I have been in very much stress lately and hardly had time to post, but I don't forget you, dear readers...
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
Anyway, this Thursday, I will be talking in a RIA conference organized by the &lt;a href="http://www.internet-briefing.ch/RiaKonferenz" target="_blank"&gt;Internet Briefing group&lt;/a&gt; here in Zurich, in the World Trade Center. My talk is titled &lt;span style="font-weight:bold;"&gt;"Ultra Rich Interactive Applications with WPF"&lt;/span&gt; and subtitled &lt;span style="font-weight:bold;"&gt;"When Silverlight is not enough..."&lt;/span&gt;. I think it's going to be an interesting talk (but obviously I am partial) about the major differences between WPF and Silverlight, and the added richness that WPF provides. I am a big fan of Silverlight, but I have to admit that it's nice going back to the amazing power of WPF sometimes, without having to worry about "is that feature even implemented in Silverlight"?
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
The talk takes place between 16:30 and 17:30 in the World Trade Center, Leutschenbachstrasse 95, 8050 Zürich. Hoping to see some of you there, maybe!
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122405"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122405" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/122405.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2008/05/27/wpf-talk-this-thursday-ultra-rich-interactive-applications.aspx</guid>
            <pubDate>Tue, 27 May 2008 12:47:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/122405.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2008/05/27/wpf-talk-this-thursday-ultra-rich-interactive-applications.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/122405.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/122405.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF: ListView/GridView minimum and maximum width for a column</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2008/05/06/wpf-listviewgridview-minimum-and-maximum-width-for-a-column.aspx</link>
            <description>&lt;p class="gslb_rsbPParagraph"&gt;
A WPF ListView is a possible replacement for a datagrid, when it doesn't have to support advanced features like grouping or filtering of rows. If you use a ListView in your WPF application, and set the "View" property of this ListView to be a GridView.
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
A ListView/GridView even supports features like reordering and resizing columns. Unfortunately, it is not possible to define a minimum or maximum width for the columns. Fortunately, it is not really to do this in the code behind. Let's see how.
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
First we need to understand how exactly the resizing of a GridView column works. When a column can be resized, a narrow vertical line appears on the right side of the column. Passing the mouse over this line turns the cursor into a "resize" cursor.
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
To find out what exactly this line is made of, we can use a tool like &lt;a href="http://www.blois.us/Snoop/" target="_blank"&gt;Snoop&lt;/a&gt;, or &lt;a href="http://www.codeproject.com/KB/WPF/MoleForWPF.aspx" target="_blank"&gt;Mole&lt;/a&gt;. These tools display the inner structure of a WPF UI, also known as the Visual Tree. For example, in Mole, we can navigate down to our ListView and display the header row's inner structure:
&lt;/p&gt;
&lt;div class="gslb_rsbDivImage"&gt;
&lt;img src="http://www.galasoft.ch/blogs-all/2008050301.png" alt="Header row of a ListView" title="Header row of a ListView" /&gt;
&lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
The feature that is of particular interest to us is the "Thumb" control, named PART_HeaderGripper. This requires some explanations:
&lt;/p&gt;
&lt;ul class="gslb_rsbList"&gt;
&lt;li&gt;
A Drag action is the action through which a control is selected (click-and-hold) and then the mouse is moved. The expected action is usually that the clicked control moves together with the mouse, but other actions may be performed too, for example resizing the columns of a grid, etc...
&lt;/li&gt;
&lt;li&gt;
A Thumb is a small WPF control that can be dragged. It has a collection of events that are used to program what happens when a drag action is performed on the control. For example, the event Thumb.DragDeltaEvent is fired every time that the Thumb is dragged a little.
&lt;br /&gt;Note: A Thumb doesn't really look like anything (well, it does look like a Rectangle!). With the great ability that WPF has to redefine the look&amp;amp;feel of any control, you can make a Thumb look like anything you need. This is why the Thumb control is in the namespace System.Windows.Controls.Primitives: The Thumb is usually used to create other controls, hence the "Primitives".
&lt;/li&gt;
&lt;li&gt;
The makers of WPF controls have for convention to name inner controls of other controls with the "PART_" prefix.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
Once we know this, we can try to intercept the events raised by the Thumb control named "PART_HeaderGripper", when the ListView's user resizes the columns. Remember, in WPF, events are "routed", we say that they "bubble" up from the control they originate from to the parent and the parent's parent, etc...
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
As a first try, we can add an event handler on the ListView and try to handle the "Thumb.DragDelta" event:
&lt;/p&gt;
&lt;div class="gslb_rsbDivCodeSection"&gt;
&lt;div class="gslb_rsbDivCode" style="white-space: pre; font-family: Monospace;"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ListView&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="MyListView"&lt;/span&gt;
          &lt;span class="attr"&gt;IsSynchronizedWithCurrentItem&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt;
          &lt;span class="attr"&gt;ItemsSource&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding Path=Items,
                                Mode=Default,
                                Source={StaticResource DataProvider}}"&lt;/span&gt;
          &lt;span class="attr"&gt;Thumb&lt;/span&gt;.&lt;span class="attr"&gt;DragDelta&lt;/span&gt;&lt;span class="kwrd"&gt;="Thumb_DragDelta"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
with:
&lt;/p&gt;
&lt;div class="gslb_rsbDivCodeSection"&gt;
&lt;div class="gslb_rsbDivCode" style="white-space: pre; font-family: Monospace;"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Thumb_DragDelta(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, &lt;span class="type"&gt;DragDeltaEventArgs&lt;/span&gt; e)
{
  &lt;span class="rem"&gt;// Do nothing for the moment&lt;/span&gt;
  Console.WriteLine(&lt;span class="str"&gt;"Thumb_DragDelta"&lt;/span&gt;);
}
&lt;/div&gt;
&lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
Unfortunately, if we place a breakpoint inside the Thumb_DragDelta event handler, it is never reached, not even if you resize any column of the ListView. Why not? Well, when a routed event is handled by any control, it can be marked as "handled". This is done by setting the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.routedeventargs.handled.aspx" target="_blank"&gt;RoutedEventArgs.Handled&lt;/a&gt; property to true inside the event handler.
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
Fortunately, there is a way to tell the framework that we are interested in an event even if it has been marked as handled. We cannot do this in XAML, however, so just remove the Thumb.DragDelta from the XAML:
&lt;/p&gt;
&lt;div class="gslb_rsbDivCodeSection"&gt;
&lt;div class="gslb_rsbDivCode" style="white-space: pre; font-family: Monospace;"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ListView&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="MyListView"&lt;/span&gt;
          &lt;span class="attr"&gt;IsSynchronizedWithCurrentItem&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt;
          &lt;span class="attr"&gt;ItemsSource&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding Path=Items,
                                Mode=Default,
                                Source={StaticResource DataProvider}}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
Instead, we will add an event handler in code behind. This is one of the few things that you cannot do in XAML!
&lt;/p&gt;
&lt;div class="gslb_rsbDivCodeSection"&gt;
&lt;div class="gslb_rsbDivCode" style="white-space: pre; font-family: Monospace;"&gt;public Window1()
{
  InitializeComponent();

  MyListView.AddHandler(&lt;span class="type"&gt;Thumb&lt;/span&gt;.DragDeltaEvent,
    new &lt;span class="type"&gt;DragDeltaEventHandler&lt;/span&gt;(Thumb_DragDelta),
    &lt;span class="kwrd"&gt;true&lt;/span&gt;);
}
&lt;/div&gt;
&lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
Notice that the last parameter of the AddHandler override is set to "true": This is what indicates that we want to get notified when the DragDelta event "bubbles" to us, even if it has been marked handled before it reaches us. This time, if you run the application and resize a column, the event handler is executed and the breakpoint is reached.
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
The last thing we need to do is to forbid the column to be resized under a minimum size, or above a maximum size. To do this, we need to do a few steps:
&lt;/p&gt;
&lt;ul class="gslb_rsbList"&gt;
&lt;li&gt;
Get the Thumb at the origin of the event. This is not the "sender" parameter, because the event handler is placed on the ListView. So even though the routed event originates on the Thumb, the "sender" is actually the ListView. However, there is another way to get the Thumb: The parameter "e" (of type &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.dragdeltaeventargs.aspx" target="_blank"&gt;DragDeltaEventArgs&lt;/a&gt;), like all RoutedEventArgs, contains a property named "&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.routedeventargs.originalsource.aspx" target="_blank"&gt;OriginalSource&lt;/a&gt;". This is the Thumb we want!
&lt;/li&gt;
&lt;li&gt;
Then, we want to get the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.gridviewcolumnheader.aspx" target="_blank"&gt;GridViewColumnHeader&lt;/a&gt; containing the Thumb. Here too, we need to understand how the visual tree is built. All controls in WPF are essentially lookless, and the look&amp;amp;feel is created in a ControlTemplate, which is separate. We can, however, get the parent's template using the TemplatedParent property.
&lt;/li&gt;
&lt;li&gt;
We're almost there: Once we have the GridViewColumnHeader, all we need to do is get the Column it belongs to (conveniently exposed in the Column property), and set its Width to the minimum respectively maximum value we want to use. Translated in code, this is:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gslb_rsbDivCodeSection"&gt;
&lt;div class="gslb_rsbDivCode" style="white-space: pre; font-family: Monospace;"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Thumb_DragDelta(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, &lt;span class="type"&gt;DragDeltaEventArgs&lt;/span&gt; e)
{
  &lt;span class="type"&gt;Thumb&lt;/span&gt; senderAsThumb = e.OriginalSource &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="type"&gt;Thumb&lt;/span&gt;;
  &lt;span class="type"&gt;GridViewColumnHeader&lt;/span&gt; header
    = senderAsThumb.TemplatedParent &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="type"&gt;GridViewColumnHeader&lt;/span&gt;;
  &lt;span class="kwrd"&gt;if&lt;/span&gt; (header.Column.ActualWidth &amp;lt; MIN_WIDTH)
  {
    header.Column.Width = MIN_WIDTH;
  }
  &lt;span class="kwrd"&gt;if&lt;/span&gt; (header.Column.ActualWidth &amp;gt; MAX_WIDTH)
  {
    header.Column.Width = MAX_WIDTH;
  }
}
&lt;/div&gt;
&lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
where MIN_WIDTH and MAX_WIDTH are two constants. We could as well use properties to be able to set these values from the outside.
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
With this code, the column will be resizable up to a certain limit, and then the Thumb will stop moving. While it requires a good understanding of the inner works of a WPF control, this is not very complicated. It requires some code-behind, however, and cannot be done in pure XAML.
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
&lt;a href="http://www.galasoft.ch" target="_new" atomicselection="true"&gt;&lt;img alt="http://www.galasoft.ch" src="http://www.galasoft.ch/images/counter-blog-all.png" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121934"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121934" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/121934.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2008/05/06/wpf-listviewgridview-minimum-and-maximum-width-for-a-column.aspx</guid>
            <pubDate>Tue, 06 May 2008 17:05:12 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/121934.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2008/05/06/wpf-listviewgridview-minimum-and-maximum-width-for-a-column.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/121934.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/121934.aspx</trackback:ping>
        </item>
        <item>
            <title>I am now a Microsoft Certified Professional</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2008/04/19/i-am-now-a-microsoft-certified-professional.aspx</link>
            <description>&lt;p class="gslb_rsbPParagraph"&gt;
What a crazy week that is. I am currently in Seattle for the Microsoft Most Valuable Professional summit, which ended yesterday. I took an additional day in Seattle to meet a few friends and Siemens colleagues, and this morning got an email notifying me that I passed the MCTS exam about WPF that I took &lt;a href="http://blog.galasoft.ch/archive/2007/12/07/wpf-mcts-beta-exam.aspx" target="_blank"&gt;back then in December&lt;/a&gt;.
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
Because the exam was in beta stage when I took it, Microsoft needed a veeeeeeeery long time to evaluate the replies and check if I met the requirement. Apparently, they also had issues finding volunteers to try the beta exam, so it took even longer than planned. But hey, everything happens when you wait long enough, and as of today I am a Microsoft Certified Professional.
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
Now I want to point again what I wrote in December: I am not quite sure about the value of the MCTS exams. You are not a good developer just because you learn answers by heart. Testing one's knowledge with multiple choice questions is really absurd, especially when it comes to programming. Additionally, in Europe, most firms I know of really don't care if you have a cert or not, and rather look to your credentials, experience and education, as well as things like involvement in the community, etc...
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
But hey, the exam was free, it was fun learning for it, and I got the title, so what am I complaining about? :)
&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt;
&lt;a href="http://www.galasoft.ch" target="_new" atomicselection="true"&gt;&lt;img alt="http://www.galasoft.ch" src="http://www.galasoft.ch/images/counter-blog-all.png" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121368"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121368" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/121368.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2008/04/19/i-am-now-a-microsoft-certified-professional.aspx</guid>
            <pubDate>Sat, 19 Apr 2008 01:29:57 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/121368.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2008/04/19/i-am-now-a-microsoft-certified-professional.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/121368.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/121368.aspx</trackback:ping>
        </item>
        <item>
            <title>De WPF Integratio (About WPF Integration)</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2008/04/11/de-wpf-integratio-about-wpf-integration.aspx</link>
            <description>&lt;div class="gslb_rsbDivTitle"&gt; Introduction &lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt; I've been posting a lot about Silverlight lately, but hey, here is a WPF post, and about WPF integration, no less. &lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;: To fully understand this article, you should have a basic understanding of WPF, styles and templates, triggers, etc... &lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt; In my current project at work, I act as WPF Integrator. I am that dude who sits between the designers and the developers, and tries to avoid that they fight too much. Or something. Sometimes it works, sometimes it doesn't, you know how it is with kids. They need their freedom. But I digress. &lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt; One important task of a WPF Integrator is (drum roll) WPF integration. For us, this operation usually occurs when we have a design iteration. The way we create application components is (roughly) the following: &lt;/p&gt;
&lt;ul class="gslb_rsbList"&gt;
    &lt;li&gt; The Developer creates the component in Visual Studio. The component is composed of a main assembly (EXE or DLL), containing "functional XAML" and source code (code-behind), and a "Skins" DLL containing XAML resource dictionaries. &lt;br /&gt;
    (Note: Because we don't want any source code into the "Skins" DLL, and to avoid circular references, we actually have a 3rd assembly called "Converters". As the name shows, this assembly contains the converters (and other helper classes) that are referenced from the Skins DLL). &lt;/li&gt;
    &lt;li&gt; Together with the WPF Integrator, they create a "raw" UI. That means a basic layout made of "functional XAML", according to the wireframes created by our user experience engineers. &lt;br /&gt;
    (Note: "functional XAML" is the XAML code that is not strictly doing look&amp;amp;feel. For example, a Button tag is functional XAML, while the style and template it uses are "design XAML"). &lt;/li&gt;
    &lt;li&gt; The WPF Integrator prepares the Skins DLL by exporting all styles to it (using Blend). We follow certain guidelines in naming all the components (styles, templates, DLL names, etc...) and also in the structure of the styles and templates (see below). &lt;/li&gt;
    &lt;li&gt; The Developers start what they do best, Developing. Meanwhile, the Designer do what they do best (let me hear you:) Designing! This is the Design iteration I was referring to before. &lt;br /&gt;
    (Note: The Developer *only* works in the main assembly. The Designer *only* works in the Skins assembly. &lt;/li&gt;
    &lt;li&gt; If the Designer needs to change something in the main assembly, they contact the WPF Integrator to coordinate. &lt;/li&gt;
    &lt;li&gt; Similarly, if the Developer needs to change something in the Skins DLL, they contact the WPF Integrator to coordinate. &lt;/li&gt;
    &lt;li&gt; When a set of features are complete, the Developers' and Designers' work is &lt;span style="font-weight: bold;"&gt;integrated&lt;/span&gt; and tested. &lt;/li&gt;
&lt;/ul&gt;
&lt;p class="gslb_rsbPParagraph"&gt; Typically, we integrate the design to the application during design workshops, where a couple of Designers and Developers (and the WPF Integrator) sit together and work together, pretty much in an Extreme Programming spirit. These workshops are very intense and interesting, and usually allow fast progress in the application's look&amp;amp;feel. &lt;/p&gt;
&lt;div class="gslb_rsbDivTitle"&gt; Conventions, file structure, naming &lt;/div&gt;
&lt;ul class="gslb_rsbList"&gt;
    &lt;li&gt; A control refers to a Style which in turn refers to a Template (this is to facilitate the designers' job in Blend). &lt;/li&gt;
    &lt;li&gt; A control does *not* set its template directly, but always through a style. &lt;/li&gt;
    &lt;li&gt; If triggers are needed in the main assembly, the local style refers to a "BasedOn" style located in the Skins DLL. &lt;/li&gt;
    &lt;li&gt; A Style key is named like the control it refers to, suffixed with "Style". For example "MySpecificButtonStyle" or "ListBoxStyle" (for all ListBoxes), etc... &lt;/li&gt;
    &lt;li&gt; A Template key is named like the control it refers to, suffixed with "Template". For example "MySpecificButtonTemplate" or "ListBoxTemplate" (for all ListBoxes), etc... &lt;br /&gt;
    (note: We use the "Template" suffix for ControlTemplate and DataTemplate). &lt;/li&gt;
    &lt;li&gt; The skin resources for a given control are stored in a resource dictionary file with the "Skin" suffix. For example, the control "MyUserControl"'s resource dictionary is named "MyUserControlSkin.xaml". &lt;/li&gt;
&lt;/ul&gt;
&lt;p class="gslb_rsbPParagraph"&gt; These guidelines help the designers to understand which Style and Template belong to which control. Note that Blend makes that task easier by allowing to navigate from the main assembly to the Skins assembly with a succession of clicks. &lt;/p&gt;
&lt;div class="gslb_rsbDivTitle"&gt; Typical Designer workflow &lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt; The very first task a designer must do when he gets the code is to understand its structure. This is where the conventions mentioned above help. Typically, they work this way: &lt;br /&gt;
(Note: You can download &lt;a target="_blank" href="http://www.galasoft.ch/mydotnet/articles/resources/article-2008031901/WpfTests.BestPractices.zip"&gt;a sample application&lt;/a&gt; here, open the SLN file in Blend, and then open the main window (Window1.xaml)) &lt;/p&gt;
&lt;ul class="gslb_rsbList"&gt;
    &lt;li&gt; Open the application's main window in Blend and check the logical tree. &lt;/li&gt;
    &lt;li&gt; If a user control is found, right-click on it and choose "Edit control" (fig 1). This opens the User Control XAML file in Blend. &lt;br /&gt;
    (Of course, this fails if the User Control's source code is not available). &lt;/li&gt;
    &lt;li&gt; For any control they want to skin, select the control, and then choose the menu "Object / Style" (fig 2 and 3). &lt;/li&gt;
    &lt;li&gt; At this point, the style chosen can be local (for example if the Developer need to use a Trigger, etc. See listing 1). The Designers are trained to check the name of the file in which they are currently located (in Blend). If the file is named without a "Skin" suffix (for example MyPlugIn.xaml), they may not edit it. In that case, they look for a BasedOn style (fig 4). If they are currently located in a file with a "Skin" suffic (for example "MyPlugInSkin.xaml", then they may edit it (fig 5). &lt;/li&gt;
    &lt;li&gt; Once in the Style, they can select the context menu "Edit Control Parts (Template) / Edit Template". This opens the Control Template in Blend, where they can rework to look&amp;amp;feel of the control completely (including triggers, animations, etc...) &lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gslb_rsbDivImage"&gt; &lt;img title="Figure 1: Edit control" alt="Figure 1: Edit control" src="http://www.galasoft.ch/blogs-all/2008041001.png" /&gt;
&lt;div class="gslb_rsbDivLegend"&gt; Figure 1: Edit control &lt;/div&gt;
&lt;/div&gt;
&lt;div class="gslb_rsbDivImage"&gt; &lt;img title="Figure 2: Selecting a control" alt="Figure 2: Selecting a control" src="http://www.galasoft.ch/blogs-all/2008041002.png" /&gt;
&lt;div class="gslb_rsbDivLegend"&gt; Figure 2: Selecting a control &lt;/div&gt;
&lt;/div&gt;
&lt;div class="gslb_rsbDivImage"&gt; &lt;img title="Figure 3: Edit style" alt="Figure 3: Edit style" src="http://www.galasoft.ch/blogs-all/2008041003.png" /&gt;
&lt;div class="gslb_rsbDivLegend"&gt; Figure 3: Edit style &lt;/div&gt;
&lt;/div&gt;
&lt;div class="gslb_rsbDivCodeSection"&gt;
&lt;div class="gslb_rsbDivCode" style="white-space: pre; font-family: Monospace;"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="GO"&lt;/span&gt;
        &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;
        &lt;span class="attr"&gt;Click&lt;/span&gt;&lt;span class="kwrd"&gt;="GoButton_Click"&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;Button.Style&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;Style&lt;/span&gt; &lt;span class="attr"&gt;TargetType&lt;/span&gt;&lt;span class="kwrd"&gt;="Button"&lt;/span&gt;
           &lt;span class="attr"&gt;BasedOn&lt;/span&gt;&lt;span class="kwrd"&gt;="{StaticResource RoundButtonStyle}"&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;Setter&lt;/span&gt; &lt;span class="attr"&gt;Property&lt;/span&gt;&lt;span class="kwrd"&gt;="IsEnabled"&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;Style.Triggers&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;DataTrigger&lt;/span&gt; &lt;span class="attr"&gt;Binding&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ElementName=DirectoryNameTextBox,
                                       Path=Text}"&lt;/span&gt;
                 &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="{x:Static sys:String.Empty}"&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;Setter&lt;/span&gt; &lt;span class="attr"&gt;Property&lt;/span&gt;&lt;span class="kwrd"&gt;="IsEnabled"&lt;/span&gt;
                  &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&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;DataTrigger&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;Style.Triggers&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;Style&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;Button.Style&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;Button&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class="gslb_rsbDivLegend"&gt;
Listing 1: Local style using a Trigger, Based On a skin style
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gslb_rsbDivImage"&gt; &lt;img title="Figure 4: Edit " based-on=" style" alt="Figure 4: Edit " src="http://www.galasoft.ch/blogs-all/2008041004.png" /&gt;
&lt;div class="gslb_rsbDivLegend"&gt; Figure 4: Edit "based-on" style &lt;/div&gt;
&lt;/div&gt;
&lt;div class="gslb_rsbDivImage"&gt; &lt;img title="Figure 5: Editing the style in the Skin file" alt="Figure 5: Editing the style in the Skin file" src="http://www.galasoft.ch/blogs-all/2008041005.png" /&gt;
&lt;div class="gslb_rsbDivLegend"&gt; Figure 5: Editing the style in the Skin file &lt;/div&gt;
&lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt; Note: Here we see the advantage of setting the "Template" property in the Style instead of directly in the control: The Designer can see the "shape" of the control already in Blend, without having to rebuild. &lt;/p&gt;
&lt;div class="gslb_rsbDivImage"&gt; &lt;img title="Figure 6: Editing the template in the Skin file" alt="Figure 6: Editing the template in the Skin file" src="http://www.galasoft.ch/blogs-all/2008041006.png" /&gt;
&lt;div class="gslb_rsbDivLegend"&gt; Figure 6: Editing the template in the Skin file &lt;/div&gt;
&lt;/div&gt;
&lt;div class="gslb_rsbDivTitle"&gt; The importance of Blend &lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt; This workflow would fail miserably without Blend. It can never be repeated often enough: &lt;span style="font-weight: bold;"&gt;You should keep your application Blendable!&lt;/span&gt; (as long as possible). Blend will fail to represent the UI in some circumstances. For example, if your application connects to a COM based component, this is something that Blend cannot handle. Similarly, if your application uses any kind of network service to get data, Blend won't be able to represent this data. This is where the MVVM (Model - View - ViewModel pattern comes handy: By enforcing a data-driven UI, you give the developer the possibility to create "design-time" data, i.e. data which is only used when the application runs in Blend (or in the Visual Studio WPF designer). I could talk about that for hours, and this jumps the scope of this post, but you can read more info about MVVM here: &lt;/p&gt;
&lt;ul class="gslb_rsbList"&gt;
    &lt;li&gt; &lt;a target="_blank" href="http://blogs.msdn.com/johngossman/"&gt;John Gossman&lt;/a&gt;'s blog. &lt;/li&gt;
    &lt;li&gt; &lt;a target="_blank" href="http://blogs.msdn.com/dancre/archive/2006/10/11/datamodel-view-viewmodel-pattern-series.aspx"&gt;Dan Crevier&lt;/a&gt;'s blog. &lt;/li&gt;
    &lt;li&gt; Josh Smith's &lt;a target="_blank" href="http://www.codeproject.com/KB/WPF/MVCtoUnitTestinWPF.aspx"&gt;excellent article&lt;/a&gt; at CodeProject &lt;/li&gt;
    &lt;li&gt; Dr WPF's new Software Architecture Pattern: &lt;a target="_blank" href="http://www.drwpf.com/blog/Home/tabid/36/EntryID/27/Default.aspx"&gt;M-V-poo&lt;/a&gt;. &lt;/li&gt;
    &lt;li&gt; My presentation at TechDays 2008 in Basel (&lt;a target="_blank" href="http://www.galasoft.ch/mydotnet/articles/resources/article-2008031901/SiemensGoesWPF.zip"&gt;slides&lt;/a&gt;, &lt;a target="_blank" href="http://www.galasoft.ch/mydotnet/articles/resources/article-2008031901/WpfTests.BestPractices.zip"&gt;source code&lt;/a&gt;). &lt;/li&gt;
    &lt;li&gt; And many more places on the web... &lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gslb_rsbDivTitle"&gt; Using WinMerge as an integration tool &lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt; During these integration phases, I use &lt;a target="_blank" href="http://winmerge.org/"&gt;WinMerge&lt;/a&gt; a lot. The reasons for using this merging tool are multiple: &lt;/p&gt;
&lt;ul class="gslb_rsbList"&gt;
    &lt;li&gt; It is probably the best merging tool currently available for Windows (if someone disagrees, don't hesitate to comment below!!). &lt;/li&gt;
    &lt;li&gt; Our Designers don't work in our source control infrastructure. They get a copy of the code, refactored as a standalone application. This allows them to test the application easily without having to install a whole networking system (our application is following a Service Oriented Architecture). The aplication they get features a test mode, allowing them to simulate certain conditions (again, see my &lt;a target="_blank" href="http://www.galasoft.ch/mydotnet/articles/resources/article-2008031901/SiemensGoesWPF.zip"&gt;TechDays talk&lt;/a&gt; and the &lt;a target="_blank" href="http://www.galasoft.ch/mydotnet/articles/resources/article-2008031901/WpfTests.BestPractices.zip"&gt;source code&lt;/a&gt; for details). Because they work disconnected from the source control, a merging operation is needed. &lt;/li&gt;
    &lt;li&gt; The merging steps give me a good occasion to review the Designers and Developers work, and to understand it. This is an additional step towards code consistency and code quality (4 eyes review principle). &lt;/li&gt;
&lt;/ul&gt;
&lt;p class="gslb_rsbPParagraph"&gt; WinMerge is simply amazing, a must-use tool for a WPF Integrator (at least if you work according to a similar workflow as we do). It is free (amazing, when you see the quality of this tool), was clearly developed by people who needed such a tool and decided to create it (according to the "eat your dog food" idea), and can even be integrated into your favourite source control framework (yes, even ClearCase, which we are forced to use). You can compare folders, binary files, text files with a very clear user interface. All merging operations can be performed using the keyboard only, which is extremely ergonomic. Honestly, I love that tool. &lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt; By the way, I didn't mention it yet, but you can also edit both files you are comparing in WinMerge, and save both of them. &lt;/p&gt;
&lt;div class="gslb_rsbDivImage"&gt; &lt;img title="WinMerge, merging tool" alt="WinMerge, merging tool" src="http://www.galasoft.ch/blogs-all/2008040901.png" /&gt;
&lt;div class="gslb_rsbDivLegend"&gt; WinMerge, merging tool &lt;/div&gt;
&lt;/div&gt;
&lt;div class="gslb_rsbDivTitle"&gt; Conclusion &lt;/div&gt;
&lt;p class="gslb_rsbPParagraph"&gt; Much has been written about the Designer-Developer workflow, the WPF Integrator role, the MVVM (or MV*) pattern, etc... In our project, we have the chance to use these principles in a real life situation. I can honestly say, I rarely had so much fun developing software ever. The only thing I can think of that made (almost) as much fun was the big ASP.NET project I worked on prior to this one. The Integrator role is a great place to be.&lt;/p&gt;
&lt;p class="gslb_rsbPParagraph"&gt; (Note: I also file this under Silverlight because WinMerge is also very useful for Silverlight integration, even though the Style and Template system is not as rich as in WPF yet). &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121193"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121193" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/121193.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2008/04/11/de-wpf-integratio-about-wpf-integration.aspx</guid>
            <pubDate>Fri, 11 Apr 2008 20:38:56 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/121193.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2008/04/11/de-wpf-integratio-about-wpf-integration.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/121193.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/121193.aspx</trackback:ping>
        </item>
        <item>
            <title>TechDays 2008: Slides and Code of my presentation available online</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2008/03/27/techdays-2008-slides-and-code-of-my-presentation-available-online.aspx</link>
            <description>&lt;p class="gslb_rsbPParagraph"&gt;The slides and demo source code of my presentation at TechDays last week are available online. &lt;br /&gt;You will find: &lt;/p&gt; &lt;ul class="gslb_rsbList"&gt; &lt;li&gt;&lt;a href="http://download.microsoft.com/download/3/a/3/3a31f2e5-39fe-4df0-ba40-a5fc96b14a05/A106_Siemens%20goes%20WPF_lessons%20learned.ppt" target="_blank"&gt;Slides&lt;/a&gt; (Powerpoint 2007)  &lt;/li&gt;&lt;li&gt;&lt;a href="http://download.microsoft.com/download/3/a/3/3a31f2e5-39fe-4df0-ba40-a5fc96b14a05/A106_Tests%20BestPractices.zip" target="_blank"&gt;Source code&lt;/a&gt; (Visual Studio 2008 C#)  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/switzerland/msdn/de/techdays/download.aspx#20" target="_blank"&gt;Download page&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p class="gslb_rsbPParagraph"&gt;I hope that these documents will help you in your "quest for WPF". Let me know if you have questions or comments through the blog!! &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120801"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120801" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/120801.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2008/03/27/techdays-2008-slides-and-code-of-my-presentation-available-online.aspx</guid>
            <pubDate>Thu, 27 Mar 2008 19:46:20 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/120801.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2008/03/27/techdays-2008-slides-and-code-of-my-presentation-available-online.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/120801.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/120801.aspx</trackback:ping>
        </item>
        <item>
            <title>TechDays 08: Talked about WPF and now back home</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2008/03/20/techdays-08-talked-about-wpf-and-now-back-home.aspx</link>
            <description>&lt;p class="gslb_rsbPParagraph"&gt;The Swiss edition of the TechDays 2008 is over. It was a great success,many people came, and as far as I can say, people had a good time. I didn't attend any sessions though, because I hung out in the main area instead and met a number of people (some of them I knew from MIX or other occasions), and talked talked talked. Yesterday evening, there was a party, I didn't stay too late though because I wanted to be well rested for my talk this morning. &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;My talk titled "Siemens goes WPF, Lessons learned" went great. It was in the first slot of the day, starting at 9. Many people came (I didn't count, but the room was 90% full, I'd say). People even laughed at my lame jokes (since no designers came to the session, I was free to joke about them, bwahaha :) Seriously, I regretted that no designers attended, but it's not very surprising. TechDays are rather developer-oriented (something I hope will change in the future, and Microsoft will open up and invite more designers soon). &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;I had a lot of positive feedback after the session, but if any of you who saw me want to comment more (and I definitely accept negative comments, don't be shy), feel free to use the feedback or to email me. &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;Thanks to all who attended, and thanks for the nice words! &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120672"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120672" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/120672.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2008/03/20/techdays-08-talked-about-wpf-and-now-back-home.aspx</guid>
            <pubDate>Thu, 20 Mar 2008 22:02:58 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/120672.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2008/03/20/techdays-08-talked-about-wpf-and-now-back-home.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/120672.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/120672.aspx</trackback:ping>
        </item>
        <item>
            <title>TechDays 08: My talk next Thursday in Basel, Switzerland</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2008/03/12/techdays-08-my-talk-next-thursday-in-basel-switzerland.aspx</link>
            <description>&lt;div class="gslb_rsbDivImage"&gt;&lt;img title="TechDays 08" alt="TechDays 08" src="http://www.galasoft.ch/blogs-all/2008031201.jpg" /&gt; &lt;/div&gt; &lt;p class="gslb_rsbPParagraph"&gt;Next week, on Wednesday the 19th and Thursday the 20th of March, the &lt;a href="http://www.microsoft.com/switzerland/msdn/de/techdays/default.aspx" target="_blank"&gt;TechDays Switzerland&lt;/a&gt; will take place in the St. Jakobshalle in Basel. Apprently, it's sold out and they expect around 2300 people in 5 parallel tracks. Now that's kind of making me nervous, because &lt;span style="font-weight: bold"&gt;I will be presenting a session on &lt;a href="http://www.microsoft.com/switzerland/msdn/de/techdays/agenda/default.aspx#A20080320" target="_blank"&gt;Thursday the 20th at 9AM!&lt;/a&gt;&lt;/span&gt;. &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;It's not the first time I'll be talking at a conference, but it's certainly the first time that so many people will attend, so... kind of nervous here : &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;The talk is called &lt;span style="font-weight: bold"&gt;"Siemens goes WPF: Lessons learned"&lt;/span&gt; (in English, by the way) and is about the experiences that we made between when we introduced WPF in our project in 2006 and now, where we use it intensively in our project. I'll focus on the developer-designer interaction, the MVVM pattern, Blend and Visual Studio working together, and I'll show a demo of a "best practice" application we are using internally. Additionally, I'll talk about some social aspects of WPF (personal note to Nathan: If you still don't know what the social implications of WPF are, please feel welcomed to attend my talk next week :) &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;I really hope to see you (yes, you) next week, and that people will laugh at my lame jokes. No, seriously I hope it'll be interesting and fun and that we'll make this a memorable experience together! &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;Here's the abstract: &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;&lt;span style="font-style: italic"&gt;"Introducing WPF in a firm large or small brings a set of new challenges: Learning curve, new tools, new workflows and roles, new collaboration designer-developer, etc...&lt;/span&gt; &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;&lt;span style="font-style: italic"&gt;2 years ago, Siemens Building Technologies decided to take a close look at WPF, and to use it in a new project. With the help of top experts in the field, in and out of Microsoft, we identified some of the challenges and did our best to find appropriate responses. In this presentation, we will talk about technical but also social implications of using WPF, and how to make the transition as smooth as possible. We will also see some of the advantages of using WPF over classic technologies like WinForms or MFC."&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120497"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120497" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/120497.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2008/03/12/techdays-08-my-talk-next-thursday-in-basel-switzerland.aspx</guid>
            <pubDate>Wed, 12 Mar 2008 06:44:16 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/120497.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2008/03/12/techdays-08-my-talk-next-thursday-in-basel-switzerland.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/120497.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/120497.aspx</trackback:ping>
        </item>
        <item>
            <title>#MIX08: Wrap-up post</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2008/03/09/mix08-wrap-up-post.aspx</link>
            <description>&lt;p class="gslb_rsbPParagraph"&gt;MIX08 is over, and I am home with what one could call the "post-MIX" mood. It's a mix (pun intended, haha) of various feelings &lt;/p&gt; &lt;ul class="gslb_rsbList"&gt; &lt;li&gt;Obviously I am extatic to be with my family again, even more so because I was away for almost two weeks, which I usually try to avoid. It's just so good to be with them again. I wish I could take them with me every time I am abroad.  &lt;/li&gt;&lt;li&gt;Excitement about all the new things we saw. Thinking all the time of what I'll be able to improve in my various projects using these new techniques and resources. Lots of planning to do.  &lt;/li&gt;&lt;li&gt;Planning in my head debriefings with various key people in my office and in my project.  &lt;/li&gt;&lt;li&gt;And around all this, a regret that it's over already, and longing for MIX09. The value of this conference is much more than "just" the sessions. It's the people you meet, People I knew already and whom I don't get to meet in person much because of the physical distance. And also the people I met this year for the first time. There are people with whom you just "click", you could call that friendship at first sight (wink at &lt;a href="http://notstatic.com/" target="_blank"&gt;Robbie&lt;/a&gt;, &lt;a href="http://designerslove.net/" target="_blank"&gt;Nathan&lt;/a&gt;, &lt;a href="http://chad-brown-identitymine.blogspot.com/" target="_blank"&gt;Chad&lt;/a&gt;, Mark, Jonathan, James, &lt;a href="http://weblogs.asp.net/scottgu/default.aspx" target="_blank"&gt;Scott&lt;/a&gt;, &lt;a href="http://www.joshholmes.com/" target="_blank"&gt;Josh&lt;/a&gt; (Holmes), Josh (Waggoner), &lt;a href="http://blogs.windowsclient.net/rob_relyea/default.aspx" target="_blank"&gt;Rob&lt;/a&gt;, &lt;a href="http://granthinkson.com/" target="_blank"&gt;Grant&lt;/a&gt;, &lt;a href="http://www.drwpf.com/blog/" target="_blank"&gt;Dr.WPF&lt;/a&gt;, &lt;a href="http://blog.digitalbackcountry.com/" target="_blank"&gt;Ryan&lt;/a&gt;, &lt;a href="http://www.wynapse.com/" target="_blank"&gt;Dave&lt;/a&gt;, Neil and so many others!! It was great to be with you all, guys)  &lt;/li&gt;&lt;li&gt;And a slight, very slight regret not to be in SXSW (but I would have died inside to be so long away from Alise and Laeticia) &lt;/li&gt;&lt;/ul&gt; &lt;div class="gslb_rsbDivImage"&gt;&lt;img title="Laeticia and Alise" alt="Laeticia and Alise" src="http://www.galasoft.ch/blogs-all/el2008021401.jpg" /&gt; &lt;/div&gt; &lt;p class="gslb_rsbPParagraph"&gt;I am just so grateful for all the nice comments I heard and read about my blog and my site. It's always kind of awkward and slightly embarrassing to be praised (I guess that's a remainder of my humble swiss roots) but also so rewarding. It's a new reserve of energy for the year to come, fueling new ideas and new projects. I really want to thank all the people met either in real, through Twitter, through comments on my blog (or all of the above) for their kindness. The conversations were wonderful. You all gave me great insights and ideas. Now I just need 50 hours per day to work on them all. &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;A couple of highlights I will not forget: &lt;/p&gt; &lt;ul class="gslb_rsbList"&gt; &lt;li&gt;A lunch-conversation with &lt;a href="http://blogs.msdn.com/johngossman/" target="_blank"&gt;John Gossman&lt;/a&gt;, &lt;a href="http://blogs.windowsclient.net/rob_relyea/default.aspx" target="_blank"&gt;Rob Relyea&lt;/a&gt;, Mark Feinholz and Ted Hu. Honestly, I cannot remember what I ate. The talk was so rich and intense that all my attention was on it. Talking about the MVVM pattern, about the way Blend was built made me realize even more how revolutionary Blend is to client application development.  &lt;/li&gt;&lt;li&gt;The dinner thrown by &lt;a href="http://identitymine.com/" target="_blank"&gt;IdentityMine&lt;/a&gt;, including a short but great chat with Miguel.  &lt;/li&gt;&lt;li&gt;Meeting Neil Rowe and "clicking" so well. Looking forward to a fruitful collaboration.  &lt;/li&gt;&lt;li&gt;The lunch with &lt;a href="http://www.clarkezone.net/" target="_blank"&gt;James Clarke&lt;/a&gt; on the last day and the great discussion about Encoder and also mobile devices.  &lt;/li&gt;&lt;li&gt;The impromptu meetings in the open space area.  &lt;/li&gt;&lt;li&gt;The Twitter experience. Really helpful. I met so many people through this means. &lt;/li&gt;&lt;/ul&gt; &lt;p class="gslb_rsbPParagraph"&gt;The keynote with Steve Ballmer and Guy Kawasaki was great. I had never seen Steve nor Guy talk before, and I honestly didn't know what to expect. I am not a big fan of the "monkey" act, so I was kind of reserved about what I was going to see. It turned out that it was really, really great. I was amazed to see how much "on top of things" Steve is. How interesting and insightful his comments were. And also, beneath the ironic comments, the respect for Apple, Google, Adobe... Guy has it right when he talks of the new Microsoft, a message I always try to pass when I talk about my own collaboration with them. Microsoft is not in killer mode anymore, people (at least not the DevDiv). They are helpful, innovative, interested in what others do with their technology. Of course it's not perfect yet, but honestly, they have really come a long way, and they do it much better than many other companies (including our own Siemens) does. If only the journalists could get the message, stop the endless and fruitless bashing and give Microsoft's technologies the deserved attention. Of course it would need some work from their part, to even understand what these technologies are all about instead of simply rehashing the old messages. &lt;/p&gt; &lt;p class="gslb_rsbPParagraph"&gt;MIX08 is done, let's look forward to MIX09: &lt;span style="font-weight: bold"&gt;Wednesday, March 18 - Friday, March 20, 2008 at the Venetian Resort Hotel Casino in Las Vegas, Nevada&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120416"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120416" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/120416.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2008/03/09/mix08-wrap-up-post.aspx</guid>
            <pubDate>Sun, 09 Mar 2008 20:16:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/120416.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2008/03/09/mix08-wrap-up-post.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/120416.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/120416.aspx</trackback:ping>
        </item>
    </channel>
</rss>