2013-05-01 108 views
4

我讀過WPF在底層使用DirectX來執行其渲染,它不依賴於WinForms用於呈現控件的恐龍庫。爲什麼WPF在不同版本的Windows上呈現不同?

因此,我使用WPF製作了我的Presentation層,它看起來應該在Win8下應用。

然後,我將項目部署到Windows Server 2003 ...以發現我的漂亮的小自定義消息框看起來非常像WinForms,有點笨重;按鈕控件與WinForms控件非常相似,擴展控件不再顯示爲帶圓圈的^箭頭,並且看起來像是1998年繪製的(當您的鼠標懸停在屏幕上時,會彈出一個醜陋的方形平面按鈕上的^箭頭圖片它)。

臨WPF在C#2010聖經:WPF的承諾

部分是,你並不需要擔心特定硬件的細節和特性。 WPF足夠智能,可以儘可能地使用硬件優化,但它有一個軟件後備的一切。 因此,如果您在具有舊版視頻卡的計算機上運行WPF應用程序,該界面仍將以您設計它的方式出現

那麼,這是謊言嗎?對我來說它是,因爲它不會出現我設計它的方式

如果不是這樣,那麼爲什麼/不管這臺機器運行它的時候,該物體的渲染效果如何? 軟件後備設計模仿Win32/GDI渲染?有沒有辦法讓我的小自定義消息框在Win8和WinServer2K3上看起來完全相同?

+0

這可能是與實際的視頻支持,winserver有問題。 Ala如果你有一個半透明的背景我不相信winserver甚至有能力做到這一點。 – Nomad101 2013-05-01 19:48:48

+0

+1只適用於「恐龍winforms」。 – 2013-05-01 19:57:32

回答

4

這與DirectX /渲染/視頻卡/任何一點沒有關係。

以及WPF採用Windows主題中所有UI元素的DEFAULT外觀所做的一切。

如果不希望這種行爲,你必須爲所有UI元素類型提供StylesTemplates,或以其他方式找到一種方法,包括在應用程序中PresentationFramework.Aero.dll並使用它作爲默認的主題庫。

看看this answer

+0

優秀且非常令人鼓舞的出發點,但是當表現層是類庫(如僅包含XAML定義的MyApp.Presentation.Views項目)時,我/何處/如何應用此解決方案,啓動事件*?我的意思是PresentationFramework.Aero.dll的方式,而不是樣式和模板的方式。 http://arbel.net/2006/11/03/forcing-wpf-to-use-a-specific-windows-theme/ - 我有一個「啓動」入口點(用於DI/IoC設置),但這是在只包含商業邏輯的「MyApp」項目中......不適合放在那裏! – 2013-05-01 20:28:53

+0

好吧,我會將其標記爲答案,因爲它*會*如上所述回答問題。我會喜歡更詳細的*例子,否則找到一種方法來在您的應用程序中包含PresentationFramework.Aero.dll,並將其用作默認主題庫*,但我想這超出了問題的範圍。 – 2013-05-02 13:01:46

相關問題