실제로 항목이 선택되었는지 여부에 관계없이 항상 동일한 항목 템플리트가 필요하지만 항목을 선택할 때 다른 전경색을 원한다면 쉽습니다. 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의"의 전경 속성을 변경 한 때문에 작동하지 않을 생각에서
<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>
, 그리고 "TextBox". 하지만 그것은 효과가있었습니다 ... 왜 그런지 궁금합니다. 예를 들어 두 개의 텍스트 박스가 있고 하나의 색상 만 변경하려는 경우 동일한 효과를 얻으실 수 있습니까? –
@ ShacharHar-Shuv 업데이트보기 : 대상 트리거를 더 많이 보여주는 템플릿을 추가하고 종속성 속성 값 상속에 대한 기사를 연결했습니다. –