The feedback from the Silverlight 4 application themes released and the latest in process have been overwhelmingly toward the positive.  We appreciate the feedback and hopefully you appreciate the transparency in the process.  As a developer I want my fellow brethren to appreciate good design and use it whenever possible … even as a default if you don’t have designers on board.

In the initial release we had some issues getting the RIA Services ones out at the same time but we’ve got those finished now for Silverlight 4 Business Application Template. 

Download the refreshed Silverlight 4 themes (inlcuding RIA Services templates) here.

NOTE: If the page still says version 1.0, then refresh a while or wait a bit.  Seems our servers have been having a bit of caching issues lately.

At the link above you’ll find 3 files to download:

  • README_FIRST.txt – please read this :-) but basically I’m writing the same thing here.
  • SL4Themes-templates.zip – this includes a folder for Expression Blend and Visual Studio templates.  The VS folder also has a sub-folder for the RIA Services templates.
  • SL4Themes-rawassets.zip – this is another (optional) zip that includes the resource dictionaries for each template on their own without any Silverlight project.

We had an issue with the VSIX format (VSIX is the community installer format for Visual Studio to make deployment of things like templates a bit easier) and the RIA Services templates, so for now it is a manual copy process (see the README_FIRST file for location).  Thanks to Corrina, Tsitsi and Deepesh for their help in refreshing these templates!

ETA on the new template will be a few weeks.  I’ll post updates of the progress likely on my Twitter feed.

Hope this helps!


Today we released a service update for Silverlight 4.  This is a minor release that addresses some items found immediately after release that have now completed our test passes with those who reported them.  Most of the items found won’t affect all users, but media developers will want to get this update for their applications and encourage their users to upgrade.

This update (4.0.50524.0) addresses a few media-related items found by some of our media customers.  A few items were serviced for DRM users as well as 2nd monitor usage for media on the Mac platform.  If you are developing media solutions (or are a media application user), you’ll want to upgrade to this release and encourage your users to as well.  You can read more about the key specific issues in KB982926.

For Developers

If you are a developer and want to get the update, all you need is to update the developer runtime.  There is no tooling or SDK update for this release.  You can download the updated developer runtime here: Windows developer runtime or Mac developer runtime.  Once installed, your new Silverlight 4 applications will target this platform version.  No other changes to your tools are required.  On existing applications if you want your users to ensure they have this latest version, please ensure you update your <object> tag to increment the minRuntimeVersion attribute to the appropriate version (4.0.50524.0).

What about <fill-in-the-feature-issue-you-found>?  Why isn’t that in this update?!

Some may wonder how fixes get determined to be in which releases.  You may be asking hey I reported XYZ right after release and why isn’t it in this update!?  Our team, like other large teams, operates on a schedule of planned (and sometimes unplanned) releases. 

We have general timeframes for service releases in the event we need them.  Sometimes those planned cycles aren’t needed and the planned release is skipped.  This helps better plan actual resources, etc.  When an issue is identified from any type of customer, it is evaluated by the ‘triad’ for that release (a triad represents leads for program management, dev, and test).  Things like security issues are given obvious priority versus things that aren’t regressions or are new features.

Once that list of work items is determined (based on criteria set by the triad) the work begins.  This includes development, testing, compliance, security passes, etc.  Each time a change to the plan occurs, this process gets reset.  So once a set of work items is approved and determined to be the release it usually doesn’t change unless something significant.  Of course there are many other factors that are involved here and I’m generalizing.

Back to your question of where are my reported changes?  If they aren’t in this release, they are still being evaluated for the next cycle (or perhaps already being worked on and solved).  Once I have more information on future releases I’m happy to share them.

Hope this helps!

Building on the positive feedback of the previous Silverlight application themes released last month (Cosmopolitan, Accent Color, and Windows) the design team is working on another theme targeting business application developers.  We don’t yet have an ‘official’ name for this one yet (and to mitigate the confusion of internal code names again, I’ll spare you the code name), but I wanted to put up a preview.  We’re turning this theme around FAST and I wanted to throw it out here in an initial iteration for preview and comment.  This is the ‘dark’ version of the theme and there will be a light version as well.  This represents only the core control set, but like the others will include other SDK controls as well.

I think it is important to understand the goals as well here so that you don’t wonder hey, we need more pixel-shader-gradient-creating-twhirly-things-with-datatype-binding-and-cascading-selector-path-listboxes in themes!!!  In this effort we tasked the designers to build upon the platform of the previous themes and gave them these goals:

  • Should be ‘brandable’
  • Work with navigation-style Silverlight applications
  • Easily tweakable
  • Will be used most likely by developers with little customization
  • Professional, clean for customer-based line-of-business applications
  • Modern, expressive
  • Wicked cool

It’s hard to mix all of those requirements into something that will uniformly appeal to everyone.  Given that, here’s the iteration step we are at:

Silverlight Application Theme

(click the above image for a full resolution image to see some detail better)

What do you think?  We’re hoping to also be providing some font-alternatives (working through various licensing now) so that you could use different/new embeddable fonts. 

We are moving quickly on this time around and there is little time for change beyond this week.  If you feel strongly about something, share your feedback here ASAP…the designers are listening.  We can’t (and won’t) promise that what you suggest will be implemented (again, trying to please everyone here) but we do want to hear feedback from all sorts of folks who would consider using these professionally designed application themes and styles.

Leave your comments below!

A while back immediately after MIX10 I started messing with Microsoft Translator APIs for Silverlight applications.  I also got some people asking about Windows Phone 7 stuff and messed around with that a bit.  Here’s some post for reference:

In talking with the Translator team following MIX (where they announced they were working on a Silverlight class library for the API.  It was good to interact with their team to understand their direction and provide some feedback on how they were approaching it.  In the meantime, with their direction, I had started working on a simple wrapper for myself while writing the Translator for Seesmic plugin I was writing.  I’ve received a few inquiries on Translator so I thought I’d post my library here for you to see/use.

NOTE: This comes with a ‘works on my machine’ warranty – which means no warranty.  There are some things that should be done to make this a more proper async API (noted below).  You will also need your own Microsoft Translator application ID (API key) in order to use it.

The API is fairly simple and maps to some of the functions of the Translator HTTP-based API.  The following methods are implemented:

  • Detect
  • GetLanguagesForSpeak
  • GetLanguagesForTranslate
  • Speak
  • Translate

You’ll notice that not all the API endpoints are implemented.  Honestly I picked what I was using myself but also what I think would be most useful to application developers. 

Because this is a service, the wrapper implements the above functions as asynchronous methods, so you will see:

  • DetectAsync
  • GetLanguagesForSpeakAsync
  • GetLanguagesForTranslateAsync
  • SpeakAsync
  • TranslateAsync

Clever naming, huh?  It’s very simple to use and here’s a snippet of a BASIC translation implementation:

   1: using System;
<pre class="alteven"><span id="lnum2" class="lnum">   2:</span> <span class="kwrd">using</span> System.Windows;</pre>
<pre class="alteven"><span id="lnum3" class="lnum">   3:</span> <span class="kwrd">using</span> System.Windows.Controls;</pre>
<pre class="alteven"><span id="lnum4" class="lnum">   4:</span> <span class="kwrd">using</span> TimHeuer.Silverlight;</pre>
<pre class="alteven"><span id="lnum5" class="lnum">   5:</span>  </pre>
<pre class="alteven"><span id="lnum6" class="lnum">   6:</span> <span class="kwrd">namespace</span> SilverlightApplication147</pre>
<pre class="alteven"><span id="lnum7" class="lnum">   7:</span> {</pre>
<pre class="alteven"><span id="lnum8" class="lnum">   8:</span>     <span class="kwrd">public</span> <span class="kwrd">partial</span> <span class="kwrd">class</span> MainPage : UserControl</pre>
<pre class="alteven"><span id="lnum9" class="lnum">   9:</span>     {</pre>
<pre class="alteven"><span id="lnum10" class="lnum">  10:</span>         TranslatorClient _translator;</pre>
<pre class="alteven"><span id="lnum11" class="lnum">  11:</span>  </pre>
<pre class="alteven"><span id="lnum12" class="lnum">  12:</span>         <span class="kwrd">public</span> MainPage()</pre>
<pre class="alteven"><span id="lnum13" class="lnum">  13:</span>         {</pre>
<pre class="alteven"><span id="lnum14" class="lnum">  14:</span>             InitializeComponent();</pre>
<pre class="alteven"><span id="lnum15" class="lnum">  15:</span>  </pre>
<pre class="alteven"><span id="lnum16" class="lnum">  16:</span>             _translator = <span class="kwrd">new</span> TranslatorClient(<span class="str">"YOUR_APP_ID"</span>);</pre>
<pre class="alteven"><span id="lnum17" class="lnum">  17:</span>             _translator.TranslateCompleted += <span class="kwrd">new</span> EventHandler&lt;TranslateCompletedEventArgs&gt;(OnTranslateCompleted);</pre>
<pre class="alteven"><span id="lnum18" class="lnum">  18:</span>         }</pre>
<pre class="alteven"><span id="lnum19" class="lnum">  19:</span>  </pre>
<pre class="alteven"><span id="lnum20" class="lnum">  20:</span>         <span class="kwrd">void</span> OnTranslateCompleted(<span class="kwrd">object</span> sender, TranslateCompletedEventArgs e)</pre>
<pre class="alteven"><span id="lnum21" class="lnum">  21:</span>         {</pre>
<pre class="alteven"><span id="lnum22" class="lnum">  22:</span>             Dispatcher.BeginInvoke(() =&gt;</pre>
<pre class="alteven"><span id="lnum23" class="lnum">  23:</span>                 {</pre>
<pre class="alteven"><span id="lnum24" class="lnum">  24:</span>                     MessageBox.Show(e.TranslatedText);</pre>
<pre class="alteven"><span id="lnum25" class="lnum">  25:</span>                 });</pre>
<pre class="alteven"><span id="lnum26" class="lnum">  26:</span>         }</pre>
<pre class="alteven"><span id="lnum27" class="lnum">  27:</span>  </pre>
<pre class="alteven"><span id="lnum28" class="lnum">  28:</span>         <span class="kwrd">private</span> <span class="kwrd">void</span> TranslateButton_Click(<span class="kwrd">object</span> sender, RoutedEventArgs e)</pre>
<pre class="alteven"><span id="lnum29" class="lnum">  29:</span>         {</pre>
<pre class="alteven"><span id="lnum30" class="lnum">  30:</span>             <span class="rem">// if you needed to detect the source language first you would run DetectAsync to get the Source Language</span></pre>
<pre class="alteven"><span id="lnum31" class="lnum">  31:</span>             <span class="rem">// below is an example of TranslateAsync("Du bist wie eine Blume", "de", "en")</span></pre>
<pre class="alteven"><span id="lnum32" class="lnum">  32:</span>             _translator.TranslateAsync(TextToTranslateTextBox.Text, SourceLanguageTextBox.Text, TargetLanguageTextBox.Text);</pre>
<pre class="alteven"><span id="lnum33" class="lnum">  33:</span>         }</pre>
<pre class="alteven"><span id="lnum34" class="lnum">  34:</span>     }</pre>
<pre class="alteven"><span id="lnum35" class="lnum">  35:</span> }</pre>

So that’s it.  What are the plans here?  We have been exploring shipping an official translator extension as a part of the Silverlight Toolkit perhaps if folks find it useful.  As I mentioned there are a few things that should probably be changed in this library here, namely making the event arguments be AsyncEventArgs to better match what they are with the Silverlight networking stacks, etc.

I also was messing around with the InstallShield Limited Edition that comes with Visual Studio 2010 so I wrapped all these into an installer for easier deployment (it also includes the source) that you can get here: TimHeuerTranslatorClientSetup.exe

Hope this helps and let me know if you have feedback!

June 1st is here…time for an updated Windows 7 Smashing Magazine theme pack!

Hockey - Slapshot

The June themes seem to be focuses on 'summer' things.  So here is your June 2010 Windows 7 Theme Packs for wallpapers – unfiltered and uncensored – about 55 wallpapers in all.

For details on these and to see past ones, visit the Smashing Magazine Windows 7 Theme information for the specifications I used for the theme pack as well as previous themes.  Want to participate and submit yours?  Join in!


This work is licensed under a Creative Commons Attribution By license.