为什么从App.xaml设置TargetType="Window"样式不起作用?

8

我正在使用VS2013创建一个简单的WPF项目,我想要对我的主窗口应用属性。我在App.xaml文件中进行了如下设置:

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

问题在于没有任何反应。但是当我将TargetType改为Grid时,Setter属性正常工作。为什么会这样呢?

如果您在窗口上明确指定了Background属性,则它将覆盖样式属性。 - stukselbax
1
我没有在窗口上显式设置任何背景属性。 <Window> 只将 allowstransparency 设置为 true,将 windowstyle 设置为 none... - Audio
3个回答

5

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

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

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

5
需要在 Window 中添加构造函数:
Style="{StaticResource {x:Type Window}}"

XAML中的窗口:

<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>

0
你可以将TargetType设置为 "MainWindow" 或为Style属性设置资源引用。
public MainWindow()
{
    InitializeComponent();
    SetResourceReference(StyleProperty, typeof(Window));
}

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