如何更改WPF对控件的默认样式的想法?为什么会发生这种情况呢?在下面的XAML中,我为Button声明了一个样式,然后进一步声明了一个新样式,该样式覆盖了一个名为"HugeBut"的setter。我希望HugeBut是隐式BasedOn我的新未命名的样式,但显然它不是;
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="Red">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- badness -->
<Style TargetType="{x:Type Button}" x:Key="HugeBut">
<Setter Property="Foreground" Value="Yellow"/>
</Style>
<!-- works, but I do not want to explicitly set the based-on. -->
<Style TargetType="{x:Type Button}" x:Key="HugeBut" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Foreground" Value="Yellow"/>
</Style>
</Window.Resources>
<Button Content="Regular" />
<Button Content="huge!" Style="{StaticResource HugeBut}"/>
你会期望有两个红色的按钮,一个带有黑色文本,一个带有黄色文本,但是Style HugeBut继承了我没有在系统默认主题中为Button(在我的例子中是Aero)指定的未命名样式的所有值。
我能做些什么来改变这种行为?
答案似乎就在这里:
http://wpfthemereplacer.codeplex.com/来自网站描述:
这个库允许用户提供自己的资源字典以替换WPF加载的默认主题字典。这就使得所以你不需要装饰自定义样式BasedOn="{StaticResource {x:Type…"}}",当您的自定义主题为在您的应用程序中使用。如果你有风俗习惯的话只提供增强功能而不需要的控件替换样式时,不需要定义新的样式或当你创建自定义控件时,重写DefaultStyleKey。
这正是我要找的。这将允许我使用样式,因为它们是为了在一个应用程序中使用,已经广泛地"重新主题化",而不是通过设置全局样式(然后处理跟踪代码缺少BasedOn的位,或者由于WPF错误和其他限制而无法处理它)
可以工作,但是我不想显式地设置基于。
好吧,如果你不想,框架不会真的在意,据我所知,你必须。