我正在尝试继承我的WPF应用程序中某个Window
的应用程序级样式,但我无法使其继承而不是简单地覆盖现有样式。
在App.xaml(在App.Resources元素
下)中,我定义了一个样式,如下所示:
<Style TargetType="Button">
<Setter Property="Padding" Value="6"/>
<Setter Property="FontWeight" Value="Bold"/>
</Style>
在某个Window
的XAML中,我在Window.Resources
下定义了以下内容:
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Padding" Value="6"/>
<Setter Property="FontWeight" Value="Bold"/>
</Style>
这里的问题在于前者(应用程序)的样式被忽略,就好像后者(窗口)的样式覆盖了它一样。根据我所知,设置了“BasedOn”属性,旨在表明现有样式应该被继承。但是删除属性也无济于事。我能想到的唯一潜在原因是,“{StaticResource {x:Type Button}}”只引用了默认的WPF样式,而不是我在“App.xaml”中定义的样式。
我知道可以使用“x:Key”属性来实现这种样式行为,但我希望有一种更优雅的方式,允许我将继承样式应用于范围内的所有控件(即应用程序/窗口)。
更新
感谢你们两位的回答。你们确实正确,样例应用程序中的结果符合预期。区别在于我无意中未提及“App.xaml”中的样式包含在“ResourceDictionary”中,如下所示:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="SettingsDictionary.xaml"/>
<ResourceDictionary>
<Style x:Key="DefaultButton" TargetType="Button">
<Setter Property="Padding" Value="4"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
有什么建议可以在这种情况下解决问题吗?
x:Key
,并以此为基础为窗口设置样式完全没有问题。我正在寻找一种避免这种情况的方法,也许可以使用另一个绑定说明符。 - Noldorin