【问题标题】:Why does style TargetType="Window" not work when set from App.xaml?为什么从 App.xaml 设置样式 TargetType="Window" 不起作用?
【发布时间】:2014-03-08 13:06:41
【问题描述】:

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

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

问题是什么都没有发生。但是,当我将 TargetType 更改为 Grid 时,setter 属性工作得很好。为什么会这样?

【问题讨论】:

  • 如果你在Window上明确指定了Background属性,它将覆盖style属性。
  • 我没有在窗口上明确设置任何背景属性。 只设置allowtransparency 为true 和windowstyle 为none...

标签: c# wpf xaml window


【解决方案1】:

需要在Window中添加构造:

Style="{StaticResource {x:Type Window}}"

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>

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-12
      • 1970-01-01
      • 2011-10-17
      • 2015-02-20
      • 2014-01-29
      • 2010-11-03
      • 2011-01-08
      • 1970-01-01
      相关资源
      最近更新 更多