为什么窗口背景的样式设置不起作用?

时间:2011-08-01 17:31:31

标签: wpf xaml app.xaml

这是App.xaml:

<Application>
<Application.Resources>
    <ResourceDictionary>
        <Style TargetType="Window">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
        </Style>
    </ResourceDictionary>
</Application.Resources>
</Application>

我也有MainWindow.xaml。在VS中的设计模式下查看时,它的背景确实是灰色的,应该是它。无论如何,当应用程序运行时,窗口的背景默认为白色。

为什么?

如何解决这个问题?我希望所有窗口都默认具有标准背景。

2 个答案:

答案 0 :(得分:18)

问题是在运行时,窗口类型为MainWindow,而不是Window。隐式样式不适用于TargetType的派生类型。所以你的风格将不适用。

在设计期间,您正在设计MainWindow,但我怀疑它会创建一个Window作为基础。

您需要更改类型以匹配您窗口的类型。

答案 1 :(得分:12)

根据CodeNaked的回答,你必须为你拥有的每个Style创建一个Window,但是你可以使用相同的样式BasedOn {{3}} {1}}喜欢这个

<Application.Resources>
    <ResourceDictionary>
        <Style TargetType="Window">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
        </Style>
        <Style TargetType="{x:Type local:MainWindow}"
               BasedOn="{StaticResource {x:Type Window}}"/>
        <Style TargetType="{x:Type local:SomeOtherWindow}"
               BasedOn="{StaticResource {x:Type Window}}"/>
        <!-- Add more Windows here... -->
    </ResourceDictionary>
</Application.Resources