2010-10-14 11 views
7

Estoy tratando de agregar un ContextMenu a elementos en un ListBox en WPF;WPF: Cómo abrir un ContextMenu desde todas las áreas de un control de cuadrícula

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <Border>       
      <Grid> 
       <Grid.ContextMenu> 
        <ContextMenu>          
         <MenuItem Header = "Menu item 1"/> 
         <MenuItem Header = "Menu item 2"/> 
         <MenuItem Header = "Menu item 3"/> 
        </ContextMenu> 
       </Grid.ContextMenu> 
        ........ 
        ........ 
      </Grid> 
     </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 

El problema es que el ContextMenu sólo abrirá al hacer clic en el contexto real de la cuadrícula, quiero ser capaz de abrir el menú haciendo clic en cualquier parte del elemento de cuadro de lista.

¿Debo envolver la Rejilla en algún otro control?

+0

Ver http://stackoverflow.com/questions/13420994/how-to-display-context-menu-for-treeview-item- in-a-hierarchial-data-template-in/28310591 # 28310591 – Contango

Respuesta

17

Han pasado varios meses desde que hice un desarrollo sólido de WPF (se pasó del desarrollo de aplicaciones a un equipo de juego real).

De memoria, desea establecer la propiedad ContextMenu en el Border y luego configurar el Border.Background=Transparent. Establecer el fondo en transparente asegura que participará en la detección de aciertos.

Solución alternativa, sería asegurar que el elemento Grid se extienda horizontal y verticalmente para ajustarse al contenedor.

...

también tirar de la ContextMenu como un recurso estático, por lo que es, será más fácil de encontrar/editar en el futuro.

Espero que esto ayude (y mi memoria no me falla).

EDIT: He respondido una pregunta similar sobre StackOverflow anteriormente, consulte mi respuesta en WPF: Displaying a Context Menu for a GridView's Items. Esta respuesta es más completa ya que establece el foco en el ListItem.

2

Como ya se ha dado cuenta, gracias a Dennis, tiene que establecer algunos antecedentes. Sí, fondo transparente también está bien:

  <Grid Background="Transparent"> 
      <Grid.ContextMenu> 
       <ContextMenu>          
        <MenuItem Header = "Menu item 1"/> 
        <MenuItem Header = "Menu item 2"/> 
        <MenuItem Header = "Menu item 3"/> 
       </ContextMenu> 
      </Grid.ContextMenu> 
       ........ 
       ........ 
     </Grid> 

REFERENCIA: https://blogs.msdn.microsoft.com/domgreen/2008/12/08/wpf-hit-testing-with-event-bubbling/

Cuestiones relacionadas