/// <summary> /// 通过元数据加载菜单 /// </summary> public void LoadMenus() { //IMenuService menuService = (IMenuService)application.GetService(typeof(IMenuService)); MainMenuPages.Clear(); MenuDict.Clear(); ISinoMenu _iSinoMenu = MenuConfig.GetMenuInterface(); UserMenuList = _iSinoMenu.GetAllMenus(SessionClass.CurrentSinoUser.CurrentPost.PostID); if (UserMenuList != null) { SinoMenuFatherFinder _finder = new SinoMenuFatherFinder("0"); List <SinoMenuItem> _TopLevelMenuList = UserMenuList.FindAll(new Predicate <SinoMenuItem>(_finder.FindByFather)); _TopLevelMenuList.Sort(new SinoMenuComparer()); foreach (SinoMenuItem _smi in _TopLevelMenuList) { if (_smi.MenuType.Length > 3 && _smi.MenuType.Substring(0, 3) == "WEB") { //这是WEB的菜单 } else if (_smi.MenuType.Length > 3 && _smi.MenuType.Substring(0, 3) == "SL_") { //这是Silverlight的菜单 } else { FrmMenuPage _fmp = new FrmMenuPage(_smi.MenuID, _smi.MenuTitle, _smi.CanUse); this.AddMainMenuPage(_fmp); AddSubMenu(_smi, UserMenuList, _fmp); } } } }
private void AddSubMenu(SinoMenuItem _fmenuitem, List <SinoMenuItem> _menuList, FrmMenuPage _fmp) { SinoMenuFatherFinder _finder = new SinoMenuFatherFinder(_fmenuitem.MenuID); List <SinoMenuItem> _subMenuList = _menuList.FindAll(new Predicate <SinoMenuItem>(_finder.FindByFather)); _subMenuList.Sort(new SinoMenuComparer()); foreach (SinoMenuItem _smi in _subMenuList) { FrmMenuGroup _fmg = new FrmMenuGroup(_smi.MenuID, _smi.MenuTitle, _smi.CanUse); this.AddMenuGroup(_fmp, _fmg); if (_smi.MenuType != "") { MenuTypeBase _mtype = MenuTypeCreator.CreateMenuType(_smi.MenuType); IPluginService pluginService = (IPluginService)application.GetService(typeof(IPluginService)); IPlugin _plugin = pluginService.GetPluginInstance(_mtype.MenuTypePluginName); if (_plugin == null) { RaiseLoadErrord(new CommonEventArgs(string.Format("未找到组菜单定义:{0}", _mtype))); } else { _plugin.Load(_fmg, _smi.MenuParameter); } } else { this.AddSubMenuItem(_smi, _menuList, _fmg); } } }
/// <summary> /// 建三级子菜单记录 /// </summary> /// <param name="_mitem"></param> /// <param name="_menuList"></param> /// <returns></returns> private List <FrmMenuItem> CreateChildItems(FrmMenuItem _fmenuitem, List <SinoMenuItem> _menuList) { FrmMenuItem _mitem = null; List <FrmMenuItem> _ret = new List <FrmMenuItem>(); SinoMenuFatherFinder _finder = new SinoMenuFatherFinder(_fmenuitem.MenuID); List <SinoMenuItem> _subMenuList = _menuList.FindAll(new Predicate <SinoMenuItem>(_finder.FindByFather)); _subMenuList.Sort(new SinoMenuComparer()); foreach (SinoMenuItem _smi in _subMenuList) { if (_smi.CanUse) { if (_smi.MenuType == "") { _mitem = new FrmMenuItem(_smi.MenuID, _smi.MenuTitle, "", global::SinoSZClientBase.Properties.Resources.foward2, _smi.CanUse, null); } else { #region 类型定义 string[] _typeStrs = _smi.MenuType.Split('.'); if (_typeStrs.Length > 1) { string _pluginName = _typeStrs[0]; string _commandName = _typeStrs[1]; IPluginService pluginService = (IPluginService)application.GetService(typeof(IPluginService)); IPlugin _plugin = pluginService.GetPluginInstance(_pluginName); if (_plugin == null) { RaiseLoadErrord(new CommonEventArgs(string.Format("未找到菜单定义用的插件:{0}", _pluginName))); _mitem = new FrmMenuItem(_smi.MenuID, _smi.MenuTitle, "", global::SinoSZClientBase.Properties.Resources.foward2, _smi.CanUse, null); } else { _mitem = _plugin.GetMenuItem(_commandName, _smi.MenuTitle, _smi.MenuParameter); _mitem.MenuID = _smi.MenuID; } } #endregion } _ret.Add(_mitem); _mitem.ChildMenus = CreateChildItems(_mitem, _menuList); } } return(_ret); }