実際に同じアイテムテンプレートが常に(アイテムが選択されているかどうかにかかわらず)、アイテムが選択されているときに前景色が異なるようにしたい場合は、簡単です。 ContentTemplateは変更されないため、トリガーでContentTemplateを設定しないでください。トリガーで前景色を設定するだけです。テンプレートの前景色を混乱させない場合は、it will inherit whatever the ListBoxItem has for that property。
<Style TargetType="ListBoxItem">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock
x:Name="Text"
Text="{Binding Name}"
Margin="0, 5"
FontSize="16"
/>
</DataTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
同じスタイルのより精巧なバージョン:最初の私は、あなたが「ListBoxItem」のForegroundプロパティを変更したので、それが動作しないだろうと思った時に
<Style TargetType="ListBoxItem">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Ellipse
Height="12"
Width="12"
VerticalAlignment="Center"
x:Name="Ellipse"
Fill="Yellow"
Stroke="DeepSkyBlue"
StrokeThickness="1"
/>
<TextBlock
x:Name="Text"
Text="{Binding Name}"
Margin="5,5,0,5"
FontSize="16"
/>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger
Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
Value="True"
>
<Setter
TargetName="Ellipse"
Property="Stroke"
Value="Orange"
/>
<Setter
TargetName="Ellipse"
Property="StrokeThickness"
Value="3"
/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
、およびありません"テキストボックス"。しかし、それはうまくいきました...私はなぜ、あなたは同じ効果を達成するでしょうか?たとえば、2つのテキストボックスがあり、1つだけの色を変更したい場合などです。 –
@ ShacharHar-Shuv更新を参照してください:ターゲットトリガーの詳細を示すテンプレートを追加し、依存関係プロパティ値の継承に関する記事をリンクしました。 –