<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/kobush/category/6488.aspx</link>
        <description>Information and articles about the Windows Presentation Foundation. </description>
        <language>pl-PL</language>
        <copyright>Szymon Kobalczyk</copyright>
        <managingEditor>skobalczyk@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Two cool Microsoft Surface apps from InterKnowlogy</title>
            <link>http://geekswithblogs.net/kobush/archive/2008/08/29/124783.aspx</link>
            <description>&lt;p&gt;InterKnowlogy is always on the cutting edge of the Microsoft Platform so its not surprise that we were among first to build applications in WPF, Silverlight and now on &lt;a href="http://www.microsoft.com/surface" target="_blank"&gt;Microsoft Surface&lt;/a&gt; (a touch screen computer embedded in a coffee table). I'm excited to show you two applications that we released recently.&lt;/p&gt; &lt;h1&gt;VitruView&lt;/h1&gt; &lt;p&gt;VirtuView is a collaborative environment for viewing and annotating patient's examination results on anatomic 3D models. This application is evolution of our earlier &lt;a href="http://www.interknowlogy.com/lab/Pages/Angiographer.aspx" target="_blank"&gt;Angiographer&lt;/a&gt; that we build for &lt;a href="http://intermountainhealthcare.org/xp/public/" target="_blank"&gt;InterMountain Healthcare&lt;/a&gt; together with our partner &lt;a href="http://www.zygote.com/" target="_blank"&gt;Zygote&lt;/a&gt; (world's leader in 3D human anatomy models and textures). VirtuView lets users zoom and rotate the 3D heart models with your hands. You can use your fingers to draw arteries, place Stents and add annotations. And because this is multitouch you can use more than one finger or many people can work at once. This application is done in WPF and uses &lt;a href="http://www.healthvault.com/" target="_blank"&gt;Microsoft HealthVault&lt;/a&gt; to securely store patient's data. &lt;/p&gt; &lt;p&gt;Check out this video demonstration from Tim Huckaby and Kevin Kennedy:&lt;/p&gt; &lt;p&gt;&lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/67733/VitruView/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Update: &lt;/strong&gt;Here you can watch another video with Tim and Dr. Peter Kuhn from &lt;a href="http://blogs.msdn.com/healthblog/archive/2008/08/27/microsoft-hug-wish-you-were-here-day-2.aspx" target="_blank"&gt;Health User Group Conference&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;h1&gt;History at your fingertips&lt;/h1&gt; &lt;p&gt;This amazing application was built in conjunction with Microsoft and the Library of Congress. It chronicles the history of the republican and democratic national conventions in interactive Surface experience. The application is featured LIVE on Surface units at both upcoming conventions, and it was shown on the ABC National News this week and you can watch it on the &lt;a href="http://abcnews.go.com/Video/playerIndex?id=5660365" target="_blank"&gt;ABCnews.com website&lt;/a&gt; (move forward to approximately 01:18). &lt;/p&gt; &lt;p&gt;Here is a more technical demonstration from Rodney Guzman:&lt;/p&gt;&lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/67733/History%20At%20Your%20Fingertips_2/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;p&gt; &lt;/p&gt; &lt;h1&gt;What about me?&lt;/h1&gt; &lt;p&gt;Meanwhile I've been working with great team at &lt;a href="http://www.coloniallife.com/" target="_blank"&gt;Colonial Life &amp;amp; Accident Insurance Company&lt;/a&gt; that built the Harmony solution. We helped them built a WPF offline version of the Web based Harmony self-enrollment system that will be used by insurance agents. You can find more details in this &lt;a href="http://www.microsoft.com/casestudies/casestudy.aspx?casestudyid=4000002535" target="_blank"&gt;Microsoft case study&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124783"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124783" 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/kobush/aggbug/124783.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2008/08/29/124783.aspx</guid>
            <pubDate>Fri, 29 Aug 2008 06:41:02 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/124783.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2008/08/29/124783.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/124783.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/124783.aspx</trackback:ping>
        </item>
        <item>
            <title>How I won the Lab49 WPF in Finance Innovation Contest?</title>
            <link>http://geekswithblogs.net/kobush/archive/2008/03/17/120601.aspx</link>
            <description>&lt;p&gt;&lt;img style="margin: 0px 0px 5px 5px" src="http://www.lab49.com/files/logos/wpf_logo_blue3.gif" align="right" /&gt;Honestly, I still don't know how I did it. The LAB49 &lt;a href="http://wpfcontest.lab49.com/"&gt;WPF in Finance Innovation Contest&lt;/a&gt; was announced back in December and I think I first read about it on &lt;a href="http://blogs.msdn.com/tims/archive/2007/12/04/wpf-and-silverlight-contest-season-is-here.aspx"&gt;Tim Sneath blog&lt;/a&gt;. With &lt;a href="http://wpfcontest.lab49.com/prizes.aspx"&gt;all the cool prizes&lt;/a&gt; I was very inclined to participate, but it quickly turned out that its available only to US citizens. However that changed in the first week of February, so I started considering it again, but still didn't had any clue what to do. You see the goal of this contest was to create a WPF application that visualizes a set of provided financial data in some interesting way. While the first part was easy (writing the app in WPF) the hardest part was to figure out what to do with the data. Only after "last call to action" email from Daniel Chait I decided its about time to start coding.&lt;/p&gt; &lt;p&gt;Because I started working late on this project, initially I wanted to create only a charting control capable of displaying the line and candlestick plot of stock prices. But after the contest deadline was extended I started thinking of a better way to visualize the stock prices for a given day – something that goes beyond a simple listbox or a datagrid. The next option I considered was to create a heatmap – i.e. use color gradients to denote the change in stock prices relative to the previous day. But in all samples I’ve seen these symbols were placed on a regular grid and the placement didn’t correspond in any particular way with the data. I started thinking about how to sort the symbols so that those that experienced similar data change would be close to each other, and those with different data change remain further apart. This finally led me to the idea of applying &lt;a href="http://www.red3d.com/cwr/boids/"&gt;Craig Reynolds’ flocking algorithm&lt;/a&gt; to perform this clustering.  &lt;/p&gt;&lt;p&gt;Here is a screenshot from my final entry called &lt;strong&gt;Stock Information Boids&lt;/strong&gt;:  &lt;/p&gt;&lt;p align="center"&gt; &lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/HowIwontheLab49WPFinFinanceInnovationCon_11EC2/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="480" alt="Stock Information Boids WPF Application" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/HowIwontheLab49WPFinFinanceInnovationCon_11EC2/image_thumb_1.png" width="591" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Also you can already download the source code for this application from &lt;a href="http://code.msdn.microsoft.com/KobushCode/Release/ProjectReleases.aspx?ReleaseId=667"&gt;my resource page at MSDN Code Gallery&lt;/a&gt;. Make sure to read the user guide that describes how the algorithm works and how to use the application.  &lt;/p&gt;&lt;p&gt;Turns out that for some reason the judges liked my solution, because last week at the closing keynote of 2008 &lt;a href="http://www.financialdevelopers.com"&gt;Microsoft Financial Services Developer Conference&lt;/a&gt; in New York, &lt;a href="http://blog.lab49.com/archives/1888"&gt;Daniel Chait announced&lt;/a&gt; that I won &lt;a href="http://blog.lab49.com/archives/1884"&gt;the grand prize in the contest&lt;/a&gt;!  &lt;/p&gt;&lt;p&gt;The two finalist were &lt;strong&gt;Jacob Carpenter&lt;/strong&gt; and &lt;strong&gt;Jobi K Joy&lt;/strong&gt;, while the honorable mention went to &lt;strong&gt;Paul Hounshell&lt;/strong&gt;. Congratulations guys, great work! You can download their very cool applications from here: &lt;/p&gt; &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-5b79e3a01fce9e08.skydrive.live.com/embedrowdetail.aspx/2008%20WPF%20in%20Finance%20Innovation%20Contest" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;p&gt;In following weeks I will try to share some details on my implementations (in particular about the Timeline and Flock controls). I was already told that &lt;a href="http://jobijoy.blogspot.com/"&gt;Jobi K Joy&lt;/a&gt; and &lt;a href="http://jacobcarpenter.wordpress.com/"&gt;Jacob Carpenter&lt;/a&gt; plan to do the same, so make sure to subscribe to their blogs too.  &lt;/p&gt;&lt;p&gt;I would like to thank &lt;a href="http://wpfcontest.lab49.com/judges.aspx"&gt;the judges&lt;/a&gt; for selecting my entry. And last but not least, big kisses for my wife Joanna for letting me work on the project all nights and weekends considering her present condition (L)&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120601"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120601" 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/kobush/aggbug/120601.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2008/03/17/120601.aspx</guid>
            <pubDate>Mon, 17 Mar 2008 20:39:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/120601.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2008/03/17/120601.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/120601.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/120601.aspx</trackback:ping>
        </item>
        <item>
            <title>Introducing WikiSpider</title>
            <link>http://geekswithblogs.net/kobush/archive/2008/01/30/119101.aspx</link>
            <description>&lt;p&gt;About two weeks ago &lt;a href="http://www.microsoft.com/poland/developer/kontakt/dbiesiada.mspx"&gt;Daniel Biesiada&lt;/a&gt; (who is ISV DE here in Poland) announced on his blog a little &lt;a href="http://blogs.msdn.com/danieb/archive/2008/01/13/pl-geek-w-spos-b-na-nud-w-tym-konkurs.aspx"&gt;programming contest&lt;/a&gt;. The goal was to build a .NET application that would check if the the theory of &lt;a href="http://en.wikipedia.org/wiki/Six_degrees_of_separation"&gt;Six Degrees of separation&lt;/a&gt; applies to two given topics in Wikipedia. In order words to find a path from the source page to destination with no more then six links. At the time I had not much else to do (apart from setting up website for the &lt;a href="http://www.c2c2008.pl/"&gt;C2C Conference&lt;/a&gt;, helping out with the &lt;a href="http://poland.silverlightchallenge.eu/"&gt;European Silverlight Challenge&lt;/a&gt;, and preparing for the WPF Beta Exam) so I decided to give it a try. &lt;/p&gt; &lt;p&gt;Fast forward two weeks and I present you my WikiSpider:&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="534" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/e10a9ad47337_11C9E/image_3.png" width="600" border="0" /&gt; &lt;/p&gt; &lt;p&gt;As usual building this took me much more time than I initially anticipated (including few sleepless nights). And still I didn't make it before the deadline, so this even didn't count as a contest entry anymore (sigh!). However this was mainly because my personal goal was to throw in there every new piece of .NET 3.5 I could find fit - and most of them I never used before. &lt;/p&gt; &lt;p&gt;Here are some key technologies I managed to put into this:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The UI is done in &lt;strong&gt;WPF&lt;/strong&gt; (and this was the only thing here I knew a bit about). However I borrowed the graph control from the excellent &lt;a href="http://j832.com/BagOTricks/"&gt;Kevin's WPF Bag-o-Tricks&lt;/a&gt;.  &lt;/li&gt;&lt;li&gt;The caching is done using &lt;strong&gt;SQL Server Express&lt;/strong&gt;. Initially I wanted to do this using &lt;strong&gt;SQL Compact &lt;/strong&gt;but I run into performance issues and had to switch to full SQL in order to run the queries in profiler. But since this was fixed (with big help from &lt;a href="http://zine.net.pl/blogs/sqlgeek/"&gt;Paweł Potasiński&lt;/a&gt;) I could try with SQL Compact again.  &lt;/li&gt;&lt;li&gt;Of course data-access is done using &lt;strong&gt;LINQ to SQL&lt;/strong&gt;. And of course this was the main source of my problems, as it was first time I've done anything in it, and so far I only read the &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx"&gt;Scott Gu's tutorials&lt;/a&gt;. Still, I'm already in love with it.  &lt;/li&gt;&lt;li&gt;Speaking of LINQ. Initially we were screen scrapping the HTML pages to get all the links.  But turns out that Wikipedia has a little known about &lt;a href="http://en.wikipedia.org/w/query.php"&gt;Query API&lt;/a&gt; that enables to get the page content in XML. So the obvious move was to rewrite this part with &lt;strong&gt;LINQ to XML&lt;/strong&gt;.  &lt;/li&gt;&lt;li&gt;The path-finding algorithm was borrowed from &lt;a href="http://blogs.msdn.com/ericlippert/archive/2007/10/10/path-finding-using-a-in-c-3-0-part-four.aspx"&gt;Eric Lippert&lt;/a&gt;. The nice thing about it is that it uses lots of &lt;strong&gt;C# 3.0 language features&lt;/strong&gt;, so it is a great resource to learn from. The new C# syntax is so addictive that I already miss it in my other project.  &lt;/li&gt;&lt;li&gt;Finally, I wanted to publish the app with ClickOnce but run out of time. So maybe later. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I learned many interesting things and tried out some new stuff that I wanted to check out anyway. I will try to share my discoveries in the next few days, but in the meantime feel free to download and take a look at may code (I know it's not prettiest piece of code you've seen but I was in a rush to finish this on time):&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a title="SixDegreesOfWikipedia 1.0" href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=KobushCode&amp;amp;DownloadId=686"&gt;Download the source code&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Here you can also download the entries from other participants: &lt;a href="http://www.dbiesiada.com/projects/WikiPathFinding/wikiContest_LukaszSowa.zip"&gt;Łukasz Sowa&lt;/a&gt;, &lt;a href="http://www.dbiesiada.com/projects/WikiPathFinding/wikiContest_MaciejRutkowski.zip"&gt;Maciej Rutkowski&lt;/a&gt;, and &lt;a href="http://www.dbiesiada.com/projects/WikiPathFinding/WikiContest_ArkadiuszBenedykt.zip"&gt;Arkadiusz Benedykt&lt;/a&gt;. Congratulations to all of you!&lt;/p&gt; &lt;h3&gt;Installation&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;Download the code from the above link and extract it.  &lt;/li&gt;&lt;li&gt;The application uses local SQL database for caching and unfortunately you need to create it yourself (now you know why I wanted to use SQL Compact). Simply launch SSMS and create empty database called WikiCache.  &lt;/li&gt;&lt;li&gt;Run the &lt;strong&gt;Create_WikiCacheDB.sql&lt;/strong&gt; script from the &lt;strong&gt;data &lt;/strong&gt;folder to create the database schema.  &lt;/li&gt;&lt;li&gt;By default the app is configured to look for the &lt;strong&gt;WikiCache &lt;/strong&gt;database on the local &lt;strong&gt;SQLEXPRESS &lt;/strong&gt;instance. If you installed it somewhere else update the connection string in &lt;strong&gt;app.config &lt;/strong&gt;accordingly.  &lt;/li&gt;&lt;li&gt;Run the &lt;strong&gt;build.bat &lt;/strong&gt;or open solution in Visual Studio 2008 and run from there.&lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;Usage&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;Enter the name of the Wikipedia page in the address bar at the top and press the Go! button. The entered topic and the pages it links to will be displayed as graph.  &lt;/li&gt;&lt;li&gt;Clicking on any topic will make it currently selected (put it in the center of the graph).  &lt;/li&gt;&lt;li&gt;Right-click on any topic to open the context menu. Select "&lt;em&gt;Open in browser&lt;/em&gt;" to.... load the page in browser.  &lt;/li&gt;&lt;li&gt;Select "&lt;em&gt;Set as source&lt;/em&gt;" or "&lt;em&gt;Set as destination&lt;/em&gt;" to put the topic name in appropriate field on the sidebar &lt;br /&gt;[Note: &lt;em&gt;Currently it's the only way to show the sidebar&lt;/em&gt;]  &lt;/li&gt;&lt;li&gt;You can also enter the source/destination topics manually.  &lt;/li&gt;&lt;li&gt;When both are set click on the &lt;em&gt;Start &lt;/em&gt;button to begin searching for the path. Few statistics are displayed on the bottom of the sidebar.  &lt;/li&gt;&lt;li&gt;During the search you can still use the graph or navigate to other pages (thanks to the BackgroundWorker magic).  &lt;/li&gt;&lt;li&gt;When path is found it is displayed on the sidebar, and you can click on each topic to center it on graph. &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Have fun! &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119101"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119101" 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/kobush/aggbug/119101.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2008/01/30/119101.aspx</guid>
            <pubDate>Wed, 30 Jan 2008 21:22:47 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/119101.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2008/01/30/119101.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/119101.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/119101.aspx</trackback:ping>
        </item>
        <item>
            <title>UMPC + WPF = Audi Keyboard</title>
            <link>http://geekswithblogs.net/kobush/archive/2007/04/11/111454.aspx</link>
            <description>&lt;p&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/1591/o_Tegatech_Australia_Audi_Keyboard.jpg" align="right"&gt; As time goes by I keep finding more and more &lt;a href="http://blogs.msdn.com/tims/archive/tags/portfolio/default.aspx"&gt;great WPF applications&lt;/a&gt;, but this one really&amp;nbsp;got my attention. The Audi Keyboard is a WPF application that was designed for UMPCs that was used during the Melbourne Motorshow to input customer data. I actually found it on the &lt;a href="http://ubertablet.blogspot.com/2007/03/audi-take-ultra-mobile-pc-to-new-level.html"&gt;Hugo Ortega's Uber Tablet blog&lt;/a&gt; (which I'm huge fan by now) so it might have been missed by pure .NET geeks. Hugo published &lt;a href="http://ubertablet.blogspot.com/2007/03/samsung-q1-and-audi-keyboard.html"&gt;video with overview of this project&lt;/a&gt; where you can learn more details.&amp;nbsp; &lt;/p&gt; &lt;p&gt;This project is great example of how WPF brings together designers and developers enabling them to work together on the same project. There is also very interesting &lt;a href="http://www.screenedit.co.uk/sevideo/9992/9992.htm"&gt;video interview&lt;/a&gt; up on &lt;a href="http://www.screenedit.com/"&gt;ScreenEdit.com&lt;/a&gt; with Richard Bassett (the designer) and &lt;a href="http://drneil.blogspot.com"&gt;Dr. Neil&lt;/a&gt;&amp;nbsp;(the programmer). As they point out the most important lesson they learned&amp;nbsp;is that with WPF each of&amp;nbsp;them can work in the environment they are comfortable with (designer = Expression Blend, developer = Visual Studio), but this would be still part of the same project (remember that Blend reads and creates .csproj files). Also worth noting are the first impressions of seasoned designer coming to the Expression suite, and&amp;nbsp;comparing it to&amp;nbsp;competitive technologies like Flash and Adobe Illustrator. &amp;nbsp;&lt;/p&gt; &lt;p&gt;After working with WPF for a while I can 100% agree with what they say. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=111454"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=111454" 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/kobush/aggbug/111454.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2007/04/11/111454.aspx</guid>
            <pubDate>Wed, 11 Apr 2007 21:21:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/111454.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2007/04/11/111454.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/111454.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/111454.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF TabItems With Close Button</title>
            <link>http://geekswithblogs.net/kobush/archive/2007/04/08/closeabletabitem.aspx</link>
            <description>&lt;p&gt;One of the most common questions I've seen regarding the TabControl in Windows Forms was how to add a close button to each tab (similar to seen on tabs in Internet Explorer 7). &lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/1591/o_ie_tabs.png" /&gt; &lt;/p&gt; &lt;p&gt;Although there were &lt;a href="http://www.codeproject.com/cs/miscctrl/closabletabcontrolpage.asp"&gt;some solutions available&lt;/a&gt; the results weren't quite satisfactory and often requiring to &lt;a href="http://www.codeproject.com/vb/net/MDITabControl.asp?msg=1973375"&gt;rewrite the whole control from scratch&lt;/a&gt;. Recently I faced the same challenge working on the &lt;a href="http://geekswithblogs.net/kobush/archive/2007/03/13/108614.aspx"&gt;TSRI project&lt;/a&gt;. It turned out that in WPF this pretty straightforward task and in this article I'm going to show all the steps required to complete it. &lt;/p&gt; &lt;p&gt;To follow the discussion you can download the demo code first:&lt;/p&gt; &lt;p&gt;&lt;a href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=KobushCode&amp;amp;DownloadId=688"&gt;Download the source code&lt;/a&gt;&lt;/p&gt; &lt;p&gt;We start by creating a new custom control deriving from TabItem that implements this behavior. I'll name it &lt;font face="Courier New"&gt;CloseableTabItem&lt;/font&gt;.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CloseableTabItem : TabItem
{
    &lt;span class="kwrd"&gt;static&lt;/span&gt; CloseableTabItem()
    {
        DefaultStyleKeyProperty.OverrideMetadata(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(CloseableTabItem),
            &lt;span class="kwrd"&gt;new&lt;/span&gt; FrameworkPropertyMetadata(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(CloseableTabItem)));
    }
}&lt;/pre&gt;
&lt;p&gt;The instruction in static constructor informs the system that this element wants to use different style than it's parent. Since we are creating the default theme for the custom control it would be defined in &lt;font face="Courier New"&gt;generic\themes.xaml&lt;/font&gt;. &lt;/p&gt;
&lt;p&gt;Before we add more code let's create the control template first. With the aid of Expression Blend we can easily create a copy of the default template for TabItem control and start from there. The default template consists only of &lt;font face="Courier New"&gt;Grid&lt;/font&gt; and &lt;font face="Courier New"&gt;Border&lt;/font&gt; that wrap the &lt;font face="Courier New"&gt;ContentPresenter&lt;/font&gt;. We need to place additional DockPanel inside this &lt;font face="Courier New"&gt;Border&lt;/font&gt; to host both the Content and our close &lt;font face="Courier New"&gt;Button&lt;/font&gt;. Because we will reference this button from code later it's named &lt;font face="Courier New"&gt;PART_Close&lt;/font&gt; following the WPF naming convention. The button contains the "x" icon defined as &lt;font face="Courier New"&gt;Path&lt;/font&gt; element. You can see final hierarchy of elements on the image below:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/1591/o_tab_template.png" /&gt; &lt;/p&gt;
&lt;p&gt;The close button should only show it's border when mouse is over and it shouldn't accept keyboard focus, hence there is additional style called &lt;font face="Courier New"&gt;CloseableTabItemButtonStyle&lt;/font&gt;. This template consist of Border and ContentPresenter inside of a Grid. The Border is hidden by default and shows only when mouse is over the button. To be consistent with IE7 behavior I've also added triggers to change the "x" icon fill color to red when mouse is over the button or when it's pressed. &lt;/p&gt;
&lt;p&gt;We are now ready to test these templates. To use our new control first the containing namespace must be mapped to a XML namespace. We don't need to reference the resource dictionary because it is declared as default theme for the control. Here is example markup for the main window of the application: &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;
    &lt;span class="attr"&gt;xmlns:local&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:CloseableTabItemDemo"&lt;/span&gt;
    &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="CloseableTabItemDemo.MainWindow"&lt;/span&gt;
    &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="CloseableTabItem Demo"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="500"&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TabControl&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&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;local:CloseableTabItem&lt;/span&gt; &lt;span class="attr"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;="TabItem 1"&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;local:CloseableTabItem&lt;/span&gt; &lt;span class="attr"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;="TabItem 2"&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;local:CloseableTabItem&lt;/span&gt; &lt;span class="attr"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;="TabItem 3"&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;TabItem&lt;/span&gt; &lt;span class="attr"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;="TabItem 4"&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;TabControl&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Note that we can freely mix the regular TabItems with our custom controls. Here is the result when we run this application:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/1591/o_tab_demo.png" /&gt; &lt;/p&gt;
&lt;p&gt;Having all the visuals in place lets switch back to Visual Studio and finish the remining code. I choose to publish the Close button click event as the a routed event on the control. Of course I could handle it directly in the code of the control but this way I have more control on how to handle it in the application (for example I could display a confirmation dialog before closing the tab). Alternatively I could also create a custom Command and bind it directly to the close button. This would allow me to declare everything in XAML markup but I think event would be easier to use in this case. So below is the declaration for the CloseTab event:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; RoutedEvent CloseTabEvent =
    EventManager.RegisterRoutedEvent(&lt;span class="str"&gt;"CloseTab"&lt;/span&gt;, RoutingStrategy.Bubble,
        &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(RoutedEventHandler), &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(CloseableTabItem));

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; RoutedEventHandler CloseTab
{
    add { AddHandler(CloseTabEvent, &lt;span class="kwrd"&gt;value&lt;/span&gt;); }
    remove { RemoveHandler(CloseTabEvent, &lt;span class="kwrd"&gt;value&lt;/span&gt;); }
}&lt;/pre&gt;
&lt;p&gt;To raise the event I need first to attach a handler to the Button's Click event. I can do it easily by overriding the ... method. This is where I use the &lt;font face="Courier New"&gt;PART_Close&lt;/font&gt; name mentioned earlier to find the button declared in template by using the &lt;font face="Courier New"&gt;GetTemplateChild&lt;/font&gt; method. The event handler simply raises the new event. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnApplyTemplate()
{
    &lt;span class="kwrd"&gt;base&lt;/span&gt;.OnApplyTemplate();

    Button closeButton = &lt;span class="kwrd"&gt;base&lt;/span&gt;.GetTemplateChild(&lt;span class="str"&gt;"PART_Close"&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; Button;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (closeButton != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        closeButton.Click += &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Windows.RoutedEventHandler(closeButton_Click);
}

&lt;span class="kwrd"&gt;void&lt;/span&gt; closeButton_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, System.Windows.RoutedEventArgs e)
{
    &lt;span class="kwrd"&gt;this&lt;/span&gt;.RaiseEvent(&lt;span class="kwrd"&gt;new&lt;/span&gt; RoutedEventArgs(CloseTabEvent, &lt;span class="kwrd"&gt;this&lt;/span&gt;));
}&lt;/pre&gt;
&lt;p&gt;So the only thing left is to actually handle this event. This will be done in the MainWindow's code behind. Normally I would have to attach handlers for this event to each tab I created but since this is a routed event (with bubble strategy) I can also attach it once on any of it's parents (up to the Window itself). Closing the tab is done by finding the parent TabControl removing the source tab from it's Items collection.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MainWindow : System.Windows.Window
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; MainWindow()
    {
        InitializeComponent();

        &lt;span class="kwrd"&gt;this&lt;/span&gt;.AddHandler(CloseableTabItem.CloseTabEvent, &lt;span class="kwrd"&gt;new&lt;/span&gt; RoutedEventHandler(&lt;span class="kwrd"&gt;this&lt;/span&gt;.CloseTab));
    }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CloseTab(&lt;span class="kwrd"&gt;object&lt;/span&gt; source, RoutedEventArgs args)
    {
        TabItem tabItem = args.Source &lt;span class="kwrd"&gt;as&lt;/span&gt; TabItem;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (tabItem != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            TabControl tabControl = tabItem.Parent &lt;span class="kwrd"&gt;as&lt;/span&gt; TabControl;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (tabControl != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                tabControl.Items.Remove(tabItem);
        }
    }
}&lt;/pre&gt;
&lt;p&gt;That's all we need to do. Now we have customized tab items with fully working tab control. And as you can see this is relatively easy to implement so nothing prevents adding more buttons or other elements on the tabs. For example in the TSRI project we have additional button that opens the tab contents as floating window.  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=111119"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=111119" 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/kobush/aggbug/111119.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2007/04/08/closeabletabitem.aspx</guid>
            <pubDate>Sun, 08 Apr 2007 14:48:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/111119.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2007/04/08/closeabletabitem.aspx#feedback</comments>
            <slash:comments>27</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/111119.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/111119.aspx</trackback:ping>
        </item>
        <item>
            <title>Overriding default SystemColors in WPF</title>
            <link>http://geekswithblogs.net/kobush/archive/2007/03/25/109753.aspx</link>
            <description>&lt;p&gt;After working with WPF for a while I must say that it is wonderful platform for building complex user interfaces but sometimes it falls short in very simple scenarios.&amp;nbsp;Or in other words, it's easy to do complex things with it's powerful tools but often it lacks simple tools to do simple things.&amp;nbsp;At least from a perspective of Windows Forms developer who expects some familiar tools and quickly finds out that they are gone. &lt;/p&gt; &lt;p&gt;There are several examples of this, but one that I run across recently and find it very often in other forums is how to change default colors in more complex controls like &lt;strong&gt;ListBox&lt;/strong&gt; or &lt;strong&gt;ComboBox&lt;/strong&gt;. For example yesterday there was a question on the MSDN forum on&amp;nbsp;&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1388254&amp;amp;SiteID=1"&gt;how to change the highlight color in a popup of combobox&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;All controls in WPF have only three properties to adjust their colors: &lt;strong&gt;Foreground&lt;/strong&gt;, &lt;strong&gt;Background&lt;/strong&gt; and &lt;strong&gt;BorderBrush&lt;/strong&gt; (keep in mind that all of these properties accept brushes instead of solid colors). But you won't find such properties as HighlightedItemBrush on ComboBox or SelectedItemBrush on ListBox. &lt;/p&gt; &lt;p&gt;I read somewhere, that primary reason for this is that Controls encapsulate logical elements and shouldn't have properties that depend on their visual representation. Instead the appearance of each control is defined through it's &lt;strong&gt;ControlTemplate&lt;/strong&gt; and with some alternative template these properties might make no sense at all. &lt;/p&gt; &lt;p&gt;So it might seem that the only option&amp;nbsp;to override these colors would be to recreate the &lt;strong&gt;ControlTemplate&lt;/strong&gt; for particular control and adjust the colors. Thankfully you don't have to do it manually. With Microsoft Expression Blend you can very easily create copy of the default ControlTemplate by selecting the control and then from menu invoking &lt;strong&gt;Object&lt;/strong&gt; &amp;gt; &lt;strong&gt;Edit Control Parts (Template)&lt;/strong&gt; &amp;gt; &lt;strong&gt;Edit a Copy...&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;But this will only recreate the template for your current Windows Theme so if you have to preserve all other visual aspects of the control you need to put even more work to subclass your control and recreate all themes for the new control. This is quite a big effort to do such a small thing. &lt;/p&gt; &lt;p&gt;There is however much simpler solution if overriding the default colors is the only thing you want to change.&amp;nbsp;Because these colors are defined as resources you can try to override these resource for your control. &lt;/p&gt; &lt;p&gt;For example, to change the color of selected item in a ListBox (or highlighted item in ComboBox )&amp;nbsp;override following resource:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SolidColorBrush&lt;/span&gt; &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;="{x:Static SystemColors.HighlightBrushKey}"&lt;/span&gt; &lt;span class="attr"&gt;Color&lt;/span&gt;&lt;span class="kwrd"&gt;="Orange"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;And because I also wanted to have the same color when ListBox doesn't have focus I needed to override this resource as well:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SolidColorBrush&lt;/span&gt; &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;="{x:Static SystemColors.ControlBrushKey}"&lt;/span&gt; &lt;span class="attr"&gt;Color&lt;/span&gt;&lt;span class="kwrd"&gt;="Orange"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;As with all resources you can do it either only for this particular control (using Style.Resources), whole window or even for the whole application depending on which ResourceDictionary you would use. And because these resources are referenced as DynamicResource you can even adjust them at runtime.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So now the only problem is to find out what resources you need to override to get the desired control. Once again the Microsoft Expression Designer comes in handy and you can find this out by recreating the default templates but this time only to read what colors it uses and what what purpose. &lt;/p&gt;
&lt;p&gt;I've started putting together a reference of which system colors are used in default templates for simple controls and will publish it shortly. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=109753"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=109753" 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/kobush/aggbug/109753.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2007/03/25/109753.aspx</guid>
            <pubDate>Sun, 25 Mar 2007 11:46:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/109753.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2007/03/25/109753.aspx#feedback</comments>
            <slash:comments>19</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/109753.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/109753.aspx</trackback:ping>
        </item>
    </channel>
</rss>