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

9

我可以将主题的默认窗口背景色绑定到窗口背景吗?

我尝试了以下方法:

<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进行实验并思考后,我得出以下结论:

窗口默认使用SystemColors.WindowBrush作为其背景颜色。大多数我尝试过的主题中,这种颜色是白色,这可能是可以接受的。我相信在WinForms中,白色也是窗口的背景颜色。但是,在WinForms中,默认的窗体背景颜色不是Window背景,而是Control。因此,如果我想要那种颜色,我必须像Lucas所指出的那样使用SystemColors.ControlBrush

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

感谢大家帮助我解决问题!


你解决了吗?我想在触发器上更改背景。 - nportelli
这里是一个关于如何在Python中检查字符串是否为数字的Stack Overflow答案链接:https://dev59.com/MnI-5IYBdhLWcg3wPFx2#1955583 - CAD bloke
2个回答

4

应用主题是否会覆盖系统画笔,正如我所期望的那样?如果是这样,您应该能够执行以下操作:

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

编辑

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


1
我从这里得到了白色背景,但是根据建议,你可以尝试使用 SystemColors.ControlBrushSystemColors.ControlDarkBrush 等。 - Lucas
+1 感谢指点方向。不过我更愿意接受像Lucas建议的将SystemColors.ControlBrush应用于背景的答案。准备开始... - Magnus Lindhe

1

我本以为在Window元素上简单地不设置Background属性就可以实现这一点。主题的整个意义在于影响诸如Window之类的可视元素的默认外观。

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


应用Luna主题并将我的窗口的背景属性保持未设置状态会给我一个白色背景。我本来期望得到在Windows XP上使用WinForms时所获得的米色/棕色背景或者在Vista上使用WinForms时所获得的灰色背景。如果白色背景是正确的行为,也许我需要重新表达我的问题。 - Magnus Lindhe
+1 让我对这个问题有了不同的思考,并向我推荐了 StyleSnooper! - Magnus Lindhe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接