2010-10-14 13 views
7

J'essaie d'ajouter un ContextMenu aux éléments d'un ListBox dans WPF;WPF: Comment ouvrir un ContextMenu à partir de toutes les zones d'un contrôle Grid

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

Le problème est que le ContextMenu ouvrira uniquement en cliquant sur le contexte actuel de la grille, je veux être en mesure d'ouvrir le menu en cliquant n'importe où sur l'élément Listbox.

Dois-je envelopper la grille dans un autre contrôle?

+0

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

Répondre

17

Cela fait plusieurs mois que j'ai réalisé un solide développement WPF (il a été déplacé du développement d'applications à une équipe de jeu).

De mémoire, vous souhaitez définir la propriété ContextMenu sur le Border, puis définissez le Border.Background=Transparent. Définir l'arrière-plan sur transparent garantit qu'il participera à la détection d'accès.

Une autre solution serait de vous assurer que l'élément Grid s'étire horizontalement et verticalement pour s'adapter au conteneur.

...

également tirer le ContextMenu comme une ressource statique, qui est sera plus facile à trouver/modifier à l'avenir.

Espérons que cela aide (et ma mémoire ne me manque pas).

EDIT: J'ai déjà répondu à une question similaire sur StackOverflow, veuillez voir ma réponse au WPF: Displaying a Context Menu for a GridView's Items. Cette réponse est plus complète car elle met l'accent sur le ListItem.