WPF 默认窗口样式覆盖

Posted

技术标签:

【中文标题】WPF 默认窗口样式覆盖【英文标题】:WPF default window style override 【发布时间】:2012-04-04 14:27:26 【问题描述】:

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

即;

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

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

【问题讨论】:

我放弃了这个。有关更多信息,请参阅此帖子***.com/questions/431940/…。如果你设法解决它,请告诉我。 【参考方案1】:

简短的回答是:不可能。

解释 类似的问题还有很多: WPF Window Style not working at runtimeWPF 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

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

【讨论】:

以上是关于WPF 默认窗口样式覆盖的主要内容,如果未能解决你的问题,请参考以下文章

WPF窗口模板——Style样式

WPF 通过Win32SDK修改窗口样式

WPF 创建无边框的圆角窗口

WPF 窗口仅垂直拖动

WPF自定义窗口最大化显示任务栏

WPF 关于窗口的一些显示效果