如何覆盖所选 ListBoxItem 的前景
How to override Foreground for selected ListBoxItem
我有一个全局样式 (Application.Resources) 来设置所有 TextBlock 的前景。
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="Brown"/>
</Style>
这很好用。
现在我尝试覆盖所选 ListBoxItem 中 TextBlock 的前景,这是默认 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的全局风格的画笔形式。
在与绑定一起使用的解决方案中设置前景的最佳方式是什么?
这个例子说明了为什么定义隐式 application-wide 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>
我有一个全局样式 (Application.Resources) 来设置所有 TextBlock 的前景。
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="Brown"/>
</Style>
这很好用。
现在我尝试覆盖所选 ListBoxItem 中 TextBlock 的前景,这是默认 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的全局风格的画笔形式。 在与绑定一起使用的解决方案中设置前景的最佳方式是什么?
这个例子说明了为什么定义隐式 application-wide 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>