2009-07-01 8 views
1

J'ai un ListBox avec liaison de données. Je dois déclencher un événement lorsqu'un utilisateur clique sur l'un des ListBoxItems, mais je n'arrive pas à comprendre comment procéder. J'ai essayé de mettre une grille sur le ListBox.ItemTemplate et de mettre l'événement MouseDown sur ce point:MouseDown sur ListBoxItems avec liaison de données (WPF)

<ListBox 
    Name="popupListBox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid MouseDown="Grid_MouseDown" Background="Aquamarine"> 
       <TextBlock Text="{Binding Path=TagText}" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Cependant, la grille est généralement inférieure à la ListBoxItem réelle. Je n'arrive pas à savoir comment l'activer quand on clique sur une partie de celle-ci.

J'ai essayé d'examiner l'événement SelectionChanged sur la ListBox, mais cela ne se déclenche pas lorsque vous cliquez sur l'élément actuellement sélectionné.

J'ai également essayé d'éditer le style pour le ListBoxItem, mais je ne peux pas comprendre comment appliquer correctement un événement MouseDown à lui; J'ai toujours des erreurs de syntaxe.

+0

Cette question obtient une meilleure réponse: http://stackoverflow.com/questions/1271375/how-to-capture-a-mouse-click-on-an-item-in-a-listbox-in -wpf – RandomEngy

Répondre

0

Vous pouvez ajouter un ItemContainerStyle pour étirer le DataTemplate afin de remplir l'espace horizontal disponible. Les événements de souris vers le bas se déclencheraient maintenant où que vous cliquiez sur l'élément.

<ListBox Name="popupListBox"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 

    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid MouseDown="Grid_MouseDown" Background="Aquamarine"> 
       <TextBlock Text="{Binding Path=tagText}" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

C'est proche, mais il y a quelques pixels sur la gauche qui ne sont pas couverts par le contenu. J'espérais qu'il y aurait une solution plus propre. – RandomEngy

+0

D'accord si j'ajoute au ItemContainerStyle et rajoute le padding sur le TextBlock, cela semble fonctionner. Merci pour le conseil. – RandomEngy

Questions connexes