2011-09-26 17 views
6

que tienen código como este:WPF ListBoxItem y ContextMenu

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Vertical" 
        ContextMenuService.ShowOnDisabled="True"> 
      <StackPanel.ContextMenu> 
       <ContextMenu> 
        <MenuItem Command="Delete" Click="DeleteEvent">  
        </MenuItem> 
       </ContextMenu> 
      </StackPanel.ContextMenu> 
       <TextBlock Text="{Binding EventName}"> 
      </TextBlock>   
     </StackPanel> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

Desafortunadamente no funciona. Mi menú contextual está deshabilitado (se muestra pero no puedo hacer clic porque está deshabilitado). He leído que este problema está relacionado con el problema de selección, pero no encontré ninguna solución para eso. ¿Tienes alguna idea?

+0

¿Por qué intenta configurar el evento Click y el comando del MenuItem al mismo tiempo? ¿Desea también que se muestre este ContextMenu para cada elemento o para la lista? Aquí está configurado para toda la lista. – Ucodia

+0

¿Puede ser más específico o darme más detalles sobre su solución? – radzio

+0

@Ucodia: ¿por qué para toda la lista? Parece que está configurado dentro de ListBox.ItemTemplate? – sll

Respuesta

5

En primer lugar, algo extraño es que está tratando de establecer Comando y el evento Click. Debes establecer uno o el otro. Quizás el hecho de que la acción esté deshabilitada se debe a que está configurando un Comando con un valor de CanExecute = false;

En lugar de escribir un DataTemplate, se puede tratar de establecer el ItemContainerStyle para la ListBoxItem así:

<ListBox> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="ContextMenu"> 
       <Setter.Value> 
        <ContextMenu> 
         <MenuItem Header="Delete" Click="DeleteEvent"/> 
        </ContextMenu> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="Content" Value="{Binding Path=EventName}"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

Aquí ajustar directamente el ContextMenu de la instancia ListBoxItem por lo que mostrará el menú en el mando a la derecha .

+2

Lamentablemente recibí este error con tu solución: {"No se puede convertir el objeto de tipo 'System.Windows.Controls. MenuItem 'para escribir' System.Windows.Controls.Button '. "} – radzio

+0

Entonces tal vez debería ser más preciso en lo que exactamente está tratando de hacer con esta lista, porque esto no debería arrojar este tipo de excepción. – Ucodia

+0

Agregué el menú contextual a Recursos y está funcionando: http://stackoverflow.com/questions/4752273/setting-event-handlers-inside-a-setter-value-structure – radzio

0

Usted sólo tiene que cambiar de comandos a la cabecera y el mango DeleteEvent

<ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical" 
         ContextMenuService.ShowOnDisabled="True"> 
       <StackPanel.ContextMenu> 
        <ContextMenu> 
         <MenuItem Header="Delete" Click="DeleteEvent">  
         </MenuItem> 
        </ContextMenu> 
       </StackPanel.ContextMenu> 
        <TextBlock Text="{Binding EventName}"> 
       </TextBlock>   
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
0

ListBox ya tienen un MenuContext. Puede probarlo

<ListBox x:Name="MyistBox">      
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding Name}"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
     <ListBox.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="Update"/> 
       <MenuItem Header="Delete"/> 
      </ContextMenu> 
     </ListBox.ContextMenu> 
    </ListBox> 
Cuestiones relacionadas