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。添加以下行,您将获得整个窗口的背景。请在下面的行中附加 < 字符。
<Style TargetType="x:Type Grid" BasedOn="x:Null"> <Setter 属性="背景" 值="黑色" /> </风格>
【讨论】:
这一切都没有帮助。我删除了 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窗口的背景颜色不是由样式自动设置的的主要内容,如果未能解决你的问题,请参考以下文章
wpf中鼠标放到combobox的下拉菜单选项上,该选项就会改变背景颜色,怎么取消变色?