TextBlock
наследует определение переднего плана от своих родителей в визуальном дереве.Label
, с другой стороны, определяет передний план в его стиле по умолчанию.
Ваш подход "не-WPF-подобен" - вы не должны заключать ContentPresenter
в элемент управления Label
.
Правильный подход зависит от того, хотите ли вы весь текст в элементе, чтобы изменить его передний план, или просто метку?
[В обоих случаяхНет очевидного преимущества использования Label
в шаблоне данных - поэтому я предполагаю, что метка будет изменена на TextBlock
.]
Если ответ на поставленный выше вопрос состоит в том, что всетекст должен быть изменен: в ControlTemplate
из ListBoxItem
, в триггере для IsSelected, из секундного установщика удалите TargetName="ItemLabel"
, так что последний установщик:
<Setter Property="Foreground" Value="Orange" />
Это изменит передний планэлемента, который повлияет на передний план обоих TextBlock
s в шаблоне данных.
Если вы хотите повлиять только на один из текстовых блоков:
1. remove the setter for the foreground from the control template
2. add a trigger to your data template:
<DataTemplate>
<StackPanel>
<Image .../>
<TextBlock x:Name="Text01" ..../>
<TextBlock x:Name="Text02" ..../>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" Value="True">
<Setter TargetName="Text01" Property="Foreground" Value="Orange"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
Примечание: если вы имеет , чтобы использовать Label
элемент управления в шаблоне данных, привязать его свойство Foregroundна передний план элемента списка, например, так:
<Label Foreground="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"....../>
Если это не помогает, это означает, что ваш элемент списка наследует свой передний план, поэтому используйте:
<Label Foreground="{Binding TextElement.Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"....../>