2012-06-27 50 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的财产。

谢谢大家。