Windows 7 theme for WPF?

41,238

Solution 1

WPF comes with the standard Windows themes on all Windows versions. For example, you can have the Aero theme (which Vista and Windows 7 use) on Windows XP with the following steps:

  1. Add PresentationFramework.Aero to your application's references list as a requires
  2. Edit your App.xaml

from this

<Application.Resources>
  <!-- Your stuff here -->
</Application.Resources>

to this

<Application.Resources>
  <ResourceDictionary>
    <!-- Put your stuff here instead -->

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

Source: http://mrpmorris.blogspot.com/2008/05/using-vista-aero-theme-in-xp-wpf-apps.html

Other alternatives below. Be sure to add the corresponding assembly to your application's reference list as a requires.

<ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/>
<ResourceDictionary Source="/PresentationFramework.Classic;component/themes/Classic.xaml"/>
<ResourceDictionary Source="/PresentationFramework.Royale;component/themes/Royale.NormalColor.xaml"/>
<ResourceDictionary Source="/PresentationFramework.Luna.Homestead;component/themes/Luna.Homestead.xaml"/>
<ResourceDictionary Source="/PresentationFramework.Luna.Metallic;component/themes/Luna.Metallic.xaml"/>
<ResourceDictionary Source="/PresentationFramework.Zune;component/themes/Zune.NormalColor.xaml"/>

Solution 2

One addition to Lars' answer and DanM's update:

When deploying, you must add the aero Dll to the installation dir.

You can do it by going to the properties of PresentationFramework.Aero you added to the references and setting CopyLocal=True . Then, you'll have to go to whatever deployment tool you're using (I love WIX...) and add it to the list of deployed files.

Share:
41,238
devuxer
Author by

devuxer

Updated on July 09, 2022

Comments

  • devuxer
    devuxer almost 2 years

    Is there any way to make a WPF app look like it's running on Windows 7 even if it's running on XP? I'm looking for some kind of theme I can just paste in. I'm aware of the themes project on Codeplex (https://archive.codeplex.com/?p=wpfthemes), but it lacks support for DataGrid, which is something I critically need. I was thinking maybe the Windows 7 theme would just be an easy port, or exists in some file somewhere already.


    Update

    Using @Lars Truijens idea, I was able to get the Windows 7 look for the major controls, but unfortunately it did not work for the WPF Toolkit DataGrid control, which I need.

    DataGrid looks like this with Aero theme

    Windows XP-look DataGrid

    DataGrid should look like this

    Windows 7-look DataGrid

    So, I'm still looking for a solution to this problem if anyone has any ideas. Maybe someone has built an extension to the Aero theme that covers the WPF toolkit controls? Again, any information you have is much appreciated.


    Update 2 - DataGrid Problem solved!

    To get the Aero theme to work with the DataGrid or any other WPF Toolkit controls, you just need to add a second Aero dictionary, so your App.xaml should now look like this.

    <Application.Resources>
        ...
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary
                    Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
                <ResourceDictionary
                    Source="pack://application:,,,/WPFToolkit;component/Themes/Aero.NormalColor.xaml" />
                ...
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    

    Also, I would recommend turning the gridlines off in your DataGrid controls (because they look horrible):

    <DataGrid GridLinesVisibility="None" ...>
    
  • devuxer
    devuxer over 14 years
    I finally got a chance to try this out. It does work, but as I feared, not for the DataGrid control. Please check out my update. The look of the DataGrid w/ Aero theme is still XP.
  • devuxer
    devuxer over 14 years
    Well sweet, I just stumbled upon a solution to the DataGrid problem: <ResourceDictionary Source="pack://application:,,,/WPFToolkit;component/Themes/A‌​ero.NormalColor.xaml‌​" />. I'll update my question as well.
  • Helge Klein
    Helge Klein over 12 years
    I do not think PresentationFramework.aero needs to be deployed. According to msdn.microsoft.com/en-us/library/ff462634.aspx it is included in the .NET framework.
  • Helge Klein
    Helge Klein over 12 years
    PresentationFramework.aero does not need to be deployed if a full reference is used. See my answer here: stackoverflow.com/questions/8175410/…
  • Helge Klein
    Helge Klein over 12 years
    You should convert the dynamic reference into a full reference or else you need to deploy PresentationFramework.aero. See my answer here: stackoverflow.com/questions/8175410/…
  • mrid
    mrid over 5 years
    it gives me FileNotFoundException: Could not load file or assembly 'PresentationFramework.Aero