2010-10-14 13 views
7

Próbuję dodać ContextMenu do elementów ListBox w WPF;WPF: Jak otworzyć ContextMenu ze wszystkich obszarów formantu siatki

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

Problemem jest to, że ContextMenu otworzy dopiero po kliknięciu na rzeczywistym kontekście siatki, chcę, aby móc otworzyć menu klikając na dowolnym elemencie ListBox.

Czy powinienem owijać Grid w inny element kontrolny?

+0

Zobacz http://stackoverflow.com/questions/13420994/how-to-display-context-menu-for-treeview-item- w-hierarchii-danych-szablon-w/28310591 # 28310591 – Contango

Odpowiedz

17

Minęło kilka miesięcy, odkąd zrobiłem solidny rozwój WPF (został przeniesiony z rozwoju aplikacji do rzeczywistego zespołu gry).

Z pamięci należy ustawić właściwość ContextMenu na urządzeniu Border, a następnie ustawić wartość Border.Background=Transparent. Ustawienie tła na przezroczyste zapewnia, że ​​będzie ono uczestniczyć w wykryciu trafienia.

Alternatywne rozwiązanie, zapewni, że element Grid rozciąga się poziomo i pionowo, aby zmieścił się w kontenerze.

...

ciągnąć Również ContextMenu jako zasób statycznej, więc to będzie łatwiej znaleźć/edytować w przyszłości.

Mam nadzieję, że to pomoże (a moja pamięć mnie nie zawiodła).

EDIT: Mam odpowiedział podobne pytanie na StackOverflow wcześniej, proszę zobaczyć moją odpowiedź na WPF: Displaying a Context Menu for a GridView's Items. Ta odpowiedź jest bardziej kompletna, ponieważ skupia się na ListItem.

Powiązane problemy