码迷,mamicode.com
首页 > Windows程序 > 详细

WPF在MainWindow中初始化菜单

时间:2014-11-24 15:13:46      阅读:390      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   sp   for   数据   on   

1.定义一个菜单模型类,用于保存Key、Title以及子菜单_Submenus,FormFullName是用来保存菜单对应的控件。

bubuko.com,布布扣

2.MainWindow的构造方法里加入了一个程序集,洪水预报用的服务。

bubuko.com,布布扣

初始化系统菜单这里,用List<QlMenu>保存系统主菜单(主菜单用ToggleButton显示),有FormFullName属性的子菜单关联了用TabControl显示的窗口,在后面有专门方法处理。

3.主窗体Load的时候先取得所有菜单的集合--一个递归的List,然后再初始化每个菜单。

bubuko.com,布布扣

子菜单有一级菜单、二级菜单等。一级菜单是大的分类,显示在顶部。

bubuko.com,布布扣

pnlCaption是一个StackPanel,用来存放一级菜单,ToggleButton是可切换状态的控件的基类,如CheckBox,这里用它来做为一级菜单的UI显示,如果选中该菜单,ToggleButton有相应的Style转换显示效果。

输入参数就是上一步得到的我们要用到的所有菜单项的集合,这里循环取得一级菜单,红框部分轻松地将ToogleButton与自定义的菜单类联系起来(自始至终我们都没有未菜单类定义任何常见的菜单功能,我们用按钮代表菜单按键,按钮的DataContext保存了菜单项及其子菜单项(Submenus),相当于我们自己实现了系统的菜单功能(WPF有菜单类吗,应该有吧)。

最后的btnDefault_Click(defaultbtn,null)模拟了菜单项被按下的事件,bubuko.com,布布扣注意defaultbtn在循环中被确定为第一个一级菜单,这样在初始化系统菜单的时候,第一个添加的菜单项将在程序初始加载时被选中。

 

bubuko.com,布布扣

先来看初始化二级菜单,初始化二级菜单在点击一级菜单的按钮后发生,传入参数是按钮的DataContext的一级菜单的Submenus。bubuko.com,布布扣这里在视图设计器里增加了一个菜单标签,是框架的菜单类(System.Windows.Controls.Menu),bubuko.com,布布扣。item.click += new RoutedEventHandler(MenuItem_Click)为二级菜单添加了一个事件委托,当单击菜单项,可以在委托的关联方法中做我们要做的事情,也就是加载与菜单相关的子窗体(分两种---加载单独一个子窗体(可能包含TabControl控件)或者该菜单下面还有子菜单的情况,第二种情况在判断后由指定方法来实现,这里是做成了TabPage的展现形式)bubuko.com,布布扣,QlMenu是数据实体,保存了我们的菜单数据和相互关系,MenuItem和上面的ToggleButton是界面元素,我们用item.DataContext以及btn.DataContext来与数据模型联系起来,十分优雅,这也符合WPF的编程思想。当然在最后仍然机智地选中第一个菜单项。

bubuko.com,布布扣

WPF在MainWindow中初始化菜单

标签:style   blog   http   io   ar   sp   for   数据   on   

原文地址:http://www.cnblogs.com/-NeverMore/p/4113617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!