2009-10-07 14 views
4

J'ai un ListBox avec un ItemTemplate plutôt simple défini - contenant un TextBlock et un Button. Cela affiche comme prévu, mais il y a un problème cependant. Lorsque je clique sur le contenu du ListBoxItem, c'est-à-dire le texte ou le bouton, la ligne n'est pas sélectionnée dans le ListBox. Si je clique sur les parties vides de la ligne, c'est le cas. Je voudrais que le ListBoxItem soit sélectionné lorsque je clique n'importe où sur la ligne. Qu'est-ce qui est nécessaire pour y parvenir?Rendre WPF ListBoxItems sélectionnable

<ListBox ItemsSource="{Binding SomeElements}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <ListBoxItem Selected="ListBoxItem_Selected"> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Title}"></TextBlock> 
        <Button>Click</Button> 
       </StackPanel>             
      </ListBoxItem>            
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

[Voici la réponse à votre problème.] (Http://stackoverflow.com/questions/1459786/selecting-a-listboxitem-when-its-inner-combobox-is-focused/1459885#1459885 Le questionneur était en train de vivre le même problème. – Natrium

Répondre

4

@Natrium Non, le problème est différent ici,

  1. Vous devez supprimer ListBoxItem l'intérieur DataTemplate. DataTemplate ne peut pas avoir d'élément ListBoxItem et cela ne fonctionnera pas correctement. Tout ce que vous définissez dans DataTemplate est automatiquement placé dans ListBoxItem à l'exécution, donc dans votre cas, c'est ce qu'il est créé.
ListBoxItem 
    DataTemplate 
     ListBoxItem 
      StackPanel... 
  1. Si vous souhaitez suivre l'événement de sélection, alors vous ne devriez attraper événement ListBox.SelectionChange, vous ne devez suivre ListBoxItem_Selected.

Modifiez votre code pour cela.

<ListBox ItemsSource="{Binding SomeElements}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Title}"></TextBlock> 
        <Button>Click</Button> 
       </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

Parfait ..! Merci d'avoir clarifié ceci :-) – stiank81