2010-01-16 45 views
36

有什么办法让WPF应用程序看起来像在Windows 7上运行,即使它运行在XP上?我正在寻找一些可以粘贴的主题。我知道Codeplex上的主题项目(http://www.codeplex.com/wpfthemes),但它缺少DataGrid的支持,这是我非常需要的。我在想也许Windows 7主题只是一个简单的端口,或者已经存在于某个文件中。你有任何信息(即使它是坏消息),将不胜感激。Windows 7的WPF主题?

更新

使用@Lars Truijens想法,我能够获得Windows 7的外观的主要控件,但遗憾的是它没有为WPF工具包DataGrid控制,我需要工作。

DataGrid看起来是这个Aero主题

Windows XP-look DataGrid

DataGrid应该这个样子

Windows 7-look DataGrid

所以,我仍然在寻找一个SOLUT如果任何人有任何想法,就解决这个问题。也许有人已经构建了涵盖WPF工具包控件的Aero主题的扩展?再次,你有任何信息非常感谢。

更新2 - 问题已解决!

要让Aero主题与WPF Toolkit控件配合使用,您只需添加第二个Aero字典,以便您的App.xaml现在看起来像这样。

<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> 

另外,我建议打开网格线断在DataGrid控制(因为它们看起来可怕):

<DataGrid GridLinesVisibility="None" ...> 
+1

你的更新2拯救了我的生命! 感谢您发布更新! – Sonosar 2013-06-16 20:40:13

回答

46

WPF配备在所有的Windows版本的标准Windows主题。例如,你可以有Aero主题(其中Vista和Windows 7中使用)在Windows XP上执行下列步骤:

  1. 添加PresentationFramework.Aero到应用程序的引用列表作为需要
  2. 编辑您的应用程序。 XAML

从这个

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

这个

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

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

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

其他下面的替代品。确保将相应的程序集作为需求添加到应用程序的参考列表中。

<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"/> 
+0

+1谢谢!我会很快尝试这个。 – devuxer 2010-01-16 17:05:18

+0

我终于有机会尝试一下了。它确实有效,但正如我担心的那样,不是用于DataGrid控件。请检查我的更新。 'DataGrid'w/Aero主题的外观仍然是XP。 – devuxer 2010-01-19 21:41:30

+0

好吧,我只是偶然发现了一个DataGrid问题的解决方案:''ResourceDictionary Source =“pack:// application:,,,/WPFToolkit; component/Themes/Aero.NormalColor.xaml”/>'。我也会更新我的问题。 – devuxer 2010-01-19 23:21:11

4

一个除了拉斯的答案,DanM的更新:

部署时,则必须添加航空DLL来安装目录。

您可以通过转到您添加到参考文献并设置CopyLocal=True的PresentationFramework.Aero的属性来完成此操作。然后,你将不得不去使用你正在使用的任何部署工具(我喜欢WIX ...)并将其添加到已部署文件的列表中。

+1

我不要认为PresentationFramework.aero需要部署。根据http://msdn.microsoft.com/en-us/library/ff462634.aspx它包含在.NET框架中。 – 2011-11-17 21:59:03

+1

如果使用完整引用,则不需要部署PresentationFramework.aero。在这里看到我的答案:http://stackoverflow.com/questions/8175410/wpf-when-using-presentationframework-aero-do-i-need-to-set-copy-local-to-tru/8185946#8185946 – 2011-11-18 16:59:38