Thursday, August 21, 2014

WPF - Setting Up Themes

Forcing WPF to use a specific Windows theme | I Got Rhythm

At a client recently, we developed our WPF application under Windows 7, tested it under Windows XP and everything looked great. 
Then it was deployed.
As it turns out, one of the deployments was over a Citrix server that forced applications to run under Classic mode. 
Those of you who have worked with various operating systems over the years will know what I'm talking about. Classic mode isn't quite classic, unless you are one of the few who think playing bar pong on an 84" TV is superior to playing one of the more dimensional games. Or maybe one of the few who like to get up and change the TV channel rather than finding the remote. Or one of the .... (you get the idea)
While most things converted well, Tabs do not. In WPF, we have these beautiful tabs that look fresh but over in Classic mode, they have the look and feel of, well, Classic Windows 95 and VB 6 applications.
The application was demo'd to the client under Windows 7 but deployed under Windows Classic so all of a sudden, the user's experience went from "wow, that looks great" to "what kind of crap did you give me".
But all was not lost. I found this very old (2006) but super useful post about forcing WPF to use a theme. In the end, it was as simple as adding a forced reference to PresentationFramework.Aero in the solution and adding

  <ResourceDictionary.MergedDictionaries>

        <ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />

    </ResourceDictionary.MergedDictionaries

to the Resource dictionary (or to the Application.xaml file).

Voila our tabs went from crap to zap!

To make the experience even more sweet, that post from 2006? The blog is still being updated today (a lot more posts than here recently as well). Well done, Aelij Arbel, well done and Thank you!

 

No comments: