WPF:如何从Grid控件的所有区域打开ContextMenu

And*_*cus 10 c# wpf xaml contextmenu

我正在尝试将ContextMenu添加到WPF中ListBox中的项目;

<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>
Run Code Online (Sandbox Code Playgroud)

问题是ContextMenu只会在点击网格的实际上下文时打开,我希望能够通过单击列表框项目上的任意位置来打开菜单.

我应该将Grid包装在其他控件中吗?

Den*_*nis 18

自从我完成任何可靠的WPF开发(从应用程序开发转移到实际的游戏团队)以来已经过去了几个月.

从内存中,你想要设置ContextMenu属性Border然后设置Border.Background=Transparent.将背景设置为透明可确保它将参与命中检测.

替代解决方案是确保Grid元素水平和垂直拉伸以适合容器.

...

同时将其ContextMenu作为静态资源拉出,以便将来更容易查找/编辑.

希望这会有所帮助(我的记忆不会让我失望).

编辑:我之前在StackOverflow上回答了类似的问题,请参阅我在WPF上的答案:显示GridView项目的上下文菜单.这个答案更加完整,因为它把重点放在了ListItem.


epo*_*pox 6

正如你已经意识到的那样 - 感谢Dennis, - 你必须设置一些背景知识.是的,透明背景也行:

         <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>
Run Code Online (Sandbox Code Playgroud)

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