2010-04-11 2 views
8

J'essaie de créer un style pour une liste qui définira l'élément sélectionné à un élément lorsque l'élément a la souris dessus.WPF listbox sélectionnez l'objet sur la souris sur

Des indices?

+0

Bonne question. Il serait bon de trouver si ce type de redirection d'événement est possible en utilisant des modèles, pas de code-behind. – Russell

Répondre

13

Vous pouvez le faire en utilisant un style dans la zone de liste lui-même qui touche tous ses éléments:

<ListBox.Resources> 
    <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self}}" 
         Value="True"> 
       <Setter Property="IsSelected" Value="True" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</ListBox.Resources> 

Ça va définir la propriété IsSelected sur l'élément à true lorsque la propriété IsMouseOver est vrai. Pourvu que votre ListBox ne soit pas multi-select, il fonctionne comme vous le souhaitez.

+0

Fonctionne bien. Bizarrement, quand I Data se lie à SelectedItem et que l'objet auquel il se lie a une valeur au préalable, la souris ne sélectionne pas cet élément (si vous partez et revenez). Des idées? –

+0

C'est assez étrange. Par intérêt, essayez d'ajouter un setter pour définir IsSelected sur false dans le style (en dehors du trigger). –

+0

Non, ne le répare pas. Je peux contourner le problème (en n'en ayant pas sélectionné au démarrage), mais c'est quelque chose qui ne me dérangerait pas. –