You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:07:03