为什么样式TargetType =“Window”在从App.xaml设置时不起作用?

时间:2014-03-08 13:06:42

标签: c# wpf xaml window

我在VS2013中创建一个简单的WPF项目,我想将属性应用到我的主窗口。我将它们设置在App.xaml文件中,如下所示:

<Application.Resources>
    <Style TargetType="Window">
        <Setter Property="Background" Value="#FF2D2D30" />
    </Style>
</Application.Resources>

问题是没有任何反应。然而,当我将TargetType更改为Grid时,setter属性可以正常工作。为什么会这样?

2 个答案:

答案 0 :(得分:4)

有必要在Window中添加构造:

Style="{StaticResource {x:Type Window}}"
XAML中的

Window

<Window x:Class="WindowStyleHelp.MainWindow"
        Style="{StaticResource {x:Type Window}}"
        ...>

或者在这样的资源中定义Style

xmlns:local="clr-namespace:MyWpfApplication"

<Application.Resources>
    <Style TargetType="{x:Type local:MainWindow}">
        <Setter Property="Background" Value="#FF2D2D30"/>
    </Style>
</Application.Resources>

答案 1 :(得分:4)

回答这个问题“为什么它不起作用”。

Target类型未应用于Window的原因是,您使用的是名为“MainWindow”的窗口的派生类型。因此,在您的样式资源中,您必须将目标类型设置为派生类型(MainWindow)。通过这样做,它将仅应用于“MainWindow”窗口。

<Style  TargetType="local:MainWindow">
    <Setter Property="Background" Value="#FF2D2D30" />
</Style>