2012-06-27 48 views
1

我真的需要你的幫助。WPF與默認Windows主題不一致

我正在開發一個WPF應用程序。在我的開發機器中,我使用Windows 7和Aero主題。

我已將該應用程序交付給使用Server 2008且未使用Aero主題的同事。

那麼,應用程序看起來&下跌戲劇性的變化。

主要問題是我不理解某些行爲的原因。讓我們挑選一個應該簡單並且足以讓我理解真正問題的人:擴展器!

我使用了很多擴展器的在用戶控件,我已經宣佈擴展樣式有:

<Style TargetType="Expander"> 
    <Setter Property="Background" Value="#FF9B9B9B" /> 
    <Setter Property="Padding" Value="0" /> 
</Style> 

,在我的機器(Windows 7中的Aero帶)看起來不錯。在我的同事機器中,背景值受到尊重,但切換按鈕具有灰色背景邊框(看起來像SystemColors.ControlBrushKey)。

這與航空啓用,我想它的方式: enter image description here

這就是我得到與經典主題: enter image description here

我在做什麼錯在這裏?我該怎麼做才能讓我的應用在Aero和Classic中看起來不錯?

如果我將Aero XAML文件與我的應用程序一起運行,它將在XP機器上工作嗎?

感謝

回答

3

看看這個blog post。看來作者可能已經能夠解決這個問題。

+0

你的回答是正確的。在我的應用程序中,我無法實現它的功能,但我製作了一個簡單的測試應用程序,它可以工作。你知道爲什麼它不適用於我的應用程序嗎?我可以在Output窗口中看到正在加載PresentationFramework.Classic。 –

+0

讓我只是說,一切都快成功了。只有擴展器給我頭痛:( –

+0

沒有看你的源代碼我無法告訴你爲什麼它在你的測試應用程序中,而不是在你的完整應用程序中,你需要看看兩者之間的差異。 – evanb

0

您可以通過添加一個命名空間

xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" 

這將XP計算機上工作,因爲這是內置附帶WPF的裝配力的窗口Aero主題。

+0

它沒有工作。這只是添加命名空間?在每個UserControl/Window中? –

+0

我相信你只需要將它設置在你的主窗口上,也不會對每個用戶控件造成傷害。它怎麼沒用?你在XP機器上試過了嗎? –

+0

等等,我想你需要添加到你的引用「PresentationFramework.Aero.dll」,你可以在添加/刪除引用對話框中找到它。 –

2

看起來像我發現了這個問題。我不太明白爲什麼這必須是這樣的,但.......

問題是風格的定義。它必須是這樣的:

<Style TargetType="{x:Type Expander}" BasedOn="{StaticResource {x:Type Expander}}"> 

所以,我得分析,我已經定義的所有樣式,並添加「支持算法FMP的財產。

謝謝大家。