如何将窗口背景绑定到主题的窗口背景颜色?

时间:2009-10-03 13:18:23

标签: .net wpf data-binding xaml themes

如何将主题的默认Window背景颜色绑定到Window背景?

我尝试了以下内容:

<Window x:Class="Shell"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Shell" 
    Height="300" 
    Width="300" 
    Background="{DynamicResource WindowBackgroundBrush}"
    >

但是背景颜色呈现为黑色,使用Luna主题时似乎不正确。使用Luna主题,我希望在Windows XP中常见米色/褐色。

更新:在阅读完答案后,与StyleSnooper一起玩并思考更多相关内容后,我得出以下结论:

默认情况下,Window将使用SystemColors.WindowBrush作为其背景颜色。在我尝试的大多数主题中,这种颜色是白色的,这可能是好的。我相信白色也是WinForms中的Window背景色。但是,WinForms中的默认窗体背景颜色不是窗口背景而是控件。所以,如果我想要那种颜色,我会使用Lucas所指出的SystemColors.ControlBrush

有一次,我试图在Windows XP上实现WinForms的褐色/米色控制颜色。这在Windows Vista上可能无法实现,因为Vista上的控件颜色有点灰色。在Windows Vista上运行WinForms应用程序不会将其呈现为米色/褐色,而是灰色。在这种情况下,我想我们必须应用我们自己的自定义样式来实现Vista上的“原始”Windows XP外观。

感谢大家帮我解决这个问题!

2 个答案:

答案 0 :(得分:4)

应用主题是否实际上覆盖了我期望的系统画笔?如果是这样,你应该能够这样做:

<Window ...
    Background="{x:Static SystemColors.WindowBrush}
    ...>

修改

根据Manga的评论,您可能希望使用SystemColors.ControlBrush来实现所需的效果,因为大多数系统上的WindowBrush都是白色的。 ControlBrush是您在Windows XP上看到的“灰白”颜色。

答案 1 :(得分:1)

我原本以为只需在Background元素上保留Window属性即可实现此目的。主题的重点在于它会影响视觉元素的默认外观,例如Window

编辑您可以查看StyleSnooper - 它可以让您查看控件的默认模板(例如Window)。您应该能够确定它为每个主题绑定的属性。