WPF默认窗口样式替代

WPF默认窗口样式替代,wpf,styles,Wpf,Styles,是否有一种方法可以在WPF应用程序中创建一个样式,该样式将覆盖所有窗口的窗口类型样式 ie 在App.xaml中或App.xaml中引用的资源字典中。简短的回答是:这是不可能的 解释 有很多类似的问题: 样式中的TargetType不管理派生类型 您不是在创建窗口类,而是从中派生的类。如果创建了Window类的实例,则应应用该样式 Dim frm As New Window frm.Show() 但是,它不起作用(至少在4.0中是这样),my Application.xaml中的样式

是否有一种方法可以在WPF应用程序中创建一个样式,该样式将覆盖所有窗口的窗口类型样式

ie



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

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

解释 有很多类似的问题:


样式中的TargetType不管理派生类型

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

Dim frm As New Window
frm.Show()
但是,它不起作用(至少在4.0中是这样),my 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。

我放弃了这个。有关更多信息,请参阅本文。如果你能解决它,请告诉我。
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