是否有方法在WPF应用程序中创建一个样式,该样式将覆盖所有窗口的Window类型的样式?
即;
<Style x:Key="{x:Type Window}"
TargetType="{x:Type Window}" >
<Setter Property="Background" Value="Black" />
</Style>
在App.xaml中或App.xaml.中引用的资源字典
简短的回答是:这是不可能的。
解释有很多类似的问题:WPF窗口样式在运行时不起作用
未应用WPF窗口样式
如何在app.xaml中设置默认的WPF窗口样式
样式中的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
并且该窗口具有所需的背景。我认为这是一个bug。