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

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

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

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

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

Part of the promise of WPF is that you don’t need to worry about the details and idiosyncrasies of specific hardware. WPF is intelligent enough to use hardware optimizations where possible,but it has a software fallback for everything. So if you run a WPF application on a computer with a legacy video card,the interface will still appear the way you designed it.

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

如果没有,那么无论运行它的机器如何,为什么/如何渲染相同的东西呢?软件回退是否以某种方式设计为模仿Win32 / GDI渲染?有没有办法让我的小自定义消息框在Win8和WinServer2K3上看起来相同?

这与DirectX / Rendering /显卡/其中任何一个都没有关系.

和WPF一起从Windows主题获取所有UI元素的DEFAULT外观.

如果您不想要这种行为,则必须为所有UI元素类型提供样式和模板,或者在应用程序中找到一种方法将PresentationFramework.Aero.dll包含在内,并将其用作主题库.

看看this answer

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...