0

有没有办法在 WPF 应用程序中创建一个样式,它将覆盖所有窗口的 Window 类型的样式?

IE;

<Style x:Key="{x:Type Window}"
   TargetType="{x:Type Window}" >
    <Setter Property="Background" Value="Black" />
</Style>

在 App.xaml 或 App.xaml 中引用的资源字典中。

4

1 回答 1

1

简短的回答是:这是不可能的。

解释有很多类似的问题: WPF Window Style not working at runtime
WPF window style not being applied
How to set default WPF Window Style in app.xaml?

Styles 中的 TargetType 不管理派生类型。

您不是在创建 Window 类,而是从它派生的类。如果您创建了 Window 类的实例,它应该应用了样式。

Dim frm As New Window
frm.Show()

但是,它不起作用(至少在 4.0 中),我的 Application.xaml 中的样式不会在运行时应用。解决方法是:

在运行时加载资源字典:

Dim app As Application = New Application()
Application.Current.Resources.MergedDictionaries.Add(Application.LoadComponent(New Uri("/MyProject;component/MainDictionary.xaml", UriKind.Relative)))

在运行时创建样式

Sub Main()
 Dim app As Application = New Application()
 Dim sty As Style
 sty = New Style With {.TargetType = GetType(Window)}
 sty.Setters.Add(New Setter With {.Property = Control.BackgroundProperty, .Value = Brushes.Red})
 Application.Current.Resources.Add(GetType(Window), sty)
 Dim frm As New Window
 frm.ShowDialog()
End Sub

并且窗口具有所需的背景。我认为这是一个错误。

于 2012-04-05T09:10:21.970 回答