如何在共享ResourceDictionary中定义窗口实例的默认背景颜色?

时间:2011-01-09 19:36:18

标签: wpf xaml themes window resourcedictionary

我似乎无法为我的应用程序中的所有窗口设置默认背景颜色。有谁知道怎么做?

目前我正在我的App.xaml文件中设置一个主题。

<Application>
    <Application.Resources>
        <ResourceDictionary Source="Themes/SomeTheme.xaml" />

这基本上是我整个应用程序的样式。

SomeTheme.xaml内部我试图为我的所有窗口设置默认颜色。

<SolidColorBrush Color="{DynamicResource MainColor}" x:Key="CommonBackgroundBrush" />
<Style TargetType="{x:Type Window}">
    <Setter Property="Background" Value="{DynamicResource CommonBackgroundBrush}" />
</Style>

对于Window类型的衍生物,此语法完全被忽略。

是否有某种方法可以强制将样式应用于Window的所有衍生物?

这种语法的奇怪之处在于它实际上在VS设计预览窗口中显示了正确的颜色。

4 个答案:

答案 0 :(得分:6)

您的窗口不是Window的实例,它们是从Window派生的类的实例。所以我认为你必须列出所有内容,但你可以使用BasedOn来帮助。

答案 1 :(得分:4)

如果确实没有实际的继承,这可能就像你可以做到的那样简单:

<Style TargetType="{x:Type Window}">
    <Setter Property="Background">
        <Setter.Value>
            <SolidColorBrush Color="Blue"/>         
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType="{x:Type local:MainWindow}" BasedOn="{StaticResource {x:Type Window}}"/>
<Style TargetType="{x:Type local:Dialogue}" BasedOn="{StaticResource {x:Type Window}}"/>
...

至少你不需要那样复制整个风格

答案 2 :(得分:4)

为您的样式x:Key

<Style x:Key="WindowStyle" TargetType="{x:Type Window}">

然后在它应该适用的每个窗口中引用它:

<Window x:Class="WpfApplication1.MainWindow" ... Style="{StaticResource WindowStyle}">

答案 3 :(得分:1)

我对这一切都很陌生,所以这是我5便士的价值。 我改变了网格的背景......不确定这样做是否有任何问题:)

 <Style TargetType="{x:Type Grid}">
    <Setter Property="Background" Value="#FFECE9D8"/>
</Style>