2010-12-11 4 views
6

ich für meine Listbox ein contextmenu in WPF wollen. Ich habe es mit einem Kontextmenü für die gesamte Listbox gemacht, aber Sie können mit einem Ritt-Klick das Kontextmenü aufrufen, auch wenn Sie nicht auf ein Element klicken.C#: Listbox contextMenu für ListBoxItems (WPF)

fand ich etwas bei Google, aber dies aus nicht funktionierte.

habe ich versucht, so etwas wie dieses:

<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> 

Ich versuchte es mit einem Textblock wie im Beispiel mit anderen Elementen wie in anderen Tutorials, ich müde, um es ohne und viele andere Dinge- aber nichts funktionierte. Keine contextmenu für meinen Listbox Artikel :(

später habe ich versucht, so etwas wie diese:

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

Aber es hat nicht arbeiten

Kann mir jemand einen Tip geben/Arbeitsbeispiel :).?

danke

+0

Was genau nicht funktioniert? Sie müssen genauer sein ... Haben Sie das Ausgabefenster in VS auf verbindliche Fehler überprüft? –

Antwort

13

ich die ContextMenu im Stil s ListBoxItem‘gesetzt würde, anstatt in den 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, verbinde ich den Befehl mit einem RelayCommand in MenuItem, aber der RalayCommand wird nie aufgerufen. – SubmarineX

+0

@SubmarineX, können Sie Bindungsfehler im Ausgabefenster sehen? Wenn Sie etwas wie "Kann nicht finden, FrameworkElement ..." finden, sehen Sie sich [diese Lösung] (http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to- Daten-wenn-der-Datenkontext-ist-nicht-vererbt /) –

+0

@ThomasLevesque Danke, jetzt habe ich es. Da der Datacontext des ListBoxItem nicht der Datenkontext der ListBox ist, verbinde ich den Befehl mit dem DataContext von ListBoxItem, dann benachrichtige ich ihn über den DataContext der Listbox. Und später werde ich deine Lösung sehen. – SubmarineX