<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Summergoat's Weblog</title>
	<atom:link href="http://summergoat.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://summergoat.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Sat, 09 May 2009 07:19:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='summergoat.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Summergoat's Weblog</title>
		<link>http://summergoat.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://summergoat.wordpress.com/osd.xml" title="Summergoat&#039;s Weblog" />
	<atom:link rel='hub' href='http://summergoat.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Unhandled MissingMethodException</title>
		<link>http://summergoat.wordpress.com/2009/05/09/unhandled-missingmethodexception/</link>
		<comments>http://summergoat.wordpress.com/2009/05/09/unhandled-missingmethodexception/#comments</comments>
		<pubDate>Sat, 09 May 2009 07:19:41 +0000</pubDate>
		<dc:creator>summergoat</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://summergoat.wordpress.com/2009/05/09/unhandled-missingmethodexception/</guid>
		<description><![CDATA[I came across an interesting product bug while analyzing Watson crash dumps today. Our application was crashing due to an unhandled MissingMethodException on a background thread. Looking at the managed stack trace revealed the exception was coming from a method which uses the Dispatcher.Invoke(Delegate, params object[]) overload, added in the .NET Framework 3.5 SP1. This [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=49&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I came across an interesting product bug while analyzing Watson crash dumps today. Our application was crashing due to an unhandled MissingMethodException on a background thread. Looking at the managed stack trace revealed the exception was coming from a method which uses the Dispatcher.Invoke(Delegate, params object[]) overload, added in the .NET Framework 3.5 SP1. This is an unsupported configuration; nonetheless we don’t want to be crashing hard.</p>
<p>When I investigated the offending method I was perplexed to find a top level exception handler wrapping all calls to Dispatcher.Invoke. This method is invoked on a background thread so we are careful not to allow an unhandled exception which would result in a crash. Needless to say I wasted a bit of time pouring over the version history, assembly versions, etc. Finally I took a look at the native callstack </p>
<p><font size="1">0:004&gt; kb      <br />RetAddr&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : Args to Child&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : Call Site       <br />00000000`74e196d0 : 00000000`1c25d650 00000000`1c25c8e8 00000000`00000100 00000000`00000000 : KERNEL32!RaiseException+0&#215;39       <br />00000000`771f54a1 : 00000000`00000000 00000000`1c25db20 00000000`00000000 00000000`00000000 : MSVCR80!_CxxCallCatchBlock+0&#215;180       <br />000007fe`f33ef38a : 00000000`1b18d6f0 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RcConsolidateFrames+0&#215;3       <br />000007fe`f33b5eaf : 00000000`00000000 00000002`00000000 00000000`00000000 00000000`1b190980 : <font color="#ff0000">mscorwks!MethodDesc::MakeJitWorker+0x1ea        <br /></font>000007fe`f33a560b : 00000000`00000000 00000000`00295200 00000000`00000000 00000000`02a21758 : mscorwks!MethodDesc::DoPrestub+0x116f       <br />000007fe`f34e2207 : 00000000`02a22028 00000000`00000000 00000000`02a21fe8 00000000`1b185110 : mscorwks!PreStubWorker+0x1eb       <br />000007ff`001903ce : 00000000`02a216b8 00000000`00000000 00000000`1c25f5c0 00000000`00000000 : mscorwks!ThePreStubAMD64+0&#215;87       <br />000007fe`f174174b : 00000000`02a216b8 00000000`00000000 00000000`1c25f5c0 00000000`00000000 : 0x7ff`001903ce       <br />000007fe`f179d786 : 00000000`00000018 00000000`00000000 00000000`00250288 00000000`771f7b1a : mscorlib_ni+0x2f174b       <br />000007fe`f34e2322 : 00000000`02a21758 000007fe`f3976ea0 ffffffff`fffffffe 00000000`00002400 : mscorlib_ni+0x34d786       <br />000007fe`f33e3bb3 : 00000000`0000017e 000007fe`f18b8aa8 00000000`002a0588 00000000`00000000 : mscorwks!CallDescrWorker+0&#215;82       <br />000007fe`f33ebc46 : 00000000`1c25f9e8 000007fe`f33d353d ffffffff`fffffffe 00000000`00000000 : mscorwks!CallDescrWorkerWithHandler+0xd3       <br />000007fe`f343bd7f : 000007fe`f14d5730 000007fe`f1451000 000007fe`f3af7c78 000007fe`f336c1d8 : mscorwks!DispatchCallDebuggerWrapper+0x3e       <br />000007fe`f32f6a5e : 00000000`1c25fb78 00000000`1b185101 00000000`00000001 00000000`1b185110 : mscorwks!DispatchCallNoEH+0x5f       <br />000007fe`f3327598 : 00000000`02a21758 00000000`02a21758 00000000`00000001 000007fe`f33e0f6a : mscorwks!AddTimerCallback_Worker+0&#215;92       <br />000007fe`f342eb85 : 00000000`00000001 00000000`00000000 ffffffff`fffffffe 00000000`1c25fb98 : mscorwks!Thread::DoADCallBack+0&#215;488       <br />000007fe`f331a515 : 00000000`002a0230 00000000`1b185110 00000000`1c25faa0 00000000`1b1822f0 : mscorwks!SVR::gc_heap::make_heap_segment+0&#215;155       <br />000007fe`f331487e : 00000000`1c25fb98 ffffffff`ffffffff 00000000`1b185110 00000000`1c25a8f0 : mscorwks!AssemblySecurityDescriptor::GetZone+0&#215;169       <br />000007fe`f32f5a7b : ffffffff`fffffffe 00000000`00000001 ffffffff`fffffffe 00000000`002c9920 : mscorwks!AddTimerCallbackEx+0xba       <br />000007fe`f336dc77 : 00000000`00000000 00000000`00000001 00000000`00000000 00000000`00000001 : mscorwks!ThreadpoolMgr::AsyncTimerCallbackCompletion+0&#215;53</font></p>
<p>It looks like the exception is actually being thrown from native code during the JIT. Here is a simple repro</p>
<pre class="code"><span style="color:blue;">public class </span><span style="color:#2b91af;">BackgroundWorker
</span>{
    <span style="color:blue;">private </span><span style="color:#2b91af;">Timer </span>_timer;

    <span style="color:blue;">public </span>BackgroundWorker()
    {
        _timer = <span style="color:blue;">new </span><span style="color:#2b91af;">Timer</span>((state) =&gt; DoWork(), <span style="color:blue;">null</span>, 0, 1000);
    }

    <span style="color:blue;">public void </span>DoWork()
    {
        <span style="color:green;">// top level handler
        </span><span style="color:blue;">try
        </span>{
            <span style="color:green;">// ...
            // call missing method here
            // ...
        </span>}
        <span style="color:blue;">catch </span>(<span style="color:#2b91af;">Exception </span>e)
        {
            <span style="color:green;">// some logging
        </span>}
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Before the thread pool thread executes the anonymous method it must be JITed.</p>
<p><table cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td valign="top">
<p>[<a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Runtime.CompilerServices.CompilerGeneratedAttribute/.ctor()">CompilerGenerated</a>]</p>
<p>private <a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Void">void</a> <a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://ConsoleApplication15:1.0.0.0/ConsoleApplication15.BackgroundWorker/%3c.ctor%3eb__0(Object)"><b>&lt;.ctor&gt;b__0</b></a>(<a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Object">object</a> state)</p>
<p>{</p>
<p>this.<a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://ConsoleApplication15:1.0.0.0/ConsoleApplication15.BackgroundWorker/DoWork()">DoWork</a>();</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p>When the JITer encounters missing method inside of DoWork it throws a MissingMethodException. Since this takes place outside the try/catch block the process crashes.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/summergoat.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/summergoat.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/summergoat.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/summergoat.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/summergoat.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/summergoat.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/summergoat.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/summergoat.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/summergoat.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/summergoat.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/summergoat.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/summergoat.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/summergoat.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/summergoat.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=49&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://summergoat.wordpress.com/2009/05/09/unhandled-missingmethodexception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5083ca25c8781f6d2570518991cec9d2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">summergoat</media:title>
		</media:content>
	</item>
		<item>
		<title>Regedit Favorites</title>
		<link>http://summergoat.wordpress.com/2009/05/06/regedit-favorites/</link>
		<comments>http://summergoat.wordpress.com/2009/05/06/regedit-favorites/#comments</comments>
		<pubDate>Wed, 06 May 2009 16:47:03 +0000</pubDate>
		<dc:creator>summergoat</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://summergoat.wordpress.com/2009/05/06/regedit-favorites/</guid>
		<description><![CDATA[Embarrassingly, I just now realized Regedit supports favorites! I’ve spent far too many seconds navigating b/w Visual Studio’s experimental and non-experimental HKCU registry settings when validating functionality. Not to mention having to remember to look in HKLM’s wow6432 node on my 64 bit machine. What a revolutionary feature<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=47&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Embarrassingly, I just now realized Regedit supports favorites!</p>
<p>I’ve spent far too many seconds navigating b/w Visual Studio’s experimental and non-experimental HKCU registry settings when validating functionality. Not to mention having to remember to look in HKLM’s wow6432 node on my 64 bit machine. What a revolutionary feature <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/summergoat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/summergoat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/summergoat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/summergoat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/summergoat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/summergoat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/summergoat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/summergoat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/summergoat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/summergoat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/summergoat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/summergoat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/summergoat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/summergoat.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=47&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://summergoat.wordpress.com/2009/05/06/regedit-favorites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5083ca25c8781f6d2570518991cec9d2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">summergoat</media:title>
		</media:content>
	</item>
		<item>
		<title>Dynamically load assembly with strong name verification</title>
		<link>http://summergoat.wordpress.com/2009/05/03/dynamically-load-assembly-with-strong-name-verification/</link>
		<comments>http://summergoat.wordpress.com/2009/05/03/dynamically-load-assembly-with-strong-name-verification/#comments</comments>
		<pubDate>Sun, 03 May 2009 21:08:50 +0000</pubDate>
		<dc:creator>summergoat</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://summergoat.wordpress.com/2009/05/03/dynamically-load-assembly-with-strong-name-verification/</guid>
		<description><![CDATA[I recently needed to load an assembly into a temporary AppDomain. This assembly was being loaded from a random location in the current user’s temp directory. Since the temp directory is less secure than say Program Files, I wanted to ensure it was indeed my strongly named assembly being loaded. After wasting a bit too [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=46&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently needed to load an assembly into a temporary AppDomain. This assembly was being loaded from a random location in the current user’s temp directory. Since the temp directory is less secure than say Program Files, I wanted to ensure it was indeed my strongly named assembly being loaded.</p>
<p>After wasting a bit too much time trying to (unsuccessfully) decipher how to use to get the Assembly.LoadFrom overload with the Evidence parameter I landed on the much simpler solution using the AssemblyName type.</p>
<p>&#160;</p>
<pre class="code"><span style="color:blue;">var </span>fqn = <span style="color:#a31515;">&quot;ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1452a42f10e38892&quot;</span>;
<span style="color:blue;">var </span>assemblyName = <span style="color:blue;">new </span><span style="color:#2b91af;">AssemblyName</span>(fqn);
assemblyName.CodeBase = <span style="color:#a31515;">&quot;&quot;</span>; <span style="color:green;">// path to assembly to load

</span><span style="color:blue;">var </span>assembly = <span style="color:#2b91af;">Assembly</span>.Load(assemblyName);</pre>
<p>&#160;</p>
<p>This approach allows you to specify the fully qualified assembly name and the location from which to load the assembly.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/summergoat.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/summergoat.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/summergoat.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/summergoat.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/summergoat.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/summergoat.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/summergoat.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/summergoat.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/summergoat.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/summergoat.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/summergoat.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/summergoat.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/summergoat.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/summergoat.wordpress.com/46/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=46&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://summergoat.wordpress.com/2009/05/03/dynamically-load-assembly-with-strong-name-verification/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5083ca25c8781f6d2570518991cec9d2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">summergoat</media:title>
		</media:content>
	</item>
		<item>
		<title>Dialog UI</title>
		<link>http://summergoat.wordpress.com/2009/02/03/dialog-ui/</link>
		<comments>http://summergoat.wordpress.com/2009/02/03/dialog-ui/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 15:09:16 +0000</pubDate>
		<dc:creator>summergoat</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://summergoat.wordpress.com/?p=40</guid>
		<description><![CDATA[  Graphics card drivers have notoriously bad dialogs, but this one takes the cake. What’s with the red exclamation mark!?  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=40&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p> </p>
<p class="MsoNormal">Graphics card drivers have notoriously bad dialogs, but this one takes the cake. What’s with the red exclamation mark!?
<a href='http://summergoat.wordpress.com/2009/02/03/dialog-ui/installed/' title='installed'><img width="148" height="150" src="http://summergoat.files.wordpress.com/2009/02/installed.png?w=148&#038;h=150" class="attachment-thumbnail" alt="installed" title="installed" /></a>
<a href='http://summergoat.wordpress.com/2009/02/03/dialog-ui/installing/' title='installing'><img width="148" height="150" src="http://summergoat.files.wordpress.com/2009/02/installing.png?w=148&#038;h=150" class="attachment-thumbnail" alt="installing" title="installing" /></a>
</p>
<p class="MsoNormal"> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/summergoat.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/summergoat.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/summergoat.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/summergoat.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/summergoat.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/summergoat.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/summergoat.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/summergoat.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/summergoat.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/summergoat.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/summergoat.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/summergoat.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/summergoat.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/summergoat.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=40&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://summergoat.wordpress.com/2009/02/03/dialog-ui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5083ca25c8781f6d2570518991cec9d2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">summergoat</media:title>
		</media:content>
	</item>
		<item>
		<title>Oil Change</title>
		<link>http://summergoat.wordpress.com/2008/09/07/oil-change/</link>
		<comments>http://summergoat.wordpress.com/2008/09/07/oil-change/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 22:10:37 +0000</pubDate>
		<dc:creator>summergoat</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://summergoat.wordpress.com/2008/09/07/oil-change/</guid>
		<description><![CDATA[Finally a use for those old programming books.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=39&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Finally a use for those old programming books.</p>
<p><a href="http://summergoat.files.wordpress.com/2008/09/img-0237.jpg"><img title="IMG_0237" style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="403" alt="IMG_0237" src="http://summergoat.files.wordpress.com/2008/09/img-0237-thumb.jpg?w=527&#038;h=403" width="527" border="0" /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/summergoat.wordpress.com/39/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/summergoat.wordpress.com/39/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/summergoat.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/summergoat.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/summergoat.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/summergoat.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/summergoat.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/summergoat.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/summergoat.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/summergoat.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/summergoat.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/summergoat.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/summergoat.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/summergoat.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/summergoat.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/summergoat.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=39&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://summergoat.wordpress.com/2008/09/07/oil-change/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5083ca25c8781f6d2570518991cec9d2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">summergoat</media:title>
		</media:content>

		<media:content url="http://summergoat.files.wordpress.com/2008/09/img-0237-thumb.jpg" medium="image">
			<media:title type="html">IMG_0237</media:title>
		</media:content>
	</item>
		<item>
		<title>New Bike!</title>
		<link>http://summergoat.wordpress.com/2008/07/19/new-bike/</link>
		<comments>http://summergoat.wordpress.com/2008/07/19/new-bike/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 21:04:08 +0000</pubDate>
		<dc:creator>summergoat</dc:creator>
				<category><![CDATA[Fun]]></category>

		<guid isPermaLink="false">http://summergoat.wordpress.com/2008/07/19/new-bike/</guid>
		<description><![CDATA[Finally got my new bike this Thursday. Ridley Excalibur Team Unibet frameset, mostly Shimano Dura-Ace 10 speed components, DT Swiss wheelset. Just finished building it, now it’s time to hang it on the wall… I mean ride it.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=36&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Finally got my new bike this Thursday. <a href="http://www.ridley-bikes.com/">Ridley Excalibur</a> Team Unibet frameset, mostly Shimano Dura-Ace 10 speed components, DT Swiss wheelset.</p>
<p>Just finished building it, now it’s time to hang it on the wall… I mean ride it.</p>
</p>
<p><a href="http://summergoat.files.wordpress.com/2008/07/img-0094.jpg"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="376" alt="IMG_0094" src="http://summergoat.files.wordpress.com/2008/07/img-0094-thumb.jpg?w=491&#038;h=376" width="491" border="0" /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/summergoat.wordpress.com/36/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/summergoat.wordpress.com/36/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/summergoat.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/summergoat.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/summergoat.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/summergoat.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/summergoat.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/summergoat.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/summergoat.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/summergoat.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/summergoat.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/summergoat.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/summergoat.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/summergoat.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/summergoat.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/summergoat.wordpress.com/36/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=36&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://summergoat.wordpress.com/2008/07/19/new-bike/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5083ca25c8781f6d2570518991cec9d2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">summergoat</media:title>
		</media:content>

		<media:content url="http://summergoat.files.wordpress.com/2008/07/img-0094-thumb.jpg" medium="image">
			<media:title type="html">IMG_0094</media:title>
		</media:content>
	</item>
		<item>
		<title>Localize Enum Values</title>
		<link>http://summergoat.wordpress.com/2008/07/16/localize-enum-values/</link>
		<comments>http://summergoat.wordpress.com/2008/07/16/localize-enum-values/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 23:23:56 +0000</pubDate>
		<dc:creator>summergoat</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://summergoat.wordpress.com/2008/07/16/localize-enum-values/</guid>
		<description><![CDATA[In a previous post I created a markup extension which could be used to bind an Enum’s values to an ItemsControl. Now what if we want those values to be localized? The following is a little trick I use to solve this problem. My translations are stored in .NET resources. When I add a resource [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=33&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In a <a href="http://summergoat.wordpress.com/2008/07/08/enum-getvalues-markup-extension/">previous post</a> I created a markup extension which could be used to bind an Enum’s values to an ItemsControl. Now what if we want those values to be localized? The following is a little trick I use to solve this problem. </p>
<p>My translations are stored in .NET resources. When I add a resource representing an Enum value I use the naming convention &lt;EnumName&gt;_&lt;EnumValueName&gt; for the key.</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<pre style="margin:0;"><span style="color:blue;"></span></pre>
<pre style="margin:0;"><span style="color:blue;">public</span> <span style="color:blue;">enum</span> <span style="color:#2b91af;">DevicePointFormat</span></pre>
<pre style="margin:0;">{</pre>
<pre style="margin:0;">&#160;&#160;&#160; Binary,</pre>
<pre style="margin:0;">&#160;&#160;&#160; Decimal,</pre>
<pre style="margin:0;">&#160;&#160;&#160; Hex</pre>
<pre style="margin:0;">}</pre>
</div>
<p><a href="http://summergoat.files.wordpress.com/2008/07/image1.png"><img style="border-width:0;" height="142" alt="image" src="http://summergoat.files.wordpress.com/2008/07/image-thumb1.png?w=244&#038;h=142" width="244" border="0" /></a></p>
<p>&#160;</p>
<p>I have a Value Converter that converts an Enum value to a resource string.</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<pre style="margin:0;"><span style="color:blue;">public</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">LocalizeEnumValue</span> : <span style="color:#2b91af;">IValueConverter</span></pre>
<pre style="margin:0;">{</pre>
<pre style="margin:0;">&#160;&#160;&#160; <span style="color:blue;">public</span> <span style="color:blue;">object</span> Convert(<span style="color:blue;">object</span> value, <span style="color:#2b91af;">Type</span> targetType,</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)</pre>
<pre style="margin:0;">&#160;&#160;&#160; {</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">var</span> enumType = value.GetType();</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">var</span> key = <span style="color:#2b91af;">String</span>.Format(<span style="color:#2b91af;">CultureInfo</span>.InvariantCulture, <span style="color:#a31515;">&quot;{0}_{1}&quot;</span>,</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; enumType.Name, <span style="color:#2b91af;">Enum</span>.GetName(enumType, value));</pre>
<pre style="margin:0;">&#160;</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">return</span> <span style="color:#2b91af;">MyResources</span>.ResourceManager.GetString(key);</pre>
<pre style="margin:0;">&#160;&#160;&#160; }</pre>
<pre style="margin:0;">&#160;</pre>
<pre style="margin:0;">&#160;&#160;&#160; <span style="color:blue;">public</span> <span style="color:blue;">object</span> ConvertBack(<span style="color:blue;">object</span> value, <span style="color:#2b91af;">Type</span> targetType,</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">object</span> parameter, <span style="color:#2b91af;">CultureInfo</span> culture)</pre>
<pre style="margin:0;">&#160;&#160;&#160; {</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">throw</span> <span style="color:blue;">new</span> <span style="color:#2b91af;">NotSupportedException</span>();</pre>
<pre style="margin:0;">&#160;&#160;&#160; }</pre>
<pre style="margin:0;">}</pre>
</div>
<p>Now imagine we have a ComboBox bound to the values of the DevicePointFormat Enum. We can set the ItemTemplate attribute to a custom DataTemplate which invokes the LocalizeEnumValue converter on the EnumValue and displays the string in a TextBlock.</p>
<p>&#160;</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<pre style="margin:0;"><span style="color:blue;">&lt;</span><span style="color:#a31515;">Window.Resources</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0;"><span style="color:#a31515;">&#160;&#160;&#160; </span><span style="color:blue;">&lt;</span><span style="color:#a31515;">src</span><span style="color:blue;">:</span><span style="color:#a31515;">LocalizeEnumValue</span><span style="color:red;"> x</span><span style="color:blue;">:</span><span style="color:red;">Key</span><span style="color:blue;">=&quot;LocalizeEnumValueConverter&quot; /&gt;</span></pre>
<pre style="margin:0;"><span style="color:#a31515;">&#160;&#160;&#160; </span><span style="color:blue;">&lt;</span><span style="color:#a31515;">DataTemplate</span><span style="color:red;"> x</span><span style="color:blue;">:</span><span style="color:red;">Key</span><span style="color:blue;">=&quot;LocalizedEnumDataTemplate&quot;</span><span style="color:red;"> DataType</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Type</span><span style="color:red;"> s</span><span style="color:blue;">:</span><span style="color:red;">Enum</span><span style="color:blue;">}&quot;&gt;</span></pre>
<pre style="margin:0;"><span style="color:#a31515;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span style="color:blue;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:red;"> Text</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:red;"> Converter</span><span style="color:blue;">={</span><span style="color:#a31515;">StaticResource</span><span style="color:red;"> LocalizeEnumValueConverter</span><span style="color:blue;">}}&quot; /&gt;</span></pre>
<pre style="margin:0;"><span style="color:#a31515;">&#160;&#160;&#160; </span><span style="color:blue;">&lt;/</span><span style="color:#a31515;">DataTemplate</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0;"><span style="color:blue;">&lt;/</span><span style="color:#a31515;">Window.Resources</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0;">&#160;</pre>
<pre style="margin:0;"><span style="color:blue;">&lt;</span><span style="color:#a31515;">StackPanel</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0;"><span style="color:#a31515;">&#160;&#160;&#160; </span><span style="color:blue;">&lt;</span><span style="color:#a31515;">ComboBox</span><span style="color:red;"> ItemsSource</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:red;"> Source</span><span style="color:blue;">={</span><span style="color:#a31515;">src</span><span style="color:blue;">:</span><span style="color:#a31515;">EnumValues</span><span style="color:blue;"> {</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Type</span><span style="color:red;"> src</span><span style="color:blue;">:</span><span style="color:red;">DevicePointFormat</span><span style="color:blue;">}}}&quot;</span>&#160; </pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:red;"> ItemTemplate</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">StaticResource</span><span style="color:red;"> LocalizedEnumDataTemplate</span><span style="color:blue;">}&quot; /&gt;</span></pre>
<pre style="margin:0;"><span style="color:blue;">&lt;/</span><span style="color:#a31515;">StackPanel</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0;"><span style="color:blue;"></span></pre>
<pre style="margin:0;"><span style="color:blue;"></span></pre>
<pre style="margin:0;"><a href="http://summergoat.files.wordpress.com/2008/07/image2.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="154" alt="image" src="http://summergoat.files.wordpress.com/2008/07/image-thumb2.png?w=128&#038;h=154" width="128" border="0" /></a>  <a href="http://summergoat.files.wordpress.com/2008/07/image3.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="154" alt="image" src="http://summergoat.files.wordpress.com/2008/07/image-thumb3.png?w=128&#038;h=154" width="128" border="0" /></a> </pre>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/summergoat.wordpress.com/33/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/summergoat.wordpress.com/33/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/summergoat.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/summergoat.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/summergoat.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/summergoat.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/summergoat.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/summergoat.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/summergoat.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/summergoat.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/summergoat.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/summergoat.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/summergoat.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/summergoat.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/summergoat.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/summergoat.wordpress.com/33/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=33&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://summergoat.wordpress.com/2008/07/16/localize-enum-values/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5083ca25c8781f6d2570518991cec9d2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">summergoat</media:title>
		</media:content>

		<media:content url="http://summergoat.files.wordpress.com/2008/07/image-thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://summergoat.files.wordpress.com/2008/07/image-thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://summergoat.files.wordpress.com/2008/07/image-thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Resource Markup Extension</title>
		<link>http://summergoat.wordpress.com/2008/07/16/resource-markup-extension/</link>
		<comments>http://summergoat.wordpress.com/2008/07/16/resource-markup-extension/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 21:38:18 +0000</pubDate>
		<dc:creator>summergoat</dc:creator>
				<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://summergoat.wordpress.com/2008/07/16/resource-markup-extension/</guid>
		<description><![CDATA[In my spare time I’m working on a smallish WPF application which will need to be localized. Looking at WPF’s current localization story left me wanting. What I really wanted was good old fashioned .NET resources accessible in xaml. One option is to generate public resource files using the PublicResXFileCodeGenerator custom tool new to VS [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=25&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[</p>
<p>In my spare time I’m working on a smallish WPF application which will need to be localized. Looking at WPF’s current localization story left me wanting. What I really wanted was good old fashioned .NET resources accessible in xaml. </p>
<p>One option is to generate public resource files using the <a href="http://www.guysmithferrier.com/post/2008/06/Public-Strongly-Typed-Resources-With-PublicResXFileCodeGenerator.aspx">PublicResXFileCodeGenerator</a> custom tool new to VS 2008. This provides access to the System.Windows.Markup.StaticExtension allowing us to reference a resource in xaml like so</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<pre style="margin:0;"><span style="color:blue;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:red;"> Text</span><span style="color:blue;">="{</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Static</span><span style="color:red;"> src</span><span style="color:blue;">:</span><span style="color:red;">MyResources</span><span style="color:blue;">.HelloWorld}" /&gt;</span></pre>
</div>
</p>
<p>This is ok but it feels a bit verbose and we may not want to make our resources public. In that case we can create our own ResourceExtension markup extension which will have access to internals (provided it is defined in the same assembly).</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<pre style="margin:0;"><span style="color:blue;">internal </span><span style="color:blue;">class</span> <span style="color:#2b91af;">ResourceExtension</span> : <span style="color:#2b91af;">MarkupExtension</span></pre>
<pre style="margin:0;">{</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; <span style="color:blue;">private</span> <span style="color:blue;">readonly</span> <span style="color:blue;">string</span> _key;</pre>
<pre style="margin:0;">&nbsp;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; <span style="color:blue;">public</span> ResourceExtension(<span style="color:blue;">string</span> key)</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; {</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">if</span> (key == <span style="color:blue;">null</span>)</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">throw</span> <span style="color:blue;">new</span> <span style="color:#2b91af;">ArgumentNullException</span>(<span style="color:#a31515;">"key"</span>);</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">if</span> (key == <span style="color:#2b91af;">String</span>.Empty)</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">throw</span> <span style="color:blue;">new</span> <span style="color:#2b91af;">ArgumentException</span>(<span style="color:#a31515;">"Argument key cannot be empty."</span>);</pre>
<pre style="margin:0;">&nbsp;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _key = key;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; }</pre>
<pre style="margin:0;">&nbsp;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; <span style="color:blue;">public</span> <span style="color:blue;">override</span> <span style="color:blue;">object</span> ProvideValue(<span style="color:#2b91af;">IServiceProvider</span> serviceProvider)</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; {</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">var</span> propertyInfo = <span style="color:blue;">typeof</span>(<span style="color:#2b91af;">MyResources</span>).GetProperty(_key,</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#2b91af;">BindingFlags</span>.Static | <span style="color:#2b91af;">BindingFlags</span>.NonPublic);</pre>
<pre style="margin:0;">&nbsp;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#2b91af;">Debug</span>.Assert(propertyInfo != <span style="color:blue;">null</span>, <span style="color:#2b91af;">String</span>.Format(<span style="color:#2b91af;">CultureInfo</span>.InvariantCulture,</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#a31515;">"Unable to find specified key '{0}' in resource file."</span>, _key));</pre>
<pre style="margin:0;">&nbsp;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:green;">// return null if the key does not exist</span></pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">return</span> propertyInfo != <span style="color:blue;">null</span> ? propertyInfo.GetValue(<span style="color:blue;">null</span>, <span style="color:blue;">null</span>) : <span style="color:blue;">null</span>;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; }</pre>
<pre style="margin:0;">}</pre>
</div>
<p>Then we can use the following xaml</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<pre style="margin:0;"><span style="color:blue;">&lt;</span><span style="color:#a31515;">TextBlock</span><span style="color:red;"> Text</span><span style="color:blue;">="{</span><span style="color:#a31515;">src</span><span style="color:blue;">:</span><span style="color:#a31515;">Resource</span><span style="color:red;"> HelloWorld</span><span style="color:blue;">}" /&gt;</span></pre>
</div>
</p>
<p>Now we have fewer characters to type in our markup, our resources are internal, but we can’t reuse this class with the resource type hard coded into the ProvideValue method. </p>
<p>&nbsp;</p>
<p>We can refactor the common code to a generic base class like so.</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<pre style="margin:0;"><span style="color:blue;">internal</span> <span style="color:blue;">abstract</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">ResourceExtensionBase</span>&lt;T&gt; : </pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; <span style="color:#2b91af;">MarkupExtension</span> <span style="color:blue;">where</span> T : <span style="color:blue;">class</span></pre>
<pre style="margin:0;">{</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; <span style="color:blue;">protected</span> <span style="color:blue;">string</span> Key { <span style="color:blue;">get</span>; <span style="color:blue;">set</span>; }</pre>
<pre style="margin:0;">&nbsp;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; <span style="color:blue;">public</span> <span style="color:blue;">override</span> <span style="color:blue;">object</span> ProvideValue(<span style="color:#2b91af;">IServiceProvider</span> serviceProvider)</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; {</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">var</span> propertyInfo = <span style="color:blue;">typeof</span>(T).GetProperty(Key,</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#2b91af;">BindingFlags</span>.Static | <span style="color:#2b91af;">BindingFlags</span>.NonPublic);</pre>
<pre style="margin:0;">&nbsp;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#2b91af;">Debug</span>.Assert(propertyInfo != <span style="color:blue;">null</span>, <span style="color:#2b91af;">String</span>.Format(<span style="color:#2b91af;">CultureInfo</span>.InvariantCulture,</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#a31515;">"Unable to find specified key '{0}' in resource file."</span>, Key));</pre>
<pre style="margin:0;">&nbsp;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:green;">// return null if the key does not exist</span></pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">return</span> propertyInfo != <span style="color:blue;">null</span> ? propertyInfo.GetValue(<span style="color:blue;">null</span>, <span style="color:blue;">null</span>) : <span style="color:blue;">null</span>;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; }</pre>
<pre style="margin:0;">&nbsp;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; <span style="color:blue;">protected</span> <span style="color:blue;">static</span> <span style="color:blue;">void</span> ValidateArguments(<span style="color:blue;">string</span> key)</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; {</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">if</span> (key == <span style="color:blue;">null</span>)</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">throw</span> <span style="color:blue;">new</span> <span style="color:#2b91af;">ArgumentNullException</span>(<span style="color:#a31515;">"key"</span>);</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">if</span> (key == <span style="color:#2b91af;">String</span>.Empty)</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue;">throw</span> <span style="color:blue;">new</span> <span style="color:#2b91af;">ArgumentException</span>(<span style="color:#a31515;">"Argument key cannot be empty."</span>);</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; }</pre>
<pre style="margin:0;">}</pre>
</div>
<p>Then we need to declare the following markup extension for each resource file we need access to</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<pre style="margin:0;"><span style="color:blue;">internal</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">ResourceExtension</span> : </pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; <span style="color:#2b91af;">ResourceExtensionBase</span>&lt;<span style="color:#2b91af;">MyResources</span>&gt;</pre>
<pre style="margin:0;">{</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; <span style="color:blue;">public</span> ResourceExtension(<span style="color:blue;">string</span> key)</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; {</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ValidateArguments(key);</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Key = key;</pre>
<pre style="margin:0;">&nbsp;&nbsp;&nbsp; }</pre>
<pre style="margin:0;">}</pre>
<pre style="margin:0;">&nbsp;</pre>
</div>
</div>
<p>I wouldn’t say I love this approach. Creating a custom type for each resource file won’t scale well for large projects but it is working well for my small project.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/summergoat.wordpress.com/25/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/summergoat.wordpress.com/25/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/summergoat.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/summergoat.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/summergoat.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/summergoat.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/summergoat.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/summergoat.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/summergoat.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/summergoat.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/summergoat.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/summergoat.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/summergoat.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/summergoat.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/summergoat.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/summergoat.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=25&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://summergoat.wordpress.com/2008/07/16/resource-markup-extension/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5083ca25c8781f6d2570518991cec9d2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">summergoat</media:title>
		</media:content>
	</item>
		<item>
		<title>Veggie Box</title>
		<link>http://summergoat.wordpress.com/2008/07/10/veggie-box/</link>
		<comments>http://summergoat.wordpress.com/2008/07/10/veggie-box/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 03:30:08 +0000</pubDate>
		<dc:creator>summergoat</dc:creator>
				<category><![CDATA[Fun]]></category>

		<guid isPermaLink="false">http://summergoat.wordpress.com/2008/07/10/veggie-box/</guid>
		<description><![CDATA[Everybody’s doing it… A variety of delicious organic fruits and vegetables tailored by you to your unique preferences and delivered to your door! What could be wrong with that?<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=24&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Everybody’s doing it… A variety of delicious organic fruits and vegetables tailored by you to your unique preferences and delivered to your door! What could be wrong with that?</p>
</p>
</p>
<p><a href="http://summergoat.files.wordpress.com/2008/07/image.png"><img style="border-width:0;" height="320" alt="image" src="http://summergoat.files.wordpress.com/2008/07/image-thumb.png?w=450&#038;h=320" width="450" border="0" /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/summergoat.wordpress.com/24/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/summergoat.wordpress.com/24/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/summergoat.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/summergoat.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/summergoat.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/summergoat.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/summergoat.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/summergoat.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/summergoat.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/summergoat.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/summergoat.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/summergoat.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/summergoat.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/summergoat.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/summergoat.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/summergoat.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=24&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://summergoat.wordpress.com/2008/07/10/veggie-box/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5083ca25c8781f6d2570518991cec9d2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">summergoat</media:title>
		</media:content>

		<media:content url="http://summergoat.files.wordpress.com/2008/07/image-thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Enum GetValues markup extension</title>
		<link>http://summergoat.wordpress.com/2008/07/08/enum-getvalues-markup-extension/</link>
		<comments>http://summergoat.wordpress.com/2008/07/08/enum-getvalues-markup-extension/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 20:47:14 +0000</pubDate>
		<dc:creator>summergoat</dc:creator>
				<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://summergoat.wordpress.com/2008/07/08/enum-getvalues-markup-extension/</guid>
		<description><![CDATA[There are plenty of posts dealing with binding an ItemsControl to an Enum’s values. Beatriz Costa demonstrates how to accomplish this purely in xaml. We end up with something like the following. &#60;ObjectDataProvider MethodName=&#34;GetValues&#34; &#160;&#160; ObjectType=&#34;{x:Type s:Enum}&#34; x:Key=&#34;EnumValues&#34;&#62; &#160;&#160;&#160; &#60;ObjectDataProvider.MethodParameters&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;x:Type TypeName=&#34;src:DevicePointFormat&#34; /&#62; &#160;&#160;&#160; &#60;/ObjectDataProvider.MethodParameters&#62; &#60;/ObjectDataProvider&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160; This feels a little on the verbose [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=18&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There are plenty of posts dealing with binding an ItemsControl to an Enum’s values. <a href="http://www.beacosta.com/blog/?s=enum+getvalues&amp;submit=Search">Beatriz Costa demonstrates</a> how to accomplish this purely in xaml. We end up with something like the following.</p>
</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<pre style="margin:0;"><span style="color:blue;">&lt;</span><span style="color:#a31515;">ObjectDataProvider</span><span style="color:red;"> MethodName</span><span style="color:blue;">=&quot;GetValues&quot;</span> </pre>
<pre style="margin:0;">&#160;&#160; <span style="color:red;"> ObjectType</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Type</span><span style="color:red;"> s</span><span style="color:blue;">:</span><span style="color:red;">Enum</span><span style="color:blue;">}&quot;</span><span style="color:red;"> x</span><span style="color:blue;">:</span><span style="color:red;">Key</span><span style="color:blue;">=&quot;EnumValues&quot;&gt;</span></pre>
<pre style="margin:0;"><span style="color:#a31515;">&#160;&#160;&#160; </span><span style="color:blue;">&lt;</span><span style="color:#a31515;">ObjectDataProvider.MethodParameters</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0;"><span style="color:#a31515;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span style="color:blue;">&lt;</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Type</span><span style="color:red;"> TypeName</span><span style="color:blue;">=&quot;src:DevicePointFormat&quot; /&gt;</span></pre>
<pre style="margin:0;"><span style="color:#a31515;">&#160;&#160;&#160; </span><span style="color:blue;">&lt;/</span><span style="color:#a31515;">ObjectDataProvider.MethodParameters</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0;"><span style="color:blue;">&lt;/</span><span style="color:#a31515;">ObjectDataProvider</span><span style="color:blue;">&gt;</span><span style="color:#a31515;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></pre>
</p></div>
</p>
<pre style="margin:0;"><span style="color:#a31515;">&#160;&#160; </span></pre>
</div>
<p>This feels a little on the verbose side to me. The Enum type itself (DevicePointFormat) is in the xaml so each time we need another Enum type’s values we will need to essentially duplicate the xaml snippet. Sounds like we could use a <a href="http://msdn.microsoft.com/en-us/library/ms747254.aspx">markup extension</a>.</p>
<div style="font-size:10pt;background:white;color:black;font-family:courier new;">
<pre style="margin:0;"><span style="color:blue;">public</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">EnumValuesExtension</span> : <span style="color:#2b91af;">MarkupExtension</span></pre>
<pre style="margin:0;">{</pre>
<pre style="margin:0;">&#160;&#160;&#160; <span style="color:blue;">private</span> <span style="color:blue;">readonly</span> <span style="color:#2b91af;">Type</span> _enumType;</pre>
<pre style="margin:0;">&#160;</pre>
<pre style="margin:0;">&#160;&#160;&#160; <span style="color:blue;">public</span> EnumValuesExtension(<span style="color:#2b91af;">Type</span> enumType)</pre>
<pre style="margin:0;">&#160;&#160;&#160; {</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">if</span> (enumType == <span style="color:blue;">null</span>)</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">throw</span> <span style="color:blue;">new</span> <span style="color:#2b91af;">ArgumentNullException</span>(<span style="color:#a31515;">&quot;enumType&quot;</span>);</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">if</span> (!enumType.IsEnum)</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">throw</span> <span style="color:blue;">new</span> <span style="color:#2b91af;">ArgumentException</span>(<span style="color:#a31515;">&quot;Argument enumType must derive from type Enum.&quot;</span>);</pre>
<pre style="margin:0;">&#160;</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; _enumType = enumType;</pre>
<pre style="margin:0;">&#160;&#160;&#160; }</pre>
<pre style="margin:0;">&#160;</pre>
<pre style="margin:0;">&#160;&#160;&#160; <span style="color:blue;">public</span> <span style="color:blue;">override</span> <span style="color:blue;">object</span> ProvideValue(<span style="color:#2b91af;">IServiceProvider</span> serviceProvider)</pre>
<pre style="margin:0;">&#160;&#160;&#160; {</pre>
<pre style="margin:0;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">return</span> <span style="color:#2b91af;">Enum</span>.GetValues(_enumType);</pre>
<pre style="margin:0;">&#160;&#160;&#160; }</pre>
<pre style="margin:0;">}</pre>
</div>
</p>
<p>&#160;</p>
<p>With the EnumValuesExtension we no longer need to create an ObjectDataProvider, we simply hand the Enum type we’re interested in to the markup extension and bind to the returned values.</p>
<p><span style="color:blue;">&lt;</span><span style="color:#a31515;">ComboBox</span><span style="color:red;"> ItemsSource</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:red;"> Source</span><span style="color:blue;">={</span><span style="color:#a31515;">c</span><span style="color:blue;">:</span><span style="color:#a31515;">EnumValues</span><span style="color:blue;"> {</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Type</span><span style="color:red;"> src</span><span style="color:blue;">:</span><span style="color:red;">DevicePointFormat</span><span style="color:blue;">}}} /&gt;</span></p>
<p><span style="color:blue;"></span></p>
</p>
</p>
<p>&#160;</p>
<p>Not <a href="http://en.wikipedia.org/wiki/Aerospace_engineering">rocket science</a> but you might find it useful.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/summergoat.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/summergoat.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/summergoat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/summergoat.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/summergoat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/summergoat.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/summergoat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/summergoat.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/summergoat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/summergoat.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/summergoat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/summergoat.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/summergoat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/summergoat.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/summergoat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/summergoat.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=summergoat.wordpress.com&amp;blog=2380313&amp;post=18&amp;subd=summergoat&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://summergoat.wordpress.com/2008/07/08/enum-getvalues-markup-extension/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5083ca25c8781f6d2570518991cec9d2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">summergoat</media:title>
		</media:content>
	</item>
	</channel>
</rss>
