添加嵌套MenuItem时子项不显示的问题求助
问题分析与解决
问题根源
你的代码中,MarkReadMI和MarkUnreadMI这两个子菜单项在添加到MarkAsMI的子项之前,先通过RegisterControl(Inbox_Grid, MarkReadMI)和RegisterControl(Inbox_Grid, MarkUnreadMI)被注册到了Inbox_Grid控件中。在WPF里,一个UI元素只能属于一个父容器,当你把MenuItem添加到Grid的可视化树后,它就无法再作为另一个MenuItem的子项存在,导致子菜单无法显示。
解决方案
直接移除对子菜单项的RegisterControl调用即可,因为上下文菜单的MenuItem不需要被添加到Grid这类可视化容器中。修改后的代码如下:
Private Function ReturnContexMenu() As ContextMenu Try Dim FlagMI As New MenuItem With FlagMI .Header = "Quick Flag" .Name = "FlagMI" End With RegisterControl(Inbox_Grid, FlagMI) ' 主菜单项若需注册可保留,依业务逻辑判断 Dim MarkReadMI As New MenuItem With MarkReadMI .Header = "Mark as read" .Name = "MarkReadMI" End With ' 移除该行:RegisterControl(Inbox_Grid, MarkReadMI) Dim MarkUnreadMI As New MenuItem With MarkUnreadMI .Header = "Mark as unread" .Name = "MarkUnreadMI" End With ' 移除该行:RegisterControl(Inbox_Grid, MarkUnreadMI) Dim MarkAsMI As New MenuItem With MarkAsMI .Header = "Mark as " .Items.Add(MarkReadMI) .Items.Add(MarkUnreadMI) End With Dim vMainContext As New ContextMenu With vMainContext .Name = "MainContextMenu" .Items.Add(FlagMI) .Items.Add(MarkAsMI) End With Return vMainContext Catch ex As Exception EmailError(ex) Return Nothing End Try End Function
补充说明
如果RegisterControl是你自定义的方法,用于绑定事件、命令或其他业务逻辑,请确保该方法不会将MenuItem添加到任何可视化容器的子元素集合中。若需绑定逻辑,直接在MenuItem实例上操作即可,无需将其注册到Grid。
内容的提问来源于stack exchange,提问作者gchq
相关产品推荐
相关产品推荐

