<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:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>WPF</title>
        <link>http://geekswithblogs.net/mrnat/category/6901.aspx</link>
        <description>WPF</description>
        <language>en-US</language>
        <copyright>Nat Luengnaruemitchai</copyright>
        <managingEditor>mr_nat@hotmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>WPF: Transform trigger into event</title>
            <link>http://geekswithblogs.net/mrnat/archive/2007/09/20/115472.aspx</link>
            <description>&lt;p&gt;Yesterday, I had a problem where I need to hook up an event to a certain data condition. I first thought about &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.eventtrigger.aspx"&gt;EventTrigger&lt;/a&gt;. However, it does the other way around. This class is responsible for convert event into trigger. So I digged around WPF architecture to see what I can do and bingo. I found that I can create an attached property with the following construct&lt;/p&gt; &lt;font size="2"&gt;   &lt;p&gt; &lt;/p&gt;    &lt;p&gt; &lt;/p&gt;    &lt;p&gt; &lt;/p&gt;    &lt;p&gt; &lt;/p&gt;    &lt;p&gt;&lt;font size="2"&gt;and then in XAML, you can register for this event by&lt;/font&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;       &lt;p&gt;&amp;lt;&lt;font color="#a31515" size="2"&gt;TextBox&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;Text&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Try me&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;            &lt;br /&gt;    &amp;lt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;TextBox.Style&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;            &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;        &amp;lt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;Style&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;TargetType&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;{x:Type TextBox}&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;            &lt;br /&gt;            &amp;lt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;Style.Triggers&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;            &lt;br /&gt;                &amp;lt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;Trigger&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;Property&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Text&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;Value&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Cool&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;            &lt;br /&gt;                    &amp;lt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;Setter&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;Property&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;me:Window1.SomethingHappened&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;Value&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;True&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; /&amp;gt;            &lt;br /&gt;                &amp;lt;/&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;Trigger&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;            &lt;br /&gt;            &amp;lt;/&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;Style.Triggers&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;            &lt;br /&gt;        &amp;lt;/&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;Style&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;            &lt;br /&gt;    &amp;lt;/&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;TextBox.Style&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;            &lt;br /&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;TextBox&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;/font&gt;      &lt;p&gt; &lt;/p&gt;      &lt;p&gt;&lt;/p&gt;     &lt;font size="2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;static&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;readonly&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DependencyProperty&lt;/font&gt;&lt;font size="2"&gt; SomethingHappenedProperty = &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DependencyProperty&lt;/font&gt;&lt;font size="2"&gt;.RegisterAttached(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;"SomethingHappened"&lt;/font&gt;&lt;font size="2"&gt;,&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;typeof&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;bool&lt;/font&gt;&lt;font size="2"&gt;),&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;typeof&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;Window1&lt;/font&gt;&lt;font size="2"&gt;),&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;PropertyMetadata&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;false&lt;/font&gt;&lt;font size="2"&gt;,&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;PropertyChangedCallback&lt;/font&gt;&lt;font size="2"&gt;(SomethingHappened)));&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;bool&lt;/font&gt;&lt;font size="2"&gt; GetSomethingHappened(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DependencyObject&lt;/font&gt;&lt;font size="2"&gt; d)      &lt;br /&gt;{       &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;    return&lt;/font&gt;&lt;font size="2"&gt; (&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;bool&lt;/font&gt;&lt;font size="2"&gt;)d.GetValue(SomethingHappenedProperty);      &lt;br /&gt;}&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;void&lt;/font&gt;&lt;font size="2"&gt; SetSomethingHappened(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DependencyObject&lt;/font&gt;&lt;font size="2"&gt; d, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;bool&lt;/font&gt;&lt;font size="2"&gt; value)      &lt;br /&gt;{       &lt;br /&gt;    d.SetValue(SomethingHappenedProperty, value);       &lt;br /&gt;}&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;private&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;void&lt;/font&gt;&lt;font size="2"&gt; SomethingHappened(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DependencyObject&lt;/font&gt;&lt;font size="2"&gt; d, &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DependencyPropertyChangedEventArgs&lt;/font&gt;&lt;font size="2"&gt; e)      &lt;br /&gt;{       &lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;    // do something here      &lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115472"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115472" 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/mrnat/aggbug/115472.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Nat Luengnaruemitchai</dc:creator>
            <guid>http://geekswithblogs.net/mrnat/archive/2007/09/20/115472.aspx</guid>
            <pubDate>Thu, 20 Sep 2007 12:55:38 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mrnat/comments/115472.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mrnat/archive/2007/09/20/115472.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/mrnat/comments/commentRss/115472.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mrnat/services/trackbacks/115472.aspx</trackback:ping>
        </item>
        <item>
            <title>Free WPF DataGrid from Infragistics</title>
            <link>http://geekswithblogs.net/mrnat/archive/2007/09/18/115445.aspx</link>
            <description>Andrew Flick announced that Infragistics WPF Express Edition will be free as well. Before this release, xamDataGrid suffered a lot of performance problem. It seems that they have fixed various performance problem. So I think I will give it a try again later. To try it out visit http://blogs.infragistics.com/blogs/andrew_flick/archive/2007/09/13/infragistics-netadvantage-for-wpf-express-aka-free-grid.aspx for more information.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115445"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115445" 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/mrnat/aggbug/115445.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Nat Luengnaruemitchai</dc:creator>
            <guid>http://geekswithblogs.net/mrnat/archive/2007/09/18/115445.aspx</guid>
            <pubDate>Wed, 19 Sep 2007 02:25:59 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mrnat/comments/115445.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mrnat/archive/2007/09/18/115445.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/mrnat/comments/commentRss/115445.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mrnat/services/trackbacks/115445.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF ComboBox with LimitToList feature: Part I</title>
            <link>http://geekswithblogs.net/mrnat/archive/2007/08/07/114476.aspx</link>
            <description>&lt;p&gt;Sometimes, you would like to get a combobox where a user can type. This can be done by turning on IsEditable property to true. However, it opens another can of worm, it means the user can type anything in the combobox even text that is not in the ItemsSource.&lt;/p&gt;
&lt;p&gt;To provide LimitToList feature, you can hook up an event to PreviewLostKeyboardFocus as follows: &lt;/p&gt;
&lt;pre&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt; &lt;/p&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ComboBox_PreviewLostKeyboardFocus(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;KeyboardFocusChangedEventArgs&lt;/span&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (!e.Handled)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;TextBox&lt;/span&gt; textBox = e.OldFocus &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;TextBox&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;ComboBox&lt;/span&gt; comboBox = sender &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ComboBox&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (textBox != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; comboBox!=&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                    &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;DependencyObject&lt;/span&gt; common = comboBox.FindCommonVisualAncestor(e.NewFocus &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DependencyObject&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                    &lt;/span&gt;&lt;span style="COLOR: green"&gt;// validate only the case when user step out of this control&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (common != comboBox)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; invalid = !&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(textBox.Text) &amp;amp;&amp;amp; comboBox.SelectedIndex &amp;lt; 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (invalid)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                       &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                            &lt;/span&gt;e.Handled = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: TH"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: TH"&gt;&lt;font face="Arial"&gt;Later, I will show you how to create a visual clue to indicate that the combobox is invalid&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114476"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114476" 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/mrnat/aggbug/114476.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Nat Luengnaruemitchai</dc:creator>
            <guid>http://geekswithblogs.net/mrnat/archive/2007/08/07/114476.aspx</guid>
            <pubDate>Wed, 08 Aug 2007 01:37:47 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mrnat/comments/114476.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mrnat/archive/2007/08/07/114476.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/mrnat/comments/commentRss/114476.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mrnat/services/trackbacks/114476.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF Nested Template Bug</title>
            <link>http://geekswithblogs.net/mrnat/archive/2007/07/29/114255.aspx</link>
            <description>&lt;p&gt;I posted in MSDN Forum a while ago that I ran into a WPF bug that occurs when you put one template inside another template like &lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;    &amp;lt;ListBox HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"&lt;br /&gt;
        Background="Honeydew" ItemsSource="{Binding}"&amp;gt;&lt;br /&gt;
        &amp;lt;ListBox.ItemTemplate&amp;gt;&lt;br /&gt;
                &amp;lt;DataTemplate&amp;gt;&lt;br /&gt;
   &amp;lt;ListBox ItemsSource="{Binding}"&amp;gt;&lt;br /&gt;
    &amp;lt;ListBox.ItemTemplate&amp;gt;&lt;br /&gt;
     &amp;lt;DataTemplate&amp;gt;&lt;br /&gt;
      &amp;lt;etc..............&lt;br /&gt;
     &amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;
    &amp;lt;/ListBox.ItemTemplate&amp;gt;&lt;br /&gt;
   &amp;lt;/ListBox&amp;gt;&lt;br /&gt;
  &amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;
 &amp;lt;/ListBox.ItemTemplate&amp;gt;&lt;br /&gt;
    &amp;lt;/ListBox&amp;gt;&lt;br /&gt;
&lt;/font&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;The above code won't fail during the compilation. However,during the run, you will notice that only the first item of the outer listbox will show up but not the rest. Sam Bent, WPF/WinFX Dev Lead answered that this is a nested template bug. If template is used nestedly, the result will be unexpected. To workaround, the template should be defined as a separated template in Resources section like:&lt;/font&gt;&lt;/p&gt;
&lt;font face="Arial"&gt;
&lt;p align="left"&gt;&amp;lt;Window.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;DataTemplate x:Key="InnerTemplate"&amp;gt;&lt;br /&gt;
        &amp;lt;StackPanel&amp;gt;&lt;br /&gt;
            &amp;lt;ComboBox ItemsSource="{Binding Source={StaticResource CategoryData}, XPath=Category}"&lt;br /&gt;
            SelectedValue="{Binding XPath=Category}"/&amp;gt;&lt;br /&gt;
            &amp;lt;TextBlock Text="{Binding XPath=Title}" /&amp;gt;&lt;br /&gt;
            &amp;lt;TextBlock Text="{Binding XPath=Summary}" /&amp;gt;&lt;br /&gt;
        &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;
    &amp;lt;DataTemplate x:Key="OuterTemplate"&amp;gt;&lt;br /&gt;
        &amp;lt;StackPanel&amp;gt;&lt;br /&gt;
            &amp;lt;ListBox HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"&lt;br /&gt;
                ItemTemplate="{StaticResource InnerTemplate}" Background="Honeydew" ItemsSource="{Binding XPath=.}"&amp;gt;&lt;br /&gt;
            &amp;lt;/ListBox&amp;gt;&lt;br /&gt;
        &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;
&amp;lt;/Window.Resources&amp;gt; &lt;/p&gt;
&lt;p align="left"&gt;&amp;lt;Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch"&amp;gt;&lt;br /&gt;
    &amp;lt;ListBox HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"&lt;br /&gt;
            ItemTemplate="{StaticResource OuterTemplate}" Background="Honeydew"&amp;gt;&lt;br /&gt;
        &amp;lt;ListBox.ItemsSource&amp;gt;&lt;br /&gt;
            &amp;lt;Binding Source="{StaticResource InventoryData}"&lt;br /&gt;
                    XPath="*[@Stock='out'] | *[@Number&amp;gt;=8 or @Number=3]"/&amp;gt;&lt;br /&gt;
        &amp;lt;/ListBox.ItemsSource&amp;gt;&lt;br /&gt;
    &amp;lt;/ListBox&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p align="left"&gt; &lt;/p&gt;
&lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114255"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114255" 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/mrnat/aggbug/114255.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Nat Luengnaruemitchai</dc:creator>
            <guid>http://geekswithblogs.net/mrnat/archive/2007/07/29/114255.aspx</guid>
            <pubDate>Sun, 29 Jul 2007 13:17:54 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mrnat/comments/114255.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mrnat/archive/2007/07/29/114255.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/mrnat/comments/commentRss/114255.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mrnat/services/trackbacks/114255.aspx</trackback:ping>
        </item>
    </channel>
</rss>