WPF窗口的背景颜色不会自动设置为样式中定义的颜色

4
我创建了一个简单的WPF应用程序,其中只有一个窗口。我想要的是自动将背景颜色应用于所有窗口。然而,颜色并没有被应用。 以下是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>

这段逻辑是从这里获取的。

编辑:

关于背景未设置的时间点,我说得不够清楚 - 在VS编辑器中背景是未设置的。程序运行时,背景是正常的。 Ragavan 和 mm8的解决方案确实可以工作,尽管它们是相同的,只有一个区别BasedOn="{StaticResource Window}"让我们省略了样式的键(即窗口本身就是键)。

然而,编辑器没有显示背景,虽然在MainWindow的XAML中明确设置了样式使背景出现。

3个回答

3

基于不直接绑定窗口。请替换此代码 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>

它不起作用。对你来说它能工作吗?如果可以,你能分享一下这个项目吗? - JohnyL
我刚刚下载了你的解决方案并进行了更改。 - Ragavan
我使用了你的代码 - 仍然没有结果。这是第二个项目文件的链接:link - JohnyL
我下载了这个文件,代码保持不变,没有改动。 - Ragavan
抱歉,这是正确的链接:https://www.dropbox.com/s/rfdzp7uekipc5hn/SampleWPFApp2.zip?dl=0。 - JohnyL

0
  1. 在WPF中,您为类型设置样式资源而不是类型的实例。因此,应删除下面的行。

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

  1. 在您的情况下,Windows背景被应用但由于可能有一个面板而不可见。例如,当您创建新窗口时,默认情况下会有网格。添加以下行,您将获得整个窗口的背景。请在下面的行中附加&LT字符。

&LTStyle TargetType="{x:Type Grid}" BasedOn="{x:Null}"> &LTSetter Property="Background" Value="Black" /> &LT/Style>


所有这些都没有帮助。我删除了网格 - 仍然没有结果。 - JohnyL
我的解决方案将在窗口内使用网格。我对Windows背景的理解是错误的。我已经投票支持了Ragavan的另一个解决方案,它正是你所需要的。 - Adithya Ranganath

0

只需为您的样式设置一个 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>

还是不行!这是第三个应用程序[链接](https://www.dropbox.com/s/dn9208spdkdu3xn/SampleWPFApp3.zip?dl=0),使用了你的代码。你用的是哪个版本的Visual Studio?我用的是VS 2017 RC(15.0.0-RC.4+26206.0)。 - JohnyL
当我使用 .NET Framework 4.6.1 构建时,它在我的 VS 2015 上运行良好。 - mm8

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