我有一个全局样式(Application.Resources)来设置所有TextBlocks的前景。
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="Brown"/>
</Style>
这很好用。
现在我尝试覆盖所选ListBoxItem内的TextBlock的Foreground,它是默认ContentPresenter内容的一部分。
我为ListBoxItem创建了一个新的全局样式:
<Style TargetType="ListBoxItem">
<Setter Property="Foreground" Value="Orange" />
<Setter Property="Background" Value="Aqua"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Background="{TemplateBinding Background}">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Brown" />
<Setter Property="Foreground" Value="Aqua" />
</Trigger>
</Style.Triggers>
</Style>
背景工作正常。
但Foreground仍然是TextBlock的全局样式。 在使用Binding的解决方案中设置Foreground的最佳方法是什么?
答案 0 :(得分:2)
这是为什么定义隐式应用程序范围的TextBlock
样式通常是个坏主意的一个示例。
但您应该可以通过向<ContentPresenter.Resources>
添加默认样式来覆盖它:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Background="{TemplateBinding Background}">
<ContentPresenter>
<ContentPresenter.Resources>
<Style TargetType="{x:Type TextBlock}" BasedOn="{x:Null}" />
</ContentPresenter.Resources>
</ContentPresenter>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>