WPF窗口的背景颜色不是由样式自动设置的

Posted

技术标签:

【中文标题】WPF窗口的背景颜色不是由样式自动设置的【英文标题】:WPF window's background color is not set by style automatically 【发布时间】:2017-07-12 02:38:32 【问题描述】:

我创建了一个带有一个窗口的简单 WPF 应用程序。我想要的是自动将背景颜色应用于所有窗口。但是,没有应用颜色。 这是link 示例项目。以下是 App 中的 XAML:

<Application x:Class="SampleWPFApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:SampleWPFApp"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <Style TargetType="Window">
            <Setter Property="Background">
                <Setter.Value>
                    <SolidColorBrush Color="#FF3B444B" />
                </Setter.Value>
            </Setter>
        </Style>
        <Style TargetType="local:MainWindow" BasedOn="StaticResource Window" />
    </Application.Resources>
</Application>

逻辑取自here。

编辑:

好吧,我对背景没有设置 - 它没有在 VS 编辑器中设置。程序运行时,后台正常。 Ragavan 和 mm8 的解决方案 do 工作,尽管它们是相同的,不同之处在于 BasedOn="StaticResource Window" 允许我们省略样式的键(即 Window 键本身)。

唉,编辑器不显示背景,尽管显式设置样式(在 MainWindow 的 XAML 中)会使背景出现。

【问题讨论】:

【参考方案1】:

Basedon 不会直接绑定 window 。替换此代码BasedOn="StaticResource x:Type Window"

App.Xaml

<Application x:Class="SampleWPFApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:SampleWPFApp"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <Style TargetType="Window">
            <Setter Property="Background">
                <Setter.Value>
                    <SolidColorBrush Color="#FF3B444B" />
                </Setter.Value>
            </Setter>
        </Style>
        <Style TargetType="local:MainWindow" BasedOn="StaticResource x:Type Window"/>
    </Application.Resources>
</Application>

【讨论】:

它不起作用。对你起作用吗?如果是的话,你能分享一下这个项目吗? 我刚刚下载了您的解决方案并进行了更改 我使用了您的代码 - 仍然没有结果。这是第二个项目文件的link。 我下载了这个文件,代码不变,代码不变 对不起,这里是正确的link。【参考方案2】:
    在 WPF 中,您为类型设置样式资源,而不是为类型实例设置样式资源。因此,应删除以下行。

Style TargetType="local:MainWindow" BasedOn="StaticResource Window" />

    在您的情况下,正在应用 Windows 背景,但它只是不可见,因为它可能有一个面板。例如,当您创建一个新窗口时,默认情况下它将具有 Grid。添加以下行,您将获得整个窗口的背景。请在下面的行中附加 &LT 字符。

&LTStyle TargetType="x:Type Grid" BasedOn="x:Null"> &LTSetter 属性="背景" 值="黑色" /> &LT/风格>

【讨论】:

这一切都没有帮助。我删除了 Grid - 仍然没有结果。 我的解决方案适用于窗口内的网格。我对 Windows 背景有误。我投票赞成 Ragavan 的另一个解决方案,这正是您所需要的。【参考方案3】:

只需给你的风格一个x:Key 并以此为基础的MainWindow 风格。这对我来说很神奇:

<Application x:Class="SampleWPFApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:SampleWPFApp"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <Style x:Key="myWindowStyle" TargetType="Window">
            <Setter Property="Background">
                <Setter.Value>
                    <SolidColorBrush Color="#FF3B444B" />
                </Setter.Value>
            </Setter>
        </Style>
        <Style TargetType="local:MainWindow" BasedOn="StaticResource myWindowStyle" />
    </Application.Resources>
</Application>

【讨论】:

还是不行!这是使用您的代码的第三个应用程序link。您使用哪个版本的 Visual Studio?我使用 VS 2017 RC (15.0.0-RC.4+26206.0)。 当我针对 .NET Framework 4.6.1 构建时,它适用于 VS 2015。

以上是关于WPF窗口的背景颜色不是由样式自动设置的的主要内容,如果未能解决你的问题,请参考以下文章

所选 RibbonTab 的不同背景颜色

如何设置Android Studio背景的颜色

wpf中鼠标放到combobox的下拉菜单选项上,该选项就会改变背景颜色,怎么取消变色?

自动填充后设置禁用的输入背景颜色

当背景颜色与边框背景颜色不同时,为 WPF TextBlock 设置左上角和右上角圆角不起作用

选择后更改整个数据网格行的背景颜色