2010-12-11 6 views
6

Voglio che il mio Listbox in WPF sia un menu di scelta rapida. L'ho fatto con un menu contestuale per l'intera listbox, ma puoi fare richt-click per ottenere il menu contestuale anche se non fai clic su un elemento.C#: menu di scelta rapida Listbox per Listboxitems (WPF)

Ho trovato qualcosa su google, ma questo non ha funzionato.

Ho provato qualcosa di simile:

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

ho provato con un blocco di testo come nell'esempio, con altri elementi, come in altri tutorial, mi stanco senza e molti altri cose- ma niente ha funzionato. Nessun contextmenu per i miei elementi ListBox :(

dopo ho provato qualcosa di simile:

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

Ma non ha funzionato troppo

Qualcuno può darmi un suggerimento/esempio di lavoro :).?

ringraziamento

+0

Che cosa non funziona? Devi essere più specifico ... Hai controllato la finestra di output in VS per gli errori di binding? –

risposta

13

vorrei impostare il ContextMenu nello stile ListBoxItem s', piuttosto che nel 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, lego il comando a RelayCommand in MenuItem, ma non viene mai chiamato RalayCommand. – SubmarineX

+0

@SubmarineX, è possibile visualizzare eventuali errori di associazione nella finestra di output? Se vedi qualcosa come "Impossibile trovare il FrameworkElement che governa ...", dai un'occhiata a [questa soluzione] (http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to- data-when-the-datacontext-is-not-inherited /) –

+0

@ThomasLevesque grazie, ora ce l'ho. Poiché il datacontext di ListBoxItem non è il datacontext di ListBox, quindi lego il comando al datacontext di ListBoxItem, quindi tramite messager notifica il datacontext della casella di riepilogo. E più avanti vedrò la tua soluzione. – SubmarineX