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.
正如你已经意识到的那样 - 感谢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/
| 归档时间: |
|
| 查看次数: |
11054 次 |
| 最近记录: |