为什么WPF在不同版本的Windows上呈现不同?

Mat*_*don 5 wpf rendering

我读到WPF使用DirectX来执行其渲染,它不依赖于WinForms用于渲染控件的恐龙库.

所以我使用WPF创建了我的表示层,它看起来应该在Win8下.

然后我将项目部署到Windows Server 2003 ...以发现我漂亮的小自定义消息框看起来非常像WinForms,有点笨重; 按钮控件非常类似于WinForms控件,扩展器控件不再显示为带圆圈的^箭头,看起来像是在1998年绘制的(图片上的^箭头位于一个丑陋的方形平面按钮上,当鼠标悬停在它上面时弹出) .

来自C#2010圣经中的Pro WPF:

WPF的部分承诺是您不必担心特定硬件的细节和特性.WPF足够智能,可以在可能的情况下使用硬件优化,但它具有所有内容的软件回退.因此,如果您在具有传统视频卡的计算机上运行WPF应用程序,该界面仍将以您设计的方式显示.

那么,这是谎言吗?对我而言,因为它不像我设计的那样出现.

如果没有,那么无论运行它的机器如何,为什么/如何渲染相同的东西呢?在软件后备不知何故,旨在模拟天生的Win32/GDI渲染?有没有办法让我的小自定义消息框在Win8和WinServer2K3上看起来相同?

Fed*_*gui 5

这与 DirectX / 渲染 / 显卡 / 任何一个都没有关系。

与 WPF 相关的一切都采用 Windows 主题中所有 UI 元素的默认外观。

如果您不希望出现这种行为,则必须为所有 UI 元素类型提供Styles和Templates,或者找到一种方法将PresentationFramework.Aero.dll其包含在您的应用程序中并将其用作默认主题库。

看看这个答案