2010-12-11 89 views
6

Je veux pour ma Listbox dans un menu contextuel WPF. Je l'ai fait avec un menu contextuel pour toute la listbox, mais vous pouvez enrichir-cliquez pour obtenir le menu contextuel même si vous ne cliquez pas sur un élément.C#: Listbox Contextmenu pour Listboxitems (WPF)

J'ai trouvé quelque chose sur google, mais cela n'a pas fonctionné.

J'ai essayé quelque chose comme ceci:

<ListBox Margin="5" ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"> 
       <TextBlock.ContextMenu> 
        <ContextMenu> 
         <MenuItem Header="{Binding Name}" Click="MenuItemName_Click"/> 
         <MenuItem Header="{Binding Capital}" Click="MenuItemCapital_Click"/> 
         <MenuItem Header="{Binding Population}" Click="MenuItemPopulation_Click"/> 
        </ContextMenu> 
       </TextBlock.ContextMenu> 
      </TextBlock> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Je l'ai essayé avec un textblock comme dans l'exemple, avec d'autres éléments comme dans d'autres tutoriels, je me suis lassé sans et beaucoup d'autres choses- mais rien ne fonctionnait. Pas contextmenu pour mes articles listbox :(

plus tard j'ai essayé quelque chose comme ceci:

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <ListBoxItem> 
      <ListBoxItem.ContextMenu> 
       <ContextMenu> 
        <MenuItem/> 
       </ContextMenu> 
      </ListBoxItem.ContextMenu> 
     </ListBoxItem> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

Mais ça n'a pas trop

Quelqu'un peut-il me donner un indice/exemple de travail :).?

merci

+0

Ce qui ne fonctionne pas exactement? Vous devez être plus précis ... Avez-vous vérifié la fenêtre de sortie dans VS pour les erreurs de liaison? –

Répondre

13

Je définiriez le ContextMenu dans le style de la ListBoxItem, plutôt que dans le DataTemplate:

<ListBox Name="simpleListBox" 
     ItemsSource="{Binding SimpleList}" 
     DisplayMemberPath="Name"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="ContextMenu"> 
       <Setter.Value> 
        <ContextMenu> 
         ... 
        </ContextMenu> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
+0

@Thomas, je lie la commande avec un RelayCommand dans MenuItem, mais le RalayCommand n'est jamais appelé. – SubmarineX

+0

@ SubmarineX, pouvez-vous voir des erreurs de liaison dans la fenêtre de sortie? Si vous voyez quelque chose comme "Ne peut pas trouver de gouvernance FrameworkElement ...", jetez un oeil à [cette solution] (http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to- data-when-the-datacontext-is-not-inherited /) –

+0

@ThomasLevesque merci, maintenant je l'ai. Parce que le datacontext de ListBoxItem n'est pas le datacontext de la ListBox, donc je lie la commande au datacontext de ListBoxItem, puis par messager notifie le datacontext de la listbox. Et plus tard, je verrai votre solution. – SubmarineX