WPF: Как открыть ContextMenu из всех областей элемента управления Grid - PullRequest
10 голосов
/ 14 октября 2010

Я пытаюсь добавить ContextMenu к элементам в ListBox в WPF;

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

Проблема в том, что ContextMenu открывается только при нажатии на фактический контекст сетки, я хочуиметь возможность открыть меню, щелкнув в любом месте элемента списка.

Должен ли я обернуть сетку в какой-либо другой элемент управления?

Ответы [ 2 ]

18 голосов
/ 14 октября 2010

Прошло несколько месяцев с тех пор, как я занимался какой-либо серьезной разработкой WPF (перешел от разработки приложений к реальной игровой команде).

Из памяти вы хотите установить свойство ContextMenu для Border, а затем установить Border.Background=Transparent. Установка прозрачного фона гарантирует, что он будет участвовать в обнаружении попадания.

Альтернативным решением было бы убедиться, что элемент Grid растягивается по горизонтали и вертикали, чтобы соответствовать контейнеру.

...

Также извлеките ContextMenu как статический ресурс, чтобы его было легче найти / отредактировать в будущем.

Надеюсь, это поможет (и моя память не подведет меня).

РЕДАКТИРОВАТЬ: Ранее я уже отвечал на аналогичный вопрос о StackOverflow, см. Мой ответ по WPF: отображение контекстного меню для элементов GridView . Этот ответ является более полным, поскольку он фокусируется на ListItem.

6 голосов
/ 22 июня 2016

Как вы уже поняли, - благодаря Деннису, - вы должны установить некоторый фон. Да, прозрачный фон тоже в порядке:

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

СПРАВКА: https://blogs.msdn.microsoft.com/domgreen/2008/12/08/wpf-hit-testing-with-event-bubbling/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...