Para definir o estilo quando o item é selecionado ou não, tudo o que você precisa fazer é recuperar o ListBoxItem
pai em seu <DataTemplate>
e acionar as mudanças de estilo quando ele IsSelected
mudar. Por exemplo, o código abaixo criará um TextBlock
com a Foreground
cor padrão verde . Agora, se o item for selecionado, a fonte ficará vermelha e quando o mouse estiver sobre o item ficará amarelo . Dessa forma, você não precisa especificar modelos de dados separados, conforme sugerido em outras respostas, para cada estado que deseja alterar ligeiramente.
<DataTemplate x:Key="SimpleDataTemplate">
<TextBlock Text="{Binding}">
<TextBlock.Style>
<Style>
<Setter Property="TextBlock.Foreground" Value="Green"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem }}}"
Value="True">
<Setter Property="TextBlock.Foreground" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem }}}"
Value="True">
<Setter Property="TextBlock.Foreground" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>