2010-12-11 12 views
6

quiero para mi Listbox en WPF un menú contextual. Lo hice con un menú contextual para todo el cuadro de lista, pero puede hacer clic en richt para obtener el menú contextual incluso si no hace clic en un elemento.C#: Listbox Contextmenu para Listboxitems (WPF)

Encontré algo en Google, pero esto no funcionó.

que hemos probado algo como esto:

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

lo probé con un bloque de texto como en el ejemplo, con otros elementos como en otros tutoriales, i cansado sin y muchos otras cosas- pero nada funcionó. Sin contextual para mis artículos cuadro de lista :(

tarde he intentado algo como esto:

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

Pero no funcionó demasiado

Alguien me puede dar una pista/ejemplo de trabajo :).?

agradecimiento

+0

¿Qué es exactamente no funciona? Necesita ser más específico ... ¿Revisó la ventana de salida en VS para ver si hay errores de enlace? –

Respuesta

13

que debería definir el ContextMenu en estilo 's la ListBoxItem, en lugar de en el 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, estoy vinculando el Comando con un RelayCommand en MenuItem, pero nunca se llama al RalayCommand. – SubmarineX

+0

@SubmarineX, ¿puedes ver algún error de enlace en la ventana de resultados? Si ve algo como "No se puede encontrar FrameworkElement que rige ...", eche un vistazo a [esta solución] (http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to- data-when-the-datacontext-is-not-inherited /) –

+0

@ThomasLevesque gracias, ahora lo tengo. Debido a que el contexto de datos de ListBoxItem no es el contexto de datos de ListBox, entonces estoy vinculando el comando al contexto de datos de ListBoxItem, y luego a través de messager notifica el contexto de datos de la lista. Y luego veré tu solución. – SubmarineX