如何将一个ContextMenu中的MenuItem复制到另一个ContextMenu中

4
我如何复制我在一个ContextMenu中创建的MenuItem并使其可用于第二个ContextMenu?
我尝试直接复制和删除它,但是我收到“元素已经有逻辑父级。在附加到新父级之前,必须将其与旧父级分离。”的错误提示。
foreach(MenuItem mi in menuOptions.Items) { 
    entityRightClick.Items.Add(mi);
    menuOptions.Items.Remove(mi);
}

我尝试使用ItemContainerGenerator获取MenuItem,但它返回了一个空的MenuItem(调试器显示其为null)。
for(int i = 0; i < menuOptions.Items.Count; i++) {
    MenuItem temp = new MenuItem();
    temp = menuOptions.ItemContainerGenerator.ContainerFromIndex(i) as MenuItem;
    entityRightClick.Items.Add(temp);
}
1个回答

4
根据您的错误信息,我认为以下代码可以运行(尽管我没有测试过):
foreach(MenuItem mi in menuOptions.Items) 
{      
     menuOptions.Items.Remove(mi);
     entityRightClick.Items.Add(mi);
 }

当我这样做时,它会给我 System.InvalidOperationException: 集合已修改;枚举操作无法执行。 - Bob.
糟糕!当然,因为foreach循环 :) 所以这样做:List<MenuItem> items = new List<MenuItem>(menuOptions.Items); menuOptions.Items.Clear; foreach(MenuItem mi in items) { entityRightClick.Items.Add; } //对于格式化不好的部分我表示抱歉 - Kell
1
将menuOptions更改为List<MenuItems>会更容易吗?它是否会像ContextMenu一样将MenuItems绑定到列表中? - Bob.
很棒的甜点。如果我使用List<MenuItem>,则在我需要它时才添加它,否则它不会绑定到任何东西。 - Bob.
@Kell 谢谢你的解决方案,但我需要创建一个 List<object>,因为 ItemsCollection 可能不仅包含 MenuItem 对象(例如分隔符)。 - LuckyLikey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接