• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

WPF权限控制框架——【2】模块、菜单、按钮

其他 开心洋葱 1845次浏览 0个评论

 

周末没有工作,没有写博客,因为觉得休息很必要;曾听到一句话是这样说的:你们得救在乎归回安息;你们得力在乎平静安稳。当我想到太阳没秒钟要燃烧420万吨的燃料时,想到的就是造物主的厚爱与自己的渺小,如果一直忙碌下去,一直觉得自己很了不起,地球缺了我就不转了,那我真的是没救了!

 

这次博客的标题是模块、菜单、按钮;到目前为止还没有创建数据库,所有的模块名称,模块图标以及菜单名称,菜单按钮或是菜单按钮图标都是在代码中来完成定义,先来看下效果:

WPF权限控制框架——【2】模块、菜单、按钮

 

接口代码定义:

接口代码目前主要是来规范模块和菜单的,贴下代码:

WPF权限控制框架——【2】模块、菜单、按钮WPF权限控制框架——【2】模块、菜单、按钮

 1 /// <summary>
 2     /// 定义所有插件属性  3     /// </summary>
 4     public interface IPlugin  5  {  6         /// <summary>
 7         /// 插件编码  8         /// </summary>
 9         string PluginCode { get; } 10         /// <summary>
11         /// 插件名称 12         /// </summary>
13         string PluginName { get; } 14         /// <summary>
15         /// 插件图标 16         /// </summary>
17         string Icon { get; } 18         /// <summary>
19         /// 插件排序 20         /// </summary>
21         int Index { get; } 22         /// <summary>
23         /// 模块列表 24         /// </summary>
25         List<Menus> MenuList { get; } 26     }

模块接口代码
WPF权限控制框架——【2】模块、菜单、按钮WPF权限控制框架——【2】模块、菜单、按钮

 1  public interface IMenu  2  {  3         /// <summary>
 4         /// 菜单编码  5         /// </summary>
 6         string MenuCode { get; }  7         /// <summary>
 8         /// 菜单名称  9         /// </summary>
10         string MenuName { get; } 11         /// <summary>
12         /// 菜单排序 13         /// </summary>
14         int MenuIndex { get; } 15         /// <summary>
16         /// 分组名称 17         /// </summary>
18         string GroupName { get; } 19         /// <summary>
20         /// 分组排序 21         /// </summary>
22         int GroupIndex { get;} 23         /// <summary>
24         /// 菜单实例 25         /// </summary>
26         FrameworkElement Element { get; } 27         /// <summary>
28         /// 菜单按钮 29         /// </summary>
30         List<MenusButton> ButtonList { get; } 31 
32     }

菜单接口代码

插件接口实现:

接下来就是接口的实现了,因为我们采用插件化的开发模式,也可以叫做MEF;所以就要在每个插件中来实现接口。目前所有的插件都是以用户控件的模式来创建的,以类库类型输出,然后在启动程序中添加对插件的引用。

每个插件中都有一个实现IPlugin接口的类,是这样实现的:

WPF权限控制框架——【2】模块、菜单、按钮WPF权限控制框架——【2】模块、菜单、按钮

 1  [Export(typeof(IPlugin))]  2     public class SysManagerPlugin: IPlugin  3  {  4         public string PluginCode => "SysManagerPlugin";  5         public string PluginName => "系统管理";  6         public string Icon => "images/Settings.png";  7         public int Index => 1;  8         public List<Menus> MenuList  9  { 10             get
11  { 12                 List<Menus> menus = new List<Menus>(); 13                 var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); 14                 using (CompositionContainer container = new CompositionContainer(catalog)) 15  { 16                     var list = container.GetExportedValues<IMenu>(); 17                     if (null != list && list.Count() > 0) 18  { 19                         list.ToList().ForEach(x => { 20                             menus.Add(new Menus() { MenuName = x.MenuName, MenuCode = x.MenuCode, MenuIndex = x.MenuIndex, Element = x.Element, GroupName = x.GroupName, GroupIndex = x.GroupIndex, ButtonList = x.ButtonList }); 21  }); 22  } 23  } 24                 return menus; 25  } 26  } 27     }

IPlugin实现

通过代码我们可以看到,在实现接口的时候,就定义了插件所对应模块的名称,模块图标,模块排序以及模块中的菜单列表,菜单列表中的每一项都是以用户控件的形式来创建的,每一个用户控件对应一个菜单内容,每一个菜单所对应的用户控件都实现了IMenu接口,来展示下:

WPF权限控制框架——【2】模块、菜单、按钮WPF权限控制框架——【2】模块、菜单、按钮

 1  [Export(typeof(IMenu))]  2     public partial class UserFrm : UserControl, IMenu  3  {  4         public UserViewModel ViewModel { get; set; }  5         public UserFrm()  6  {  7  InitializeComponent();  8             ViewModel = new UserViewModel();  9             this.DataContext = ViewModel; 10             this.ButtonArray.ItemsSource = ButtonList; 11  } 12         public string MenuCode => "1001"; 13         public string MenuName => "用户管理"; 14         public int MenuIndex => 1; 15         public string GroupName => "基础设置"; 16         public int GroupIndex => 1; 17         public FrameworkElement Element => new UserFrm(); 18         public List<MenusButton> ButtonList => new List<MenusButton>
19  { 20             new MenusButton{ButtonCode="100101",ButtonName="新增",ButtonIndex=1,ButtonIcon=EnumHelper.GetEnumDescription(ButtonIcon.Add),ButtonCommand=ViewModel.AddCommand }, 21             new MenusButton{ButtonCode="100103",ButtonName="编辑",ButtonIndex=3,ButtonIcon=EnumHelper.GetEnumDescription(ButtonIcon.Edit) }, 22             new MenusButton{ButtonCode="100105",ButtonName="删除",ButtonIndex=5,ButtonIcon=EnumHelper.GetEnumDescription(ButtonIcon.Delete) }, 23  }; 24         private void dgList_LoadingRow(object sender, DataGridRowEventArgs e) 25  { 26             e.Row.Header = e.Row.GetIndex() + 1; 27  } 28     }

IMenu实现

通过代码我们看到,在实现接口的时候,就定义了菜单编码,菜单名称,菜单所属分组,分组名称以及按钮集合等,在按钮集合中也包含了按钮名称,按钮图标以及按钮对应的命令。最后启动程序在初始化的时候,读取所有插件中定义的模块以及菜单与按钮,接下来提供下目前的项目截图:

WPF权限控制框架——【2】模块、菜单、按钮

 

 以上图片的三个红框标记分别对应的是接口项目、插件项目、启动项目,稍晚的时候,会将今天的代码上传到

QQ群:720369133

对源码有兴趣的小伙伴,欢迎进群,也恳请大家提出宝贵意见!

 

系列目录:

WPF权限控制——【1】界面布局


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明WPF权限控制框架——【2】模块、菜单、按钮
喜欢 (0)

您必须 登录 才能发表评论!

加载中……