WPF程序在Windows 7下应用Windows 8主题

Posted Yang-Fei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF程序在Windows 7下应用Windows 8主题相关的知识,希望对你有一定的参考价值。

这篇博客介绍如何在Windows 7下应用Windows 8的主题。

首先我们先看一个很常见的场景,同样的WPF程序(样式未重写)在不同的操作系统上展示会有些不同。这是为什么呢?WPF程序启动时会加载与操作系统对应的主题。下面将列出常见的OS主题与WPF主题的关系。

针对不同操作系统的主题,WPF程序会加载不同的主题assembly。这样就形成了同样的XAML代码在不同的OS中展示效果。

回到这篇博客的主题,为Windows 7下的WPF程序应用Windows 8主题。通过上面的表格,可以知道,如果我们能够给WPF程序应用上PresentationFramework.Aero2.dll的主题就可以了。

1. WPF程序中添加PresentationFramework.Aero2.dll引用;

2. 将PresentationFramework.Aero2.dll的Copy Local属性设置为True;

3. 在App.xaml中添加下面的Resource;

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

此时在Windows 7环境下运行应用Windows 8主题的程序,结果如下:

 

PresentationFramework.Aero Theme相关的assembly可以在 C:\\Windows\\Microsoft.NET\\assembly\\GAC_MSIL目录下找到.

通过ILSpy获得WPF不同主题assembly对应的样式字典,

感谢您的阅读!

以上是关于WPF程序在Windows 7下应用Windows 8主题的主要内容,如果未能解决你的问题,请参考以下文章

Windows 7 上的 WPF 应用程序只有在按下 CTRL 键后才能正常响应

让 WPF 应用程序看起来像 Metro 风格,即使在 Windows 7 中? (窗口 Chrome / 主题 / 主题)

将 win32 托管到 wpf 在 Windows 7 中不起作用

带有触摸功能的 Windows 7 上的 WPF:隐藏触摸光标

为啥我的 CornerRadius 的 WPF 样式未在 Windows 7 中应用?

将应用程序图标和窗口图标设置为 Windows 7 友好图标