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

Posted

技术标签:

【中文标题】如何将窗口背景绑定到主题的窗口背景颜色?【英文标题】:How to bind Window background to a theme's Window background color? 【发布时间】:2010-12-03 13:52:50 【问题描述】:

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

我尝试了以下方法:

<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 中默认的 Form 背景颜色不是 Window 背景而是 Control。所以,如果我想要那种颜色,我会使用SystemColors.ControlBrush,正如Lucas 所指出的那样。

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

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

【问题讨论】:

你解决了吗?我想更改触发器的背景。 这个:***.com/a/1955583/492 【参考方案1】:

应用主题是否真的会像我预期的那样覆盖系统画笔?如果是这样,您应该可以这样做:

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

编辑

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

【讨论】:

我从这里得到了白色背景,但是按照这个建议,你可以试试SystemColors.ControlBrushSystemColors.ControlDarkBrush +1 为我指明了正确的方向。但是,我想接受像 Lucas 建议的那样将 SystemColors.ControlBrush 应用于背景的答案。在你的标记上......【参考方案2】:

我原以为只需在 Window 元素上未设置 Background 属性即可实现此目的。主题的全部意义在于它会影响视觉元素的默认外观,例如您的Window

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

【讨论】:

应用 Luna 主题并保留我的 Window 的 Background 属性未设置会给我一个白色背景。我希望您在 Windows XP 上的 WinForms 中获得米色/棕色背景,或者在 Vista 上的 WinForms 中获得灰色背景。如果白色背景是正确的行为,也许我需要改写我的问题。 +1 让我对这件事有了不同的看法,并将我指向 StyleSnooper!

以上是关于如何将窗口背景绑定到主题的窗口背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

怎样设置Matlab窗口背景的颜色

如何使用 SwiftUI 在 macOS 上可靠地检索窗口的背景颜色?

如何修改窗口背景颜色

如何转换图像的背景颜色以匹配 Pygame 窗口的颜色?

win10怎样修改窗口背景颜色?

怎么设置Visual Studio代码窗口背景颜色