<?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/"
	>

<channel>
	<title>Mike Cousins</title>
	<atom:link href="http://www.mikecousins.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mikecousins.com</link>
	<description>Web, mobile, cloud. It&#039;s all the rage.</description>
	<lastBuildDate>Sun, 23 Dec 2012 22:07:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Google Play Store ordering experiences (Nexus 4 &amp; Nexus 7)</title>
		<link>http://www.mikecousins.com/google-play-store-ordering-experiences-nexus-4-nexus-7/</link>
		<comments>http://www.mikecousins.com/google-play-store-ordering-experiences-nexus-4-nexus-7/#comments</comments>
		<pubDate>Thu, 15 Nov 2012 20:07:21 +0000</pubDate>
		<dc:creator>Mike Cousins</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.mikecousins.com/?p=651</guid>
		<description><![CDATA[Nexus 7 Here is the timeline of my Nexus 7 order. June 27, 2012 I watched the Google event for the launch of the Nexus 7 and ordered it immediately after as soon as sales were opened. June 27, 2012 Minutes after ordering I realize that my address was my old address so I submit an address change request on my order. July 4, 2012 No updates to the address on my order so I submit a second address change request. July 11, 2012 Still...]]></description>
				<content:encoded><![CDATA[<p><strong>Nexus 7</strong><br />
Here is the timeline of my Nexus 7 order.</p>
<p><em>June 27, 2012</em><br />
I watched the Google event for the launch of the Nexus 7 and ordered it immediately after as soon as sales were opened.</p>
<p><em>June 27, 2012</em><br />
Minutes after ordering I realize that my address was my old address so I submit an address change request on my order.</p>
<p><em>July 4, 2012</em><br />
No updates to the address on my order so I submit a second address change request.</p>
<p><em>July 11, 2012</em><br />
Still no updates to the address on my order so I submit a third address change request.</p>
<p><em>July 16, 2012</em><br />
Nexus 7 is available in stores. Yes, before they&#8217;ve shipped to pre-ordering customers.</p>
<p><em>July 19, 2012</em><br />
Nexus 7 is shipped to the incorrect address. Customer service tells me they can&#8217;t do anything to help me other than let it go back to them and then order another one. It is currently out of stock and not available for several weeks. I end up calling again and get a more helpful agent who changes my address to the correct one.</p>
<p><em>October 5, 2012</em><br />
I get a response to my three address change requests asking if they&#8217;re still valid. Thanks Google&#8230;</p>
<p><strong>Nexus 4</strong><br />
There is no time given for when we can begin ordering the Nexus 4, only a date, November 13, 2012. The first rumour is 12am PST so I stay up until 1am MST and they don&#8217;t go up for sale. I check for the next rumoured time and it&#8217;s 9am PST so I go to sleep.</p>
<p>25 minutes or so before 9am PST they go up for sale. The site is a crashing mess and I try to order a 16GB for several minutes. None of my attempts are successful and it soon says that it&#8217;s sold out. I switch to the 8GB which is still available. After several minutes of trying I finally get a successful order through. I&#8217;m not that happy because I really wanted a 16GB model.</p>
<p>I check my Google Wallet account and it shows an order for a 16GB version. That&#8217;s strange. 5 minutes later an order for an 8GB version appears as well. A while later I also get emails confirming those two orders. Bonus! Lots of my friends offer to take the 8GB off of my hands and I&#8217;m happy.</p>
<p>Now, two days after, on the day my order is supposed to ship, I just received an email stating that my order is back ordered and won&#8217;t ship for another 3 weeks.</p>
<p>This is pretty ridiculous Google. I&#8217;ve never had a worse retail experience and I&#8217;ve now had it twice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikecousins.com/google-play-store-ordering-experiences-nexus-4-nexus-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery AJAX POSTing to ASP.NET MVC 3</title>
		<link>http://www.mikecousins.com/jquery-ajax-posting-to-asp-net-mvc-3/</link>
		<comments>http://www.mikecousins.com/jquery-ajax-posting-to-asp-net-mvc-3/#comments</comments>
		<pubDate>Wed, 13 Jun 2012 06:04:49 +0000</pubDate>
		<dc:creator>Mike Cousins</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Shuttr]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.mikecousins.com/?p=592</guid>
		<description><![CDATA[Getting your model binding to work properly with jQuery takes a bit of trial and error if you&#8217;re just getting started. There are a couple ways to send your data and you don&#8217;t really know which way is going to bind properly to which C# type. Here is a quick example for reference after I got multiple photo deletion working on Shuttr. The basic gist of this is that binding an array of ints in Javascript requires an ICollection in C# to make the magic...]]></description>
				<content:encoded><![CDATA[<p>Getting your model binding to work properly with jQuery takes a bit of trial and error if you&#8217;re just getting started.  There are a couple ways to send your data and you don&#8217;t really know which way is going to bind properly to which C# type. Here is a quick example for reference after I got multiple photo deletion working on <a href="http://shuttr.com" title="Shuttr" target="_blank">Shuttr</a>.  The basic gist of this is that binding an array of ints in Javascript requires an ICollection<Int> in C# to make the magic happen.</p>
<p>Our Telerik photo grid has a checkbox column named checkedPhotos and it&#8217;s value is the photo ID:</p>
<pre class="brush: csharp; title: ; notranslate">
column.Bound(p =&gt; p.Id)
    .ClientTemplate(&quot;&lt;input type='checkbox' name='checkedPhotos' value='&lt;#= Id #&gt;' /&gt;&quot;)
</pre>
<p>Clicking the delete button fires the deleteCheckedPhotos() Javascript function. Inside we check to make sure some photos are checked, ask for confirmation, then make an AJAX request to delete the photos, then AJAX refresh the photo grid.</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
function deleteCheckedPhotos() {
    var $checkedRecords = $(':checked');
    if ($checkedRecords.length &lt; 1) {
        alert('No photos selected');
        return;
    }
    else
    {
        if (confirm('Are you sure you want to delete the ' + $checkedRecords.length + ' checked photo(s)?')) {
            $.post('@Url.Action(&quot;DeleteCheckedPhotos&quot;, &quot;Account&quot;)', $checkedRecords)
                .complete(function () {
                var grid = $(&quot;#PhotoGrid&quot;).data('tGrid');
                grid.ajaxRequest();
            });
        }
    }
}
&lt;/script&gt;
</pre>
<p>In our controller we get the values from the AJAX request as an ICollection<int>:</p>
<pre class="brush: csharp; title: ; notranslate">
[Authorize(Roles = &quot;Photographer&quot;)]
public ActionResult DeleteCheckedPhotos(ICollection&lt;int&gt; checkedPhotos)
{
    // make sure we got some data
    if (checkedPhotos == null)
    {
        return Json(null);
    }

    // delete the specified photos
    foreach (var photoId in checkedPhotos)
    {
        _photoRepository.DeletePhoto(photoId);
    }

    return Json(null);
}
</pre>
<p>That&#8217;s all there is to it. This stuff is getting pretty easy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikecousins.com/jquery-ajax-posting-to-asp-net-mvc-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Body Fitness Triathlon Photos</title>
		<link>http://www.mikecousins.com/best-body-fitness-triathlon-photos/</link>
		<comments>http://www.mikecousins.com/best-body-fitness-triathlon-photos/#comments</comments>
		<pubDate>Sun, 27 May 2012 22:12:33 +0000</pubDate>
		<dc:creator>Mike Cousins</dc:creator>
				<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://www.mikecousins.com/?p=586</guid>
		<description><![CDATA[I shot the Best Body Fitness Triathlon in Sylvan Lake this morning. The photos are currently being edited, and then they will be uploaded. Hopefully by tomorrow they should be showing up online. They will be available for purchase on Shuttr at: http://mike.shuttr.com/gallery/158. It was a beautiful day for racing. Congratulations to all of the new and returning triathletes!]]></description>
				<content:encoded><![CDATA[<p>I shot the <a href="http://sltc.ca/race-info/">Best Body Fitness Triathlon</a> in Sylvan Lake this morning. The photos are currently being edited, and then they will be uploaded.  Hopefully by tomorrow they should be showing up online.  They will be available for purchase on Shuttr at: <a href="http://mike.shuttr.com/gallery/158">http://mike.shuttr.com/gallery/158</a>.</p>
<p>It was a beautiful day for racing.  Congratulations to all of the new and returning triathletes!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikecousins.com/best-body-fitness-triathlon-photos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Relic NuGet package: Automatic building and publishing with TeamCity</title>
		<link>http://www.mikecousins.com/new-relic-nuget-package/</link>
		<comments>http://www.mikecousins.com/new-relic-nuget-package/#comments</comments>
		<pubDate>Wed, 02 May 2012 02:32:45 +0000</pubDate>
		<dc:creator>Mike Cousins</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Shuttr]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[new relic]]></category>
		<category><![CDATA[nuget]]></category>
		<category><![CDATA[teamcity]]></category>

		<guid isPermaLink="false">http://www.mikecousins.com/?p=571</guid>
		<description><![CDATA[I&#8217;m a big fan of New Relic server/application monitoring and last year I created a NuGet package for them. I wanted to make it easy for people to get New Relic going in an Azure environment and NuGet solves that problem. I&#8217;ve used it in production on Shuttr ever since. I approached New Relic when I began work on it, but they didn&#8217;t seem all that interested or maybe I didn&#8217;t find the right people to talk to. Just last week I was approached by...]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m a big fan of <a href="http://newrelic.com" title="New Relic" target="_blank">New Relic</a> server/application monitoring and last year I created a <a href="http://nuget.org/packages/NewRelicWindowsAzure" title="NewRelicWindowsAzure NuGet Package" target="_blank">NuGet package</a> for them.  I wanted to make it easy for people to get New Relic going in an Azure environment and NuGet solves that problem.  I&#8217;ve used it in production on <a href="http://shuttr.com" title="Shuttr - Canadian Photographer Directory" target="_blank">Shuttr</a> ever since.  I approached New Relic when I began work on it, but they didn&#8217;t seem all that interested or maybe I didn&#8217;t find the right people to talk to.  Just last week I was approached by <a href="http://archcoder.com/" title="Nick Floyd" target="_blank">Nick Floyd</a> from New Relic with some interest in my NuGet package.</p>
<p>I&#8217;ve decided to open source my package so that New Relic can contribute to it, as well as anybody else who&#8217;s interested.  I&#8217;ve thrown it up on <a href="https://github.com/mikecousins/newrelicazurenuget" title="GitHub - newrelicazurenuget" target="_blank">GitHub</a>.  Feel free to fork, send pull requests, add issues, comment on issues, etc.</p>
<p>I also setup a pretty cool automatic build and publishing system using TeamCity and wanted to share the setup.  If you&#8217;re interested in maintaining a NuGet package this is a great way to go.</p>
<p>Add a new build configuration for your project.</p>
<p><a href="http://i1.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/teamcity.jpg"><img src="http://i1.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/teamcity.jpg?resize=300%2C46" alt="" title="teamcity" class="alignnone size-medium wp-image-577" data-recalc-dims="1" /></a></p>
<p>On the general settings tab set your artifact path to &#8220;output&#8221;.</p>
<p><a href="http://i1.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/generalsettings.jpg"><img src="http://i0.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/generalsettings.jpg?resize=300%2C168" alt="" title="generalsettings" class="alignnone size-medium wp-image-573" data-recalc-dims="1" /></a></p>
<p>Add your VCS settings for your source control system.  I use GitHub for the New Relic package which is easy to add.</p>
<p><a href="http://i1.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/vcs.jpg"><img src="http://i0.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/vcs.jpg?resize=300%2C169" alt="" title="vcs" class="alignnone size-medium wp-image-579" data-recalc-dims="1" /></a></p>
<p>You will want to add two build steps, one for building the package and one for publishing it to the <a href="http://nuget.org" title="NuGet Gallery" target="_blank">NuGet gallery</a>.</p>
<p><a href="http://i1.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/buildsteps.jpg"><img src="http://i1.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/buildsteps.jpg?resize=300%2C168" alt="" title="buildsteps" class="alignnone size-medium wp-image-572" data-recalc-dims="1" /></a></p>
<p>The build step runner is of type &#8220;NuGet Pack&#8221;. Make sure to specify your .nuspec file that you want to build here. Set the output directory to &#8220;output&#8221;. This must match the artifact path that you set on the general settings tab.</p>
<p><a href="http://i2.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/package.jpg"><img src="http://i0.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/package.jpg?resize=300%2C240" alt="" title="package" class="alignnone size-medium wp-image-575" data-recalc-dims="1" /></a></p>
<p>The publish step runner is of type &#8220;NuGet Publish&#8221;. Set your package to upload to &#8220;output/*&#8221;.</p>
<p><a href="http://i2.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/publish.jpg"><img src="http://i2.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/publish.jpg?resize=300%2C169" alt="" title="publish" class="alignnone size-medium wp-image-576" data-recalc-dims="1" /></a></p>
<p>You can get your NuGet API Key from your <a href="https://nuget.org/account" title="NuGet Account" target="_blank">NuGet account page</a>.</p>
<p><a href="http://i0.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/nuget.jpg"><img src="http://i0.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/nuget.jpg?resize=300%2C286" alt="" title="nuget" class="alignnone size-medium wp-image-574" data-recalc-dims="1" /></a></p>
<p>I added a trigger so that this happens automatically on any commit to our GitHub repository.</p>
<p><a href="http://i2.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/trigger.jpg"><img src="http://i1.wp.com/www.mikecousins.com/wp-content/uploads/2012/05/trigger.jpg?resize=300%2C168" alt="" title="trigger" class="alignnone size-medium wp-image-578" data-recalc-dims="1" /></a></p>
<p>And that&#8217;s it, now you&#8217;ll get your package published automatically into the NuGet gallery on every commit into your source control system!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikecousins.com/new-relic-nuget-package/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Calgary condo parking limits are backwards</title>
		<link>http://www.mikecousins.com/calgary-condo-parking-limits-are-backwards/</link>
		<comments>http://www.mikecousins.com/calgary-condo-parking-limits-are-backwards/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 23:44:47 +0000</pubDate>
		<dc:creator>Mike Cousins</dc:creator>
				<category><![CDATA[Politics]]></category>

		<guid isPermaLink="false">http://www.mikecousins.com/?p=565</guid>
		<description><![CDATA[We&#8217;re currently in the market for a new place to live. We have a rental condo and are looking to either purchase a condo or build an infill somewhat near downtown. We like walking to work, and we like the atmosphere of downtown living. The hottest new project in Calgary is the East Village. We stopped in on the weekend and had a great talk with the developers of the first two condos going up: Evolution and First. They both had some cool layouts, decent...]]></description>
				<content:encoded><![CDATA[<p>We&#8217;re currently in the market for a new place to live. We have a rental condo and are looking to either purchase a condo or build an infill somewhat near downtown. We like walking to work, and we like the atmosphere of downtown living.</p>
<p>The hottest new project in Calgary is the <a href="http://www.evexperience.com/" title="East Village Experience" target="_blank">East Village</a>. We stopped in on the weekend and had a great talk with the developers of the first two condos going up: <a href="http://www.evolutioncalgary.com/" title="Evolution Calgary" target="_blank">Evolution</a> and <a href="http://www.thenewcalgary.com/calgary-condos/first/" title="First" target="_blank">First</a>.</p>
<p>They both had some cool layouts, decent prices, and it looks like the projects are going to end up being pretty great. At the end of each discussion I asked how many parking spots we got with the condo purchase and both said the same thing: 1. We have two cars, one is a sedan and I use it to drive to work and around town, the other is a wagon that we use for ski trips, camping trips, etc. We need two parking spots for our cars. First said that we MIGHT be able to get a second spot, for $20k, and that it would be a tandem with one car in front of the other. That would be a massive pain in the butt. Evolution said that they couldn&#8217;t guarantee an extra spot at all but that there might be one available for purchase once all condos were sold.</p>
<p>There is a bylaw in Calgary stating that downtown condos can have a maximum of 0.85 parking spaces per unit. This means that some units get 0 spots and the rest get 1. This is completely unacceptable for some purchasers and will end up driving them to the suburbs instead, adding to the traffic problem that this bylaw was probably intending to reduce.</p>
<p>People that live downtown:</p>
<ol>
<li>Usually walk to work</li>
<li>If they drive to work they are driving against rush hour</li>
<li>Are not contributing to urban sprawl</li>
<li>Even if you have multiple cars per person you aren&#8217;t driving more than one at a time</li>
</ol>
<p>It just seems backwards to push people into houses which defeats the purpose of this bylaw. In my opinion, everything possible should be done to encourage people to live in higher density areas like condos. This regulation does the opposite.</p>
<p>I heard one reason that they can&#8217;t have more is because people might rent them to people commuting to downtown. An easy solution to that is to disallow the rental of a parking space in a building that you aren&#8217;t a resident. Similar to how you can&#8217;t park on a street that you don&#8217;t live on in some neighbourhoods.</p>
<p>I honestly can&#8217;t see a reason why this law should exist. Can somebody explain it to me? All I know is that my choice is now simple and that I will be going the infill route and contributing to Calgary&#8217;s traffic issues like the rest of the city.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikecousins.com/calgary-condo-parking-limits-are-backwards/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Where&#8217;s the Azure focus Microsoft?</title>
		<link>http://www.mikecousins.com/wheres-the-azure-focus-microsoft/</link>
		<comments>http://www.mikecousins.com/wheres-the-azure-focus-microsoft/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 16:03:02 +0000</pubDate>
		<dc:creator>Mike Cousins</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Shuttr]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[windows server 8]]></category>

		<guid isPermaLink="false">http://www.mikecousins.com/?p=558</guid>
		<description><![CDATA[I moved Shuttr to Windows Azure a year or so ago and I&#8217;ve been very impressed with the platform. It&#8217;s been fast, stable, reliable, etc. There have been numerous reductions to their pricing model which have made it a lot more palatable. http://blogs.msdn.com/b/windowsazure/archive/2012/03/08/announcing-reduced-pricing-on-windows-azure-storage-and-compute.aspx http://blogs.msdn.com/b/windowsazure/archive/2011/10/27/microsoft-lowers-storage-cost-for-blob-and-table-storage-in-windows-azure.aspx http://blogs.msdn.com/b/windowsazure/archive/2012/02/14/announcing-reduced-pricing-on-sql-azure-and-new-100mb-database-option.aspx With these new pricing reductions we now have a full testing environment up in Azure permanently with a 100MB SQL Azure database and an extra small web role. It&#8217;s virtually free for that. Shuttr&#8217;s main expense is storage given that...]]></description>
				<content:encoded><![CDATA[<p>I moved <a href="http://shuttr.com" title="Shuttr" target="_blank">Shuttr</a> to Windows Azure a year or so ago and I&#8217;ve been very impressed with the platform. It&#8217;s been fast, stable, reliable, etc. There have been numerous reductions to their pricing model which have made it a lot more palatable.</p>
<p><a href="http://blogs.msdn.com/b/windowsazure/archive/2012/03/08/announcing-reduced-pricing-on-windows-azure-storage-and-compute.aspx" target="_blank">http://blogs.msdn.com/b/windowsazure/archive/2012/03/08/announcing-reduced-pricing-on-windows-azure-storage-and-compute.aspx</a></p>
<p><a href="http://blogs.msdn.com/b/windowsazure/archive/2011/10/27/microsoft-lowers-storage-cost-for-blob-and-table-storage-in-windows-azure.aspx" target="_blank">http://blogs.msdn.com/b/windowsazure/archive/2011/10/27/microsoft-lowers-storage-cost-for-blob-and-table-storage-in-windows-azure.aspx</a></p>
<p><a href="http://blogs.msdn.com/b/windowsazure/archive/2012/02/14/announcing-reduced-pricing-on-sql-azure-and-new-100mb-database-option.aspx" target="_blank">http://blogs.msdn.com/b/windowsazure/archive/2012/02/14/announcing-reduced-pricing-on-sql-azure-and-new-100mb-database-option.aspx</a></p>
<p>With these new pricing reductions we now have a full testing environment up in Azure permanently with a 100MB SQL Azure database and an extra small web role.  It&#8217;s virtually free for that. Shuttr&#8217;s main expense is storage given that we store a ton of high resolution photos, so these improvements are greatly helping our business.</p>
<p>I&#8217;m super happy with the platform, but what I really want is integration and a focus from Microsoft on supporting Azure.</p>
<p><strong>Why can I not run Windows Server 8 Beta on Azure?</strong></p>
<p>This would get a lot of people playing with .NET 4.5, ASP.NET MVC 4, IIS 8, WebSockets, etc. Azure could be a cutting edge place to develop. Instead I&#8217;m sure it will be much like last time. Windows Server 2008 R2 came out on October 22, 2009. The first time it was available on Azure was with Azure Guest OS 2.0 which was released in November 22, 2010. It took 13 months to come out.</p>
<p><a href="http://blogs.msdn.com/b/windowsazure/archive/2010/04/07/upcoming-support-in-windows-azure-for-net-framework-4.aspx" target="_blank">http://blogs.msdn.com/b/windowsazure/archive/2010/04/07/upcoming-support-in-windows-azure-for-net-framework-4.aspx</a></p>
<p>.NET 4 took 90 days after RTM to come out.  This is atrocious. IMO it should be available the day the beta is available and updated to the release version the day it&#8217;s out.  You&#8217;re Microsoft, you can make this happen.</p>
<p><strong>Why are there no Azure Tools for Visual Studio 11 Beta?</strong></p>
<p>Again, the Visual Studio team obviously either does not communicate with the Azure team or there is simply no priority for Azure support in Visual Studio. Instead we get an <a href="https://www.windowsazure.com/en-us/develop/vs11/" title="Azure on VS11" target="_blank">article</a> telling us that the way to develop on Azure with Visual Studio 11 is to install Visual Studio 2010 as well, make some hacks, and then install the Azure tools. Brutal.</p>
<p>Azure users are already cutting edge, they&#8217;re building apps in the cloud! Azure users want to be able to use cutting edge software. Want to really push Azure? Release there first! Don&#8217;t make us wait until well after these things are released. Not being able to start playing with your latest languages, frameworks and development tools is a serious kick to the junk.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikecousins.com/wheres-the-azure-focus-microsoft/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Office 365 ActiveSync fail, again</title>
		<link>http://www.mikecousins.com/office-365-activesync-fail-again/</link>
		<comments>http://www.mikecousins.com/office-365-activesync-fail-again/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 02:04:59 +0000</pubDate>
		<dc:creator>Mike Cousins</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[office365]]></category>

		<guid isPermaLink="false">http://www.mikecousins.com/?p=527</guid>
		<description><![CDATA[When Office 365 launched the mobile server address was m.outlook.com. This was a great address: easy to remember, pretty short, etc. A couple months ago my phone stopped syncing my mail. I went to the Office 365 forums and found that for some reason m.outlook.com was now broken and everybody had to switch to an address found by going into Options -> See All Options -> Settings for POP, IMAP, and SMTP access&#8230; Mine was pod51009.outlook.com. Then last night it went down again. I checked...]]></description>
				<content:encoded><![CDATA[<p>When Office 365 launched the mobile server address was m.outlook.com.  This was a great address: easy to remember, pretty short, etc.</p>
<p>A couple months ago my phone stopped syncing my mail.  I went to the Office 365 forums and found that for some reason m.outlook.com was now broken and everybody had to switch to an address found by going into Options -> See All Options -> Settings for POP, IMAP, and SMTP access&#8230; Mine was pod51009.outlook.com.</p>
<p>Then last night it went down again.  I checked online and sure enough the address has now changed again.  This time you have to use the hostname found in Help->About.  Mine is ch1prd0402.outlook.com.</p>
<p>This is completely unacceptable as a paying customer.  If you know that you are messing around with DNS or something that will change what server address your customers use, you should send out a heads up email and get people to switch over early.  At the very least just a heads up email that it&#8217;s broken and here is how to fix it.  Letting the community find out how to fix it after Microsoft breaks it is getting old fast.</p>
<p><strong>Update &#8211; January 25, 2012</strong><br />
Now that I&#8217;m using the actual hostname it can change at anytime.  I figured this probably wouldn&#8217;t change that often but I was wrong.  It changed for me after 2 weeks.  This is getting old pretty fast.  Microsoft also seems to be either completely ignoring the issue or saying that it&#8217;s affecting a small number of customers.  I fail to see how every person who uses Android is a small number considering they now have the largest market share in smartphones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikecousins.com/office-365-activesync-fail-again/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Silverlight 5 + Internet Explorer 9 using old Content-Type from POST in a subsequent GET</title>
		<link>http://www.mikecousins.com/silverlight-5-internet-explorer-9-using-old-contenttype-from-post-in-a-subsequent-get/</link>
		<comments>http://www.mikecousins.com/silverlight-5-internet-explorer-9-using-old-contenttype-from-post-in-a-subsequent-get/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 22:56:39 +0000</pubDate>
		<dc:creator>Mike Cousins</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://www.mikecousins.com/?p=528</guid>
		<description><![CDATA[We&#8217;ve been running into a super annoying problem at work. After our Silverlight application makes it&#8217;s login POST the next GET that we send fails with a NotFoundException. This only happens when using the Silverlight 5 runtime and only happens in Internet Explorer 9. I have tested now with Silverlight 4 as well as Chrome, Firefox, Opera and Safari, and IE9/SL5 is the only bad combination. Here are the headers of our login POST: POST /login HTTP/1.1 Accept: application/xml Referer: http://localhost:8080/censored.xap?timestamp=1326148328000 Accept-Language: en-CA Content-Length: 38...]]></description>
				<content:encoded><![CDATA[<p>We&#8217;ve been running into a super annoying problem at work.  After our Silverlight application makes it&#8217;s login POST the next GET that we send fails with a NotFoundException.  This only happens when using the Silverlight 5 runtime and only happens in Internet Explorer 9.  I have tested now with Silverlight 4 as well as Chrome, Firefox, Opera and Safari, and IE9/SL5 is the only bad combination.</p>
<p>Here are the headers of our login POST:</p>
<p><code>POST /login HTTP/1.1<br />
Accept: application/xml<br />
Referer: http://localhost:8080/censored.xap?timestamp=1326148328000<br />
Accept-Language: en-CA<br />
Content-Length: 38<br />
Content-Type: application/x-www-form-urlencoded<br />
Accept-Encoding: gzip, deflate<br />
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)<br />
Host: localhost:8080<br />
Connection: Keep-Alive<br />
Pragma: no-cache<br />
Cookie: JSESSIONID=DEFEAFD35E9B067A79F772C166937750<br />
</code></p>
<p>Here are the headers of our next GET:</p>
<p><code>GET /user/current HTTP/1.1<br />
Accept: application/xml<br />
Referer: http://localhost:8080/censored.xap?timestamp=1326148328000<br />
Accept-Language: en-CA<br />
Content-Length: 38<br />
Content-Type: application/x-www-form-urlencoded<br />
Accept-Encoding: gzip, deflate<br />
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)<br />
Host: localhost:8080<br />
Proxy-Connection: Keep-Alive<br />
Pragma: no-cache<br />
Cookie: JSESSIONID=5C57C93458E80E5975470F703B4A483C<br />
</code></p>
<p>Notice that the Content-Type and Content-Length are identical, even though:</p>
<ul>
<li>You aren&#8217;t allowed to use Content-Type or Content-Length on a GET</li>
<li>The content length is actually different in the GET request so it&#8217;s obviously the old value</li>
</ul>
<p>Here is a <a href="http://www.mikecousins.com/files/NetworkTest.zip">sample solution</a> that demonstrates the issue.</p>
<p>Silverlight client:</p>
<pre class="brush: csharp; title: ; notranslate">
using System.IO;
using System.Net;
using System.Net.Browser;
using System.Windows.Controls;

namespace NetworkTest
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            HttpWebRequest request = (HttpWebRequest)WebRequestCreator.BrowserHttp.Create(new Uri(&quot;http://localhost:59050/Home/Login&quot;));
            request.Method = &quot;POST&quot;;
            request.ContentType = &quot;application/x-www-form-urlencoded&quot;;
            request.BeginGetRequestStream(result =&gt;
                {
                    var rq = result.AsyncState as HttpWebRequest;

                    using (var stream = rq.EndGetRequestStream(result))
                    {
                        StreamWriter writer = new StreamWriter(stream);
                        writer.WriteLine(&quot;username=test&amp;password=test&quot;);
                        writer.Flush();
                        writer.Close();
                    }

                    rq.BeginGetResponse(
                        r =&gt;
                        {
                            try
                            {
                                rq.EndGetResponse(r);
                            }
                            catch
                            {
                            }
                        }, rq);
                }, request);
        }
    }
}
</pre>
<p>Server code:</p>
<pre class="brush: csharp; title: ; notranslate">
using System.Web.Mvc;

namespace TestServer.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Login(string test)
        {
            return RedirectToAction(&quot;Index&quot;);
        }
    }
}
</pre>
<p>Basically the Silverlight client makes a POST to the login page which redirects back to the index page.  The index page GET still contains the Content-Type and Content-Length fields from the login POST and so it fails.  This works just fine in Chrome.  It also only happens with BrowserHttp.  ClientHttp works fine but isn&#8217;t an option at work because we&#8217;re using cookie authentication and so we need the browser to make the requests.</p>
<p>Anyone else running into this?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikecousins.com/silverlight-5-internet-explorer-9-using-old-contenttype-from-post-in-a-subsequent-get/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Canadian investing made lazy</title>
		<link>http://www.mikecousins.com/canadian-investing-made-lazy/</link>
		<comments>http://www.mikecousins.com/canadian-investing-made-lazy/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 20:49:38 +0000</pubDate>
		<dc:creator>Mike Cousins</dc:creator>
				<category><![CDATA[Money]]></category>
		<category><![CDATA[canada]]></category>
		<category><![CDATA[etf]]></category>
		<category><![CDATA[investing]]></category>
		<category><![CDATA[money]]></category>

		<guid isPermaLink="false">http://www.mikecousins.com/?p=514</guid>
		<description><![CDATA[It&#8217;s Easy One of the most common complaints that I hear about investing is that it&#8217;s too complicated and that people don&#8217;t have time to learn about how to do it. The good thing is, it pays to be lazy in investing! Canadian Capitalist &#8211; Lazy Man&#8217;s Portfolio Almost every stock or mutual fund will lose to it&#8217;s respective index. The concept of the &#8220;lazy&#8221; portfolio is just to buy something as similar to the index as possible. This way you will go up and...]]></description>
				<content:encoded><![CDATA[<p><strong>It&#8217;s Easy</strong><br />
One of the most common complaints that I hear about investing is that it&#8217;s too complicated and that people don&#8217;t have time to learn about how to do it.  The good thing is, it pays to be lazy in investing!</p>
<p><a href="http://www.canadiancapitalist.com/the-lazy-mans-portfolio/" title="Canadian Capitalist - Lazy Man's Portfolio" target="_blank">Canadian Capitalist &#8211; Lazy Man&#8217;s Portfolio</a></p>
<p>Almost every stock or mutual fund will lose to it&#8217;s respective index.  The concept of the &#8220;lazy&#8221; portfolio is just to buy something as similar to the index as possible.  This way you will go up and down with the market and over long periods of time you should go up.  Choosing individual stocks, researching companies, etc., usually ends up in your playing &#8220;the loser&#8217;s game&#8221;.  Never trade or sell your stocks, only add to the portfolio to keep your percentages as close to the desired percentage as possible.</p>
<p><a href="http://articles.businessinsider.com/2011-12-24/news/30553804_1_investment-game-financial-media-grand-masters" target="_blank">Don&#8217;t Play The Loser&#8217;s Game</a></p>
<p><strong>Mutual Funds vs ETFs</strong></p>
<p>ETFs have become very popular lately and for good reason, they will always perform better than their respective mutual fund because they have less management fees.  Because we&#8217;re going with index funds the only differentiator left is the amount of management fees (denoted MER, management expense ratio) that they charge.  ETFs are usually much lower, usually in the 0.1-0.3% range rather than 0.5-3% range.  They&#8217;re usually an order of magnitude better.  This will mean several tens or hundreds of thousands of dollars difference by the time you retire.</p>
<p><strong>Choosing Your Portfolio</strong></p>
<p>There are a bunch of good model portfolios floating around the web.  Here are two of my favourites:</p>
<p><a href="http://www.canadiancapitalist.com/tidying-up-the-sleepy-portfolio/" target="_blank">Canadian Capitalist</a></p>
<p><a href="http://www.efficientmarket.ca/article/Global_ETF_2" target="_blank">Efficient Market</a></p>
<p>I took their recommendations and customized it a bit and here&#8217;s what I&#8217;ve decided to go with for mine:</p>
<ul>
<li>XIC &#8211; 25% &#8211; Canadian Equity &#8211; 0.25% MER</li>
<li>VTI &#8211; 20% &#8211; US Equity &#8211; 0.07% MER</li>
<li>VEA &#8211; 20% &#8211; Europe/Asia Equity &#8211; 0.12% MER</li>
<li>VWO &#8211; 5% &#8211; Emerging Equity &#8211; 0.22% MER</li>
<li>XBB &#8211; 25% &#8211; Canadian Bonds &#8211; 0.30% MER</li>
<li>RBF2010 &#8211; 5% &#8211; Canadian Cash</li>
</ul>
<p>That&#8217;s a blended MER of 0.19%!  Compare that to your average mutual fund based index portfolio which would have a blended MER closer to 1%.</p>
<p>RBF2010 is a mutual fund which is basically a high interest savings account under the covers.  Great for holding in an RRSP/TFSA.  It currently pays out at 1.25%.  I also hold XBB instead of XSB/XRB for simplicity.</p>
<p><strong>Getting Started</strong></p>
<p>To do this yourself you&#8217;ll want to get a self-directed investment account from your bank of choice:</p>
<p><a href="http://www.rbcdirectinvesting.com/" target="_blank">Royal Bank Direct Investing</a><br />
<a href="http://www.tdwaterhouse.ca/products-services/investing/discount-brokerage/index.jsp" target="_blank">TD Waterhouse Discount Brokerage</a><br />
<a href="https://www.investorsedge.cibc.com/ie/index.html" target="_blank">CIBC Investor&#8217;s Edge</a><br />
etc.</p>
<p>There is also Credential Direct which is an independent Canadian brokerage:<br />
<a href="http://www.credentialdirect.com/" target="_blank">Credential Direct</a></p>
<p>Setup an RRSP and TFSA with whichever one you want and get lazy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikecousins.com/canadian-investing-made-lazy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Localizing a Silverlight DatePicker control, a study in pain thresholds</title>
		<link>http://www.mikecousins.com/localizing-a-silverlight-datepicker-control-a-study-in-pain-thresholds/</link>
		<comments>http://www.mikecousins.com/localizing-a-silverlight-datepicker-control-a-study-in-pain-thresholds/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 17:34:07 +0000</pubDate>
		<dc:creator>Mike Cousins</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://blog.mikecousins.com/?p=491</guid>
		<description><![CDATA[For shame Microsoft. There is currently no way to localize a DatePicker. Instead of letting us simply specify a format string or any of the other beautiful conventions we are forced to basically re-template the entire control. In our application, at my day job, we support many different languages/cultures. This was becoming a mess with the various date formats so we decreed that all dates would be in the ISO standard format (yyyy-MM-dd HH:mm:ss). Styling everything in the app was a 10 minute job, until...]]></description>
				<content:encoded><![CDATA[<p>For shame Microsoft.  There is currently no way to localize a DatePicker.  Instead of letting us simply specify a format string or any of the other beautiful conventions we are forced to basically re-template the entire control.</p>
<p>In our application, at my day job, we support many different languages/cultures.  This was becoming a mess with the various date formats so we decreed that all dates would be in the ISO standard format (yyyy-MM-dd HH:mm:ss).  Styling everything in the app was a 10 minute job, until I got to the DatePickers that we use for our search fields.  I couldn&#8217;t find a nice FormatString to set in XAML.  I couldn&#8217;t find a way to set anything else in the code behind either.  I changed how we display the selected date by reformatting the text string that the Text property is bound to. That was fixed, but now I was left with a watermark stating <code></code> when the actual format was <code>yyyy-mm-dd</code> I resorted to Google.</p>
<p>I found a lot of rants and only a couple possible solutions.</p>
<p>http://blogs.msdn.com/b/silverlight_sdk/archive/2010/05/06/changing-the-watermark-text-in-a-datepicker-control.aspx</p>
<p>This blog shows a way to change the watermark, but the solution quickly fails after selecting a date and then deleting it.  It will revert back to the original watermark.  Unacceptable.</p>
<p>One of the last comments says that this code will fix it:</p>
<pre class="brush: csharp; title: ; notranslate">
public class CustomDatePicker : DatePicker
{
   public CustomDatePicker()
   {
       SelectedDateChanged += DateChanged;
       Unloaded += CustomDatePickerUnloaded;
   }

   public override void OnApplyTemplate()
   {
       base.OnApplyTemplate();
       HandleWatermark();
   }

   private void DateChanged(object sender, SelectionChangedEventArgs e)
   {
       HandleWatermark();
   }

   private void CustomDatePickerUnloaded(object sender, RoutedEventArgs e)
   {
       SelectedDateChanged -= DateChanged;
   }

   public void HandleWatermark()
   {
       var box = GetTemplateChild(&quot;TextBox&quot;) as DatePickerTextBox;

       if (box == null) return;

       if (SelectedDateFormat == DatePickerFormat.Short)
           box.Watermark = &quot;mm/dd/yyyy&quot;;
   }
}
</pre>
<p>This code is closer, but there is still a bug.  From the time that you delete the date until the time that you unfocus the DatePicker the original watermark is displayed.  So close, but so far.</p>
<p>I eventually found this solution, which seems like entirely too much work for such a simple problem.  You basically have to style the DatePicker and the DatePickerTextBox that it contains.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;Style x:Key=&quot;IsoDatePickerTextBoxStyle&quot; TargetType=&quot;System_Windows_Controls_Primitives:DatePickerTextBox&quot;&gt;
    &lt;Setter Property=&quot;VerticalContentAlignment&quot; Value=&quot;Center&quot;/&gt;
    &lt;Setter Property=&quot;HorizontalContentAlignment&quot; Value=&quot;Left&quot;/&gt;
    &lt;Setter Property=&quot;Template&quot;&gt;
        &lt;Setter.Value&gt;
            &lt;ControlTemplate TargetType=&quot;System_Windows_Controls_Primitives:DatePickerTextBox&quot;&gt;
                &lt;Grid x:Name=&quot;Root&quot;&gt;
                    &lt;Grid.Resources&gt;
                        &lt;SolidColorBrush x:Key=&quot;WatermarkBrush&quot; Color=&quot;#FFAAAAAA&quot;/&gt;
                    &lt;/Grid.Resources&gt;
                    &lt;VisualStateManager.VisualStateGroups&gt;
                        &lt;VisualStateGroup x:Name=&quot;CommonStates&quot;&gt;
                            &lt;VisualStateGroup.Transitions&gt;
                                &lt;VisualTransition GeneratedDuration=&quot;0&quot;/&gt;
                                &lt;VisualTransition GeneratedDuration=&quot;0:0:0.1&quot; To=&quot;MouseOver&quot;/&gt;
                            &lt;/VisualStateGroup.Transitions&gt;
                            &lt;VisualState x:Name=&quot;Normal&quot;/&gt;
                            &lt;VisualState x:Name=&quot;MouseOver&quot;&gt;
                                &lt;Storyboard&gt;
                                    &lt;ColorAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;(Border.BorderBrush).(SolidColorBrush.Color)&quot; Storyboard.TargetName=&quot;ContentElement&quot;&gt;
                                        &lt;SplineColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#FF99C1E2&quot;/&gt;
                                    &lt;/ColorAnimationUsingKeyFrames&gt;
                                    &lt;ColorAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;(Border.BorderBrush).(SolidColorBrush.Color)&quot; Storyboard.TargetName=&quot;ContentElement2&quot;&gt;
                                        &lt;SplineColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#FF99C1E2&quot;/&gt;
                                    &lt;/ColorAnimationUsingKeyFrames&gt;
                                &lt;/Storyboard&gt;
                            &lt;/VisualState&gt;
                        &lt;/VisualStateGroup&gt;
                        &lt;VisualStateGroup x:Name=&quot;WatermarkStates&quot;&gt;
                            &lt;VisualStateGroup.Transitions&gt;
                                &lt;VisualTransition GeneratedDuration=&quot;0&quot;/&gt;
                            &lt;/VisualStateGroup.Transitions&gt;
                            &lt;VisualState x:Name=&quot;Unwatermarked&quot;/&gt;
                            &lt;VisualState x:Name=&quot;Watermarked&quot;&gt;
                                &lt;Storyboard&gt;
                                    &lt;DoubleAnimation Duration=&quot;0&quot; To=&quot;0&quot; Storyboard.TargetProperty=&quot;Opacity&quot; Storyboard.TargetName=&quot;ContentElement&quot;/&gt;
                                    &lt;DoubleAnimation Duration=&quot;0&quot; To=&quot;1&quot; Storyboard.TargetProperty=&quot;Opacity&quot; Storyboard.TargetName=&quot;Watermark&quot;/&gt;
                                &lt;/Storyboard&gt;
                            &lt;/VisualState&gt;
                        &lt;/VisualStateGroup&gt;
                        &lt;VisualStateGroup x:Name=&quot;FocusStates&quot;&gt;
                            &lt;VisualStateGroup.Transitions&gt;
                                &lt;VisualTransition GeneratedDuration=&quot;0&quot;/&gt;
                            &lt;/VisualStateGroup.Transitions&gt;
                            &lt;VisualState x:Name=&quot;Unfocused&quot;/&gt;
                            &lt;VisualState x:Name=&quot;Focused&quot;&gt;
                                &lt;Storyboard&gt;
                                    &lt;DoubleAnimation Duration=&quot;0&quot; To=&quot;1&quot; Storyboard.TargetProperty=&quot;Opacity&quot; Storyboard.TargetName=&quot;FocusVisual&quot;/&gt;
                                &lt;/Storyboard&gt;
                            &lt;/VisualState&gt;
                        &lt;/VisualStateGroup&gt;
                    &lt;/VisualStateManager.VisualStateGroups&gt;
                    &lt;Border x:Name=&quot;Border&quot; BorderBrush=&quot;{TemplateBinding BorderBrush}&quot; BorderThickness=&quot;{TemplateBinding BorderThickness}&quot; CornerRadius=&quot;1&quot; Opacity=&quot;1&quot;&gt;
                        &lt;Grid x:Name=&quot;WatermarkContent&quot; Background=&quot;{TemplateBinding Background}&quot;&gt;
                            &lt;Border x:Name=&quot;ContentElement&quot; BorderBrush=&quot;#FFFFFFFF&quot; BorderThickness=&quot;1&quot; Background=&quot;{TemplateBinding Background}&quot; Padding=&quot;{TemplateBinding Padding}&quot;/&gt;
                            &lt;Border x:Name=&quot;ContentElement2&quot; BorderBrush=&quot;#FFFFFFFF&quot; BorderThickness=&quot;1&quot;&gt;
                                &lt;ContentControl x:Name=&quot;Watermark&quot; Background=&quot;{TemplateBinding Background}&quot; Content=&quot;{Binding ApplicationStrings.WatermarkDateFormat, Source={StaticResource ResourceWrapper}}&quot; Foreground=&quot;{StaticResource WatermarkBrush}&quot; FontSize=&quot;{TemplateBinding FontSize}&quot; HorizontalAlignment=&quot;{TemplateBinding HorizontalContentAlignment}&quot; HorizontalContentAlignment=&quot;{TemplateBinding HorizontalContentAlignment}&quot; IsHitTestVisible=&quot;False&quot; IsTabStop=&quot;False&quot; Opacity=&quot;0&quot; Padding=&quot;2&quot; VerticalAlignment=&quot;{TemplateBinding VerticalContentAlignment}&quot; VerticalContentAlignment=&quot;{TemplateBinding VerticalContentAlignment}&quot;/&gt;
                            &lt;/Border&gt;
                            &lt;Border x:Name=&quot;FocusVisual&quot; BorderBrush=&quot;#FF6DBDD1&quot; BorderThickness=&quot;{TemplateBinding BorderThickness}&quot; CornerRadius=&quot;1&quot; IsHitTestVisible=&quot;False&quot; Opacity=&quot;0&quot;/&gt;
                        &lt;/Grid&gt;
                    &lt;/Border&gt;
                &lt;/Grid&gt;
            &lt;/ControlTemplate&gt;
        &lt;/Setter.Value&gt;
    &lt;/Setter&gt;
&lt;/Style&gt;
&lt;Style x:Key=&quot;IsoDatePickerStyle&quot; TargetType=&quot;controls:DatePicker&quot;&gt;
    &lt;Setter Property=&quot;IsTabStop&quot; Value=&quot;False&quot;/&gt;
    &lt;Setter Property=&quot;Background&quot; Value=&quot;#FFFFFFFF&quot;/&gt;
    &lt;Setter Property=&quot;Padding&quot; Value=&quot;2&quot;/&gt;
    &lt;Setter Property=&quot;SelectionBackground&quot; Value=&quot;#FF444444&quot;/&gt;
    &lt;Setter Property=&quot;BorderBrush&quot;&gt;
        &lt;Setter.Value&gt;
            &lt;LinearGradientBrush EndPoint=&quot;.5,0&quot; StartPoint=&quot;.5,1&quot;&gt;
                &lt;GradientStop Color=&quot;#FF617584&quot; Offset=&quot;0&quot;/&gt;
                &lt;GradientStop Color=&quot;#FF718597&quot; Offset=&quot;0.375&quot;/&gt;
                &lt;GradientStop Color=&quot;#FF8399A9&quot; Offset=&quot;0.375&quot;/&gt;
                &lt;GradientStop Color=&quot;#FFA3AEB9&quot; Offset=&quot;1&quot;/&gt;
            &lt;/LinearGradientBrush&gt;
        &lt;/Setter.Value&gt;
    &lt;/Setter&gt;
    &lt;Setter Property=&quot;BorderThickness&quot; Value=&quot;1&quot;/&gt;
    &lt;Setter Property=&quot;Template&quot;&gt;
        &lt;Setter.Value&gt;
            &lt;ControlTemplate TargetType=&quot;controls:DatePicker&quot;&gt;
                &lt;Grid x:Name=&quot;Root&quot;&gt;
                    &lt;Grid.Resources&gt;
                        &lt;SolidColorBrush x:Key=&quot;DisabledBrush&quot; Color=&quot;#8CFFFFFF&quot;/&gt;
                        &lt;ControlTemplate x:Key=&quot;DropDownButtonTemplate&quot; TargetType=&quot;Button&quot;&gt;
                            &lt;Grid FlowDirection=&quot;LeftToRight&quot;&gt;
                                &lt;VisualStateManager.VisualStateGroups&gt;
                                    &lt;VisualStateGroup x:Name=&quot;CommonStates&quot;&gt;
                                        &lt;VisualStateGroup.Transitions&gt;
                                            &lt;VisualTransition GeneratedDuration=&quot;0&quot;/&gt;
                                            &lt;VisualTransition GeneratedDuration=&quot;0:0:0.1&quot; To=&quot;MouseOver&quot;/&gt;
                                            &lt;VisualTransition GeneratedDuration=&quot;0:0:0.1&quot; To=&quot;Pressed&quot;/&gt;
                                        &lt;/VisualStateGroup.Transitions&gt;
                                        &lt;VisualState x:Name=&quot;Normal&quot;/&gt;
                                        &lt;VisualState x:Name=&quot;MouseOver&quot;&gt;
                                            &lt;Storyboard&gt;
                                                &lt;ColorAnimation Duration=&quot;0&quot; To=&quot;#FF448DCA&quot; Storyboard.TargetProperty=&quot;(Border.Background).(SolidColorBrush.Color)&quot; Storyboard.TargetName=&quot;Background&quot;/&gt;
                                                &lt;ColorAnimationUsingKeyFrames BeginTime=&quot;0&quot; Duration=&quot;00:00:00.001&quot; Storyboard.TargetProperty=&quot;(Border.Background).(GradientBrush.GradientStops)[3].(GradientStop.Color)&quot; Storyboard.TargetName=&quot;BackgroundGradient&quot;&gt;
                                                    &lt;SplineColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#7FFFFFFF&quot;/&gt;
                                                &lt;/ColorAnimationUsingKeyFrames&gt;
                                                &lt;ColorAnimationUsingKeyFrames BeginTime=&quot;0&quot; Duration=&quot;00:00:00.001&quot; Storyboard.TargetProperty=&quot;(Border.Background).(GradientBrush.GradientStops)[2].(GradientStop.Color)&quot; Storyboard.TargetName=&quot;BackgroundGradient&quot;&gt;
                                                    &lt;SplineColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#CCFFFFFF&quot;/&gt;
                                                &lt;/ColorAnimationUsingKeyFrames&gt;
                                                &lt;ColorAnimationUsingKeyFrames BeginTime=&quot;0&quot; Duration=&quot;00:00:00.001&quot; Storyboard.TargetProperty=&quot;(Border.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)&quot; Storyboard.TargetName=&quot;BackgroundGradient&quot;&gt;
                                                    &lt;SplineColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#F2FFFFFF&quot;/&gt;
                                                &lt;/ColorAnimationUsingKeyFrames&gt;
                                            &lt;/Storyboard&gt;
                                        &lt;/VisualState&gt;
                                        &lt;VisualState x:Name=&quot;Pressed&quot;&gt;
                                            &lt;Storyboard&gt;
                                                &lt;ColorAnimationUsingKeyFrames BeginTime=&quot;0&quot; Duration=&quot;00:00:00.001&quot; Storyboard.TargetProperty=&quot;(Border.Background).(SolidColorBrush.Color)&quot; Storyboard.TargetName=&quot;Background&quot;&gt;
                                                    &lt;SplineColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#FF448DCA&quot;/&gt;
                                                &lt;/ColorAnimationUsingKeyFrames&gt;
                                                &lt;DoubleAnimationUsingKeyFrames BeginTime=&quot;0&quot; Duration=&quot;00:00:00.001&quot; Storyboard.TargetProperty=&quot;(UIElement.Opacity)&quot; Storyboard.TargetName=&quot;Highlight&quot;&gt;
                                                    &lt;SplineDoubleKeyFrame KeyTime=&quot;0&quot; Value=&quot;1&quot;/&gt;
                                                &lt;/DoubleAnimationUsingKeyFrames&gt;
                                                &lt;ColorAnimationUsingKeyFrames BeginTime=&quot;0&quot; Duration=&quot;00:00:00.001&quot; Storyboard.TargetProperty=&quot;(Border.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)&quot; Storyboard.TargetName=&quot;BackgroundGradient&quot;&gt;
                                                    &lt;SplineColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#EAFFFFFF&quot;/&gt;
                                                &lt;/ColorAnimationUsingKeyFrames&gt;
                                                &lt;ColorAnimationUsingKeyFrames BeginTime=&quot;0&quot; Duration=&quot;00:00:00.001&quot; Storyboard.TargetProperty=&quot;(Border.Background).(GradientBrush.GradientStops)[2].(GradientStop.Color)&quot; Storyboard.TargetName=&quot;BackgroundGradient&quot;&gt;
                                                    &lt;SplineColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#C6FFFFFF&quot;/&gt;
                                                &lt;/ColorAnimationUsingKeyFrames&gt;
                                                &lt;ColorAnimationUsingKeyFrames BeginTime=&quot;0&quot; Duration=&quot;00:00:00.001&quot; Storyboard.TargetProperty=&quot;(Border.Background).(GradientBrush.GradientStops)[3].(GradientStop.Color)&quot; Storyboard.TargetName=&quot;BackgroundGradient&quot;&gt;
                                                    &lt;SplineColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#6BFFFFFF&quot;/&gt;
                                                &lt;/ColorAnimationUsingKeyFrames&gt;
                                                &lt;ColorAnimationUsingKeyFrames BeginTime=&quot;0&quot; Duration=&quot;00:00:00.001&quot; Storyboard.TargetProperty=&quot;(Border.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)&quot; Storyboard.TargetName=&quot;BackgroundGradient&quot;&gt;
                                                    &lt;SplineColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#F4FFFFFF&quot;/&gt;
                                                &lt;/ColorAnimationUsingKeyFrames&gt;
                                            &lt;/Storyboard&gt;
                                        &lt;/VisualState&gt;
                                        &lt;VisualState x:Name=&quot;Disabled&quot;&gt;
                                            &lt;Storyboard&gt;
                                                &lt;DoubleAnimationUsingKeyFrames BeginTime=&quot;0&quot; Duration=&quot;00:00:00.001&quot; Storyboard.TargetProperty=&quot;(UIElement.Opacity)&quot; Storyboard.TargetName=&quot;DisabledVisual&quot;&gt;
                                                    &lt;SplineDoubleKeyFrame KeyTime=&quot;0&quot; Value=&quot;1&quot;/&gt;
                                                &lt;/DoubleAnimationUsingKeyFrames&gt;
                                            &lt;/Storyboard&gt;
                                        &lt;/VisualState&gt;
                                    &lt;/VisualStateGroup&gt;
                                &lt;/VisualStateManager.VisualStateGroups&gt;
                                &lt;Grid Background=&quot;#11FFFFFF&quot; HorizontalAlignment=&quot;Center&quot; Height=&quot;18&quot; Margin=&quot;0&quot; VerticalAlignment=&quot;Center&quot; Width=&quot;19&quot;&gt;
                                    &lt;Grid.ColumnDefinitions&gt;
                                        &lt;ColumnDefinition Width=&quot;20*&quot;/&gt;
                                        &lt;ColumnDefinition Width=&quot;20*&quot;/&gt;
                                        &lt;ColumnDefinition Width=&quot;20*&quot;/&gt;
                                        &lt;ColumnDefinition Width=&quot;20*&quot;/&gt;
                                    &lt;/Grid.ColumnDefinitions&gt;
                                    &lt;Grid.RowDefinitions&gt;
                                        &lt;RowDefinition Height=&quot;23*&quot;/&gt;
                                        &lt;RowDefinition Height=&quot;19*&quot;/&gt;
                                        &lt;RowDefinition Height=&quot;19*&quot;/&gt;
                                        &lt;RowDefinition Height=&quot;19*&quot;/&gt;
                                    &lt;/Grid.RowDefinitions&gt;
                                    &lt;Border x:Name=&quot;Highlight&quot; BorderBrush=&quot;#FF6DBDD1&quot; BorderThickness=&quot;1&quot; Grid.ColumnSpan=&quot;4&quot; CornerRadius=&quot;0,0,1,1&quot; Margin=&quot;-1&quot; Opacity=&quot;0&quot; Grid.Row=&quot;0&quot; Grid.RowSpan=&quot;4&quot;/&gt;
                                    &lt;Border x:Name=&quot;Background&quot; BorderBrush=&quot;#FFFFFFFF&quot; BorderThickness=&quot;1&quot; Background=&quot;#FF1F3B53&quot; Grid.ColumnSpan=&quot;4&quot; CornerRadius=&quot;.5&quot; Margin=&quot;0,-1,0,0&quot; Opacity=&quot;1&quot; Grid.Row=&quot;1&quot; Grid.RowSpan=&quot;3&quot;/&gt;
                                    &lt;Border x:Name=&quot;BackgroundGradient&quot; BorderBrush=&quot;#BF000000&quot; BorderThickness=&quot;1&quot; Grid.ColumnSpan=&quot;4&quot; CornerRadius=&quot;.5&quot; Margin=&quot;0,-1,0,0&quot; Opacity=&quot;1&quot; Grid.Row=&quot;1&quot; Grid.RowSpan=&quot;3&quot;&gt;
                                        &lt;Border.Background&gt;
                                            &lt;LinearGradientBrush EndPoint=&quot;.7,1&quot; StartPoint=&quot;.7,0&quot;&gt;
                                                &lt;GradientStop Color=&quot;#FFFFFFFF&quot; Offset=&quot;0&quot;/&gt;
                                                &lt;GradientStop Color=&quot;#F9FFFFFF&quot; Offset=&quot;0.375&quot;/&gt;
                                                &lt;GradientStop Color=&quot;#E5FFFFFF&quot; Offset=&quot;0.625&quot;/&gt;
                                                &lt;GradientStop Color=&quot;#C6FFFFFF&quot; Offset=&quot;1&quot;/&gt;
                                            &lt;/LinearGradientBrush&gt;
                                        &lt;/Border.Background&gt;
                                    &lt;/Border&gt;
                                    &lt;Rectangle Grid.ColumnSpan=&quot;4&quot; Grid.RowSpan=&quot;1&quot; StrokeThickness=&quot;1&quot;&gt;
                                        &lt;Rectangle.Fill&gt;
                                            &lt;LinearGradientBrush EndPoint=&quot;0.3,-1.1&quot; StartPoint=&quot;0.46,1.6&quot;&gt;
                                                &lt;GradientStop Color=&quot;#FF4084BD&quot;/&gt;
                                                &lt;GradientStop Color=&quot;#FFAFCFEA&quot; Offset=&quot;1&quot;/&gt;
                                            &lt;/LinearGradientBrush&gt;
                                        &lt;/Rectangle.Fill&gt;
                                        &lt;Rectangle.Stroke&gt;
                                            &lt;LinearGradientBrush EndPoint=&quot;0.48,-1&quot; StartPoint=&quot;0.48,1.25&quot;&gt;
                                                &lt;GradientStop Color=&quot;#FF494949&quot;/&gt;
                                                &lt;GradientStop Color=&quot;#FF9F9F9F&quot; Offset=&quot;1&quot;/&gt;
                                            &lt;/LinearGradientBrush&gt;
                                        &lt;/Rectangle.Stroke&gt;
                                    &lt;/Rectangle&gt;
                                    &lt;Path Grid.ColumnSpan=&quot;4&quot; Grid.Column=&quot;0&quot; Data=&quot;M11.426758,8.4305077 L11.749023,8.4305077 L11.749023,16.331387 L10.674805,16.331387 L10.674805,10.299648 L9.0742188,11.298672 L9.0742188,10.294277 C9.4788408,10.090176 9.9094238,9.8090878 10.365967,9.4510155 C10.82251,9.0929432 11.176106,8.7527733 11.426758,8.4305077 z M14.65086,8.4305077 L18.566387,8.4305077 L18.566387,9.3435936 L15.671368,9.3435936 L15.671368,11.255703 C15.936341,11.058764 16.27293,10.960293 16.681133,10.960293 C17.411602,10.960293 17.969301,11.178717 18.354229,11.615566 C18.739157,12.052416 18.931622,12.673672 18.931622,13.479336 C18.931622,15.452317 18.052553,16.438808 16.294415,16.438808 C15.560365,16.438808 14.951641,16.234707 14.468243,15.826504 L14.881817,14.929531 C15.368796,15.326992 15.837872,15.525723 16.289043,15.525723 C17.298809,15.525723 17.803692,14.895514 17.803692,13.635098 C17.803692,12.460618 17.305971,11.873379 16.310528,11.873379 C15.83071,11.873379 15.399232,12.079271 15.016094,12.491055 L14.65086,12.238613 z&quot; Fill=&quot;#FF2F2F2F&quot; HorizontalAlignment=&quot;Center&quot; Margin=&quot;4,3,4,3&quot; Grid.Row=&quot;1&quot; Grid.RowSpan=&quot;3&quot; RenderTransformOrigin=&quot;0.5,0.5&quot; Stretch=&quot;Fill&quot; VerticalAlignment=&quot;Center&quot;/&gt;
                                    &lt;Ellipse Grid.ColumnSpan=&quot;4&quot; Fill=&quot;#FFFFFFFF&quot; HorizontalAlignment=&quot;Center&quot; Height=&quot;3&quot; StrokeThickness=&quot;0&quot; VerticalAlignment=&quot;Center&quot; Width=&quot;3&quot;/&gt;
                                    &lt;Border x:Name=&quot;DisabledVisual&quot; BorderBrush=&quot;#B2FFFFFF&quot; BorderThickness=&quot;1&quot; Grid.ColumnSpan=&quot;4&quot; CornerRadius=&quot;0,0,.5,.5&quot; Opacity=&quot;0&quot; Grid.Row=&quot;0&quot; Grid.RowSpan=&quot;4&quot;/&gt;
                                &lt;/Grid&gt;
                            &lt;/Grid&gt;
                        &lt;/ControlTemplate&gt;
                    &lt;/Grid.Resources&gt;
                    &lt;Grid.ColumnDefinitions&gt;
                        &lt;ColumnDefinition Width=&quot;*&quot;/&gt;
                        &lt;ColumnDefinition Width=&quot;Auto&quot;/&gt;
                    &lt;/Grid.ColumnDefinitions&gt;
                    &lt;VisualStateManager.VisualStateGroups&gt;
                        &lt;VisualStateGroup x:Name=&quot;CommonStates&quot;&gt;
                            &lt;VisualState x:Name=&quot;Normal&quot;/&gt;
                            &lt;VisualState x:Name=&quot;Disabled&quot;&gt;
                                &lt;Storyboard&gt;
                                    &lt;DoubleAnimation Duration=&quot;0&quot; To=&quot;1&quot; Storyboard.TargetProperty=&quot;Opacity&quot; Storyboard.TargetName=&quot;DisabledVisual&quot;/&gt;
                                &lt;/Storyboard&gt;
                            &lt;/VisualState&gt;
                        &lt;/VisualStateGroup&gt;
                        &lt;VisualStateGroup x:Name=&quot;ValidationStates&quot;&gt;
                            &lt;VisualState x:Name=&quot;Valid&quot;/&gt;
                            &lt;VisualState x:Name=&quot;InvalidUnfocused&quot;&gt;
                                &lt;Storyboard&gt;
                                    &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;Visibility&quot; Storyboard.TargetName=&quot;ValidationErrorElement&quot;&gt;
                                        &lt;DiscreteObjectKeyFrame KeyTime=&quot;0&quot;&gt;
                                            &lt;DiscreteObjectKeyFrame.Value&gt;
                                                &lt;Visibility&gt;Visible&lt;/Visibility&gt;
                                            &lt;/DiscreteObjectKeyFrame.Value&gt;
                                        &lt;/DiscreteObjectKeyFrame&gt;
                                    &lt;/ObjectAnimationUsingKeyFrames&gt;
                                &lt;/Storyboard&gt;
                            &lt;/VisualState&gt;
                            &lt;VisualState x:Name=&quot;InvalidFocused&quot;&gt;
                                &lt;Storyboard&gt;
                                    &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;Visibility&quot; Storyboard.TargetName=&quot;ValidationErrorElement&quot;&gt;
                                        &lt;DiscreteObjectKeyFrame KeyTime=&quot;0&quot;&gt;
                                            &lt;DiscreteObjectKeyFrame.Value&gt;
                                                &lt;Visibility&gt;Visible&lt;/Visibility&gt;
                                            &lt;/DiscreteObjectKeyFrame.Value&gt;
                                        &lt;/DiscreteObjectKeyFrame&gt;
                                    &lt;/ObjectAnimationUsingKeyFrames&gt;
                                    &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;IsOpen&quot; Storyboard.TargetName=&quot;validationTooltip&quot;&gt;
                                        &lt;DiscreteObjectKeyFrame KeyTime=&quot;0&quot;&gt;
                                            &lt;DiscreteObjectKeyFrame.Value&gt;
                                                &lt;System:Boolean&gt;True&lt;/System:Boolean&gt;
                                            &lt;/DiscreteObjectKeyFrame.Value&gt;
                                        &lt;/DiscreteObjectKeyFrame&gt;
                                    &lt;/ObjectAnimationUsingKeyFrames&gt;
                                &lt;/Storyboard&gt;
                            &lt;/VisualState&gt;
                        &lt;/VisualStateGroup&gt;
                    &lt;/VisualStateManager.VisualStateGroups&gt;
                    &lt;System_Windows_Controls_Primitives:DatePickerTextBox Background=&quot;White&quot; x:Name=&quot;TextBox&quot; BorderBrush=&quot;{TemplateBinding BorderBrush}&quot; BorderThickness=&quot;{TemplateBinding BorderThickness}&quot; Grid.Column=&quot;0&quot; Padding=&quot;{TemplateBinding Padding}&quot; SelectionBackground=&quot;{TemplateBinding SelectionBackground}&quot; Style=&quot;{StaticResource IsoDatePickerTextBoxStyle}&quot;/&gt;
                    &lt;Border x:Name=&quot;ValidationErrorElement&quot; BorderBrush=&quot;#FFDB000C&quot; BorderThickness=&quot;1&quot; Grid.Column=&quot;0&quot; CornerRadius=&quot;1&quot; Visibility=&quot;Collapsed&quot;&gt;
                        &lt;ToolTipService.ToolTip&gt;
                            &lt;ToolTip x:Name=&quot;validationTooltip&quot; DataContext=&quot;{Binding RelativeSource={RelativeSource TemplatedParent}}&quot; Placement=&quot;Right&quot; PlacementTarget=&quot;{Binding ElementName=TextBox}&quot; Template=&quot;{StaticResource CommonValidationToolTipTemplate}&quot;&gt;
                                &lt;ToolTip.Triggers&gt;
                                    &lt;EventTrigger RoutedEvent=&quot;Canvas.Loaded&quot;&gt;
                                        &lt;BeginStoryboard&gt;
                                            &lt;Storyboard&gt;
                                                &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;IsHitTestVisible&quot; Storyboard.TargetName=&quot;validationTooltip&quot;&gt;
                                                    &lt;DiscreteObjectKeyFrame KeyTime=&quot;0&quot;&gt;
                                                        &lt;DiscreteObjectKeyFrame.Value&gt;
                                                            &lt;System:Boolean&gt;true&lt;/System:Boolean&gt;
                                                        &lt;/DiscreteObjectKeyFrame.Value&gt;
                                                    &lt;/DiscreteObjectKeyFrame&gt;
                                                &lt;/ObjectAnimationUsingKeyFrames&gt;
                                            &lt;/Storyboard&gt;
                                        &lt;/BeginStoryboard&gt;
                                    &lt;/EventTrigger&gt;
                                &lt;/ToolTip.Triggers&gt;
                            &lt;/ToolTip&gt;
                        &lt;/ToolTipService.ToolTip&gt;
                        &lt;Grid Background=&quot;Transparent&quot; HorizontalAlignment=&quot;Right&quot; Height=&quot;12&quot; Margin=&quot;1,-4,-4,0&quot; VerticalAlignment=&quot;Top&quot; Width=&quot;12&quot;&gt;
                            &lt;Path Data=&quot;M 1,0 L6,0 A 2,2 90 0 1 8,2 L8,7 z&quot; Fill=&quot;#FFDC000C&quot; Margin=&quot;1,3,0,0&quot;/&gt;
                            &lt;Path Data=&quot;M 0,0 L2,0 L 8,6 L8,8&quot; Fill=&quot;#FFFFFF&quot; Margin=&quot;1,3,0,0&quot;/&gt;
                        &lt;/Grid&gt;
                    &lt;/Border&gt;
                    &lt;Button x:Name=&quot;Button&quot; BorderBrush=&quot;{TemplateBinding BorderBrush}&quot; BorderThickness=&quot;{TemplateBinding BorderThickness}&quot; Grid.Column=&quot;1&quot; Foreground=&quot;{TemplateBinding Foreground}&quot; Margin=&quot;2,0,2,0&quot; Template=&quot;{StaticResource DropDownButtonTemplate}&quot; Width=&quot;20&quot;/&gt;
                    &lt;Grid x:Name=&quot;DisabledVisual&quot; Grid.ColumnSpan=&quot;2&quot; IsHitTestVisible=&quot;False&quot; Opacity=&quot;0&quot;&gt;
                        &lt;Grid.ColumnDefinitions&gt;
                            &lt;ColumnDefinition Width=&quot;*&quot;/&gt;
                            &lt;ColumnDefinition Width=&quot;Auto&quot;/&gt;
                        &lt;/Grid.ColumnDefinitions&gt;
                        &lt;Rectangle Fill=&quot;#8CFFFFFF&quot; RadiusY=&quot;1&quot; RadiusX=&quot;1&quot;/&gt;
                        &lt;Rectangle Grid.Column=&quot;1&quot; Fill=&quot;#8CFFFFFF&quot; Height=&quot;18&quot; Margin=&quot;2,0,2,0&quot; RadiusY=&quot;1&quot; RadiusX=&quot;1&quot; Width=&quot;19&quot;/&gt;
                    &lt;/Grid&gt;
                    &lt;Popup x:Name=&quot;Popup&quot;/&gt;
                &lt;/Grid&gt;
            &lt;/ControlTemplate&gt;
        &lt;/Setter.Value&gt;
    &lt;/Setter&gt;
&lt;/Style&gt;
</pre>
<p>You then reference this style in your DatePicker control as follows:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;controls:DatePicker Style=&quot;{StaticResource IsoDatePickerStyle}&quot; /&gt;
</pre>
<p>And there you go, a several hundred line solution to a one line problem.  For shame Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikecousins.com/localizing-a-silverlight-datepicker-control-a-study-in-pain-thresholds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
