【问题标题】:WPF with default Windows theme inconsistencyWPF 与默认 Windows 主题不一致
【发布时间】:2012-06-27 16:45:45
【问题描述】:

我真的需要你的帮助。

我正在开发一个 WPF 应用程序。在我的开发机器中,我使用的是带有 Aero 主题的 Windows 7。

我已将应用程序交付给使用 Server 2008 的同事,但没有 Aero 主题。

嗯,应用程序的外观和外观发生了巨大变化。

主要问题是我不了解某些行为的原因。让我们选择一个应该简单且足以让我理解真正问题的:扩展器!

我在 UserControl 中使用了很多扩展器,并且我已经声明扩展器样式具有:

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

在我的机器上看起来很棒(Windows 7 with Aero)。在我的同事机器中,背景值受到尊重,但切换按钮有一个灰色的背景边框(看起来像 SystemColors.ControlBrushKey)。

启用 Aero 后,按照我想要的方式:

这就是我在 Classic 主题中得到的:

我在这里做错了什么?我该怎么做才能使我的应用程序在 Aero 和 Classic 中看起来不错?

如果我将 Aero XAML 文件与我的应用程序一起提供,它能否在 XP 机器上运行?

谢谢

【问题讨论】:

    标签: wpf themes aero


    【解决方案1】:

    看看这个blog post。看来作者可能已经解决了这个问题。

    【讨论】:

    • 您的回答是正确的。在我的应用程序中,我无法让它工作,但我制作了一个简单的测试应用程序并且它可以工作。您知道为什么它不适用于我的应用程序吗?我可以在输出窗口中看到正在加载 PresentationFramework.Classic。
    • 我只想说一切正常。只有扩展器让我头疼:(
    • 没有查看您的源代码,我无法告诉您为什么它在您的测试应用程序中有效,而不是在您的完整应用程序中。您需要查看两者之间的任何差异。
    【解决方案2】:

    看来我找到了问题所在。我不太明白为什么会这样,但是......

    问题在于样式定义。它必须是这样的:

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

    因此,我必须分析我定义的所有样式并添加“BasedOn”属性。

    谢谢大家。

    【讨论】:

      【解决方案3】:

      您可以通过添加命名空间来强制窗口的航空主题

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

      这适用于 XP 机器,因为它内置于 WPF 附带的程序集中。

      【讨论】:

      • 它没有用。它只是添加命名空间?在每个 UserControl/Window 中?
      • 我相信你只需要在你的主窗口上设置它,它也不会对每个用户控件造成伤害。怎么没用?你在 XP 机器上试过吗?
      • 等等,我认为您需要将“PresentationFramework.Aero.dll”添加到您的引用中,您可以在添加/删除引用对话框中找到它。
      • 我已经在我的 MainWindow 和另外几个窗口中设置了它,结果是一样的。在我使用 Classic 主题的 Windows 7 机器中,我得到了带有浅灰色方形边框的 Expander 切换按钮。在航空中,它是一个椭圆。
      • 是的。我正在考虑强制将 Aero XAML 加载到应用程序的资源字典中。你怎么看?
      猜你喜欢
      • 1970-01-01
      • 2017-07-24
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多