当前位置:编程学习 > C#/ASP.NET >>

wpf MenuItem 动态删除不起作用

自己写了一个 程序菜单管理类 
在调用 DeleteItem 方法时 不能删除 菜单项目。这个功能关系到程序的整体构架 
public class LcdMenuManager:IlcdMenu
    {
        Menu lcdMenu;        
        public Menu LcdMenu
        {
            get { return lcdMenu; }
            set {lcdMenu=value;}
        }

        Dictionary<string, MenuItem> menuItems = new Dictionary<string, MenuItem>();

        public MenuItem GetMenuItem(string header)
        {
            if (!menuItems.Keys.Contains(header))
                return null;
            MenuItem mi = menuItems[header];
            return mi;
        } 
        
        public MenuItem AddItem(string father, string header, RoutedEventHandler handler)
        {
            MenuItem mi = new MenuItem();
            mi.Header = header;
            mi.Name = header;
            if (handler != null)
                mi.Click += handler;
            menuItems.Add(header, mi);
            if (!string.IsNullOrEmpty(father))
            {
                MenuItem fr = GetMenuItem(father);
                fr.Items.Add(mi);
                return fr;
            }
            lcdMenu.Items.Add(mi);
            
            return mi;
        } 
        
               //下面的函数不能 删除 菜单项目 
        public LcdMenuManager DeleteItem(string header)
        {
            MenuItem mi = GetMenuItem(header);
            if (mi != null)
            {
                
                mi.Items.Clear();
                lcdMenu.Items.Remove(mi);
//这里不起作用 
                lcdMenu.Items.Refresh();
                menuItems.Remove(header);
            }
            return this;
        }

                public LcdMenuManager()
        {
            // TODO: Complete member initialization
        } 
        
                public LcdMenuManager(Menu MainMenu)
        {
            // TODO: Complete member initialization
            this.lcdMenu = MainMenu;
        } 
        #endregion

        
    } wpf Menu MenuItem --------------------编程问答-------------------- 下一个断点,看看mi是不是null --------------------编程问答-------------------- mi 不为null  主要是 remove 不起作用  另 items.indexof(mi) 会出异常 --------------------编程问答-------------------- indexof应该不会产生异常的吧,
你的GetMenuItem(header)有问题,因为你的lcdMenu里面包含的是一级菜单,而它只能remove一级菜单的内容,所以你的remove是失败的。
要通过GetMenuItem得到的Menu的ParentMenu的remove方法,去remove
补充:.NET技术 ,  .NET Framework
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,