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

为什么WPF在不同版本的Windows上呈现不同?,wpf,rendering,Wpf,Rendering,我读到WPF在引擎盖下使用DirectX来执行渲染,它不依赖WinForms用来渲染控件的恐龙库 因此,我用WPF制作了我的表示层,它在Win8下看起来应该是这样的 然后我将该项目部署到Windows Server 2003。。。发现我漂亮的自定义小消息框看起来非常像WinForms,有些笨重;按钮控件与WinForms控件非常相似,expander控件不再显示为圆形的^箭头,看起来像是1998年绘制的(请将^箭头画在一个丑陋的方形平面按钮上,当鼠标悬停在该按钮上时弹出) 来自C#2010圣经中

我读到WPF在引擎盖下使用DirectX来执行渲染,它不依赖WinForms用来渲染控件的恐龙库

因此,我用WPF制作了我的表示层,它在Win8下看起来应该是这样的

然后我将该项目部署到Windows Server 2003。。。发现我漂亮的自定义小消息框看起来非常像WinForms,有些笨重;按钮控件与WinForms控件非常相似,expander控件不再显示为圆形的
^
箭头,看起来像是1998年绘制的(请将
^
箭头画在一个丑陋的方形平面按钮上,当鼠标悬停在该按钮上时弹出)

来自C#2010圣经中的专业WPF:

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

那么,这是谎言吗?对我来说是的,因为它不像我设计的那样


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

这与DirectX/渲染/视频卡/任何这些都无关

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

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


看看

winserver的实际视频支持可能存在问题。Ala如果你有半透明的背景,我甚至不相信winserver有能力做到这一点。+1仅用于“恐龙winforms”。这是一个非常好和令人鼓舞的起点,但当表示层是类库时,我在哪里/如何应用此解决方案(例如,仅包含XAML定义的MyApp.Presentation.Views项目)没有实际启动事件?我指的是PresentationFramework.Aero.dll方式,而不是样式和模板方式。-我有一个“启动”入口点(对于DI/IoC设置),但在“MyApp”中只包含业务逻辑的项目…放在那里感觉不对!好吧,我将把它标记为答案,因为它确实回答了前面提到的问题。我希望有一个更详细的示例,否则我会找到一种方法,将PresentationFramework.Aero.dll包含在您的应用程序中,并将其用作默认主题库,但我猜这超出了所问问题的范围。