WPF动态加载菜单目录

一般在项目中,为了方便项目后面的开发和管理,菜单都会选择从数据库动态加载。那么,动态加载菜单的原理是什么呢?

我们在数据库建立菜单表的时候,最起码需要有三个字段:菜单ID(ID)、菜单名称(Name)、上级菜单ID(SuperiorID)。

  1. 查询出所有的菜单数据,循环遍历出上级菜单ID为空的数据,作为一级菜单。
  2. 把每个一级菜单的菜单ID放到菜单数据里进行比较,得到菜单ID等于上级菜单ID的数据,作为二级菜单。
  3. 如果后面还有三级、四级菜单,就重复第二步,这个时候我们可以选择用递归的方式来实现。

 

下面就说一下在代码里面如何操作:

Xaml添加一个Name="SystemMenu"的Menu
       

<Menu Name="SystemMenu" FontSize="14" Height="25" VerticalAlignment="Top">

           
</Menu>

CS后台实现:

        public MainWindow()

        {

            InitializeComponent();

            LoadSystemMenu();

        }               


        /// <summary>

        /// 加载菜单

        /// </summary>

        public void LoadSystemMenu()

        {

            //查询出数据库所有的菜单数据

            DataTable dataTable = model.GetSystemMenu();

            //筛选出上级ID为空的数据(一级菜单)

            DataRow[] dataRows = dataTable.Select("SuperiorID is null");

            //用来存放一级菜单

            List<MenuItem> menuItems = new List<MenuItem>();

            foreach (DataRow item in dataRows)

            {

                MenuItem menu = new MenuItem();

                menu.Header = item["Name"].ToString();

                menu.RenderSize = new Size(100, 25);

                //添加子菜单

                AddChildMenu(menu,item["ID"].ToString(), dataTable);

                menuItems.Add(menu);

            }

            //把一级菜单绑定到菜单栏

            foreach (MenuItem item in menuItems)

            {

                this.SystemMenu.Items.Add(item);

            }

        }


        /// <summary>

        /// 添加子菜单

        /// </summary>

        /// <param name="menu"></param>

        /// <param name="superiorId"></param>

        /// <param name="dataTable"></param>

        private void AddChildMenu(MenuItem menu,string superiorId,DataTable dataTable)

        {

            //筛选出上级菜单ID等于传进来的菜单ID的数据(子菜单)

            DataRow[] dataRows = dataTable.Select("SuperiorID =" + superiorId);

            foreach (DataRow item in dataRows)

            {

                MenuItem menuItem = new MenuItem();

                menuItem.Header = item["Name"].ToString();

                menuItem.RenderSize = new Size(100, 25);

                //绑定子菜单

                menu.Items.Add(menuItem);

                AddChildMenu(menuItem, item["ID"].ToString(), dataTable);

            }

        }

           

  

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF中,动态加载菜单可以通过以下步骤实现: 1. 首先,创建一个菜单控件。可以使用Menu控件或者ContextMenu控件作为基础。例如,可以在XAML中编写如下代码来创建一个Menu控件: ``` <Menu x:Name="menu"> <MenuItem Header="文件"> <MenuItem Header="打开"/> <MenuItem Header="保存"/> </MenuItem> <MenuItem Header="编辑"> <MenuItem Header="复制"/> <MenuItem Header="粘贴"/> </MenuItem> </Menu> ``` 2. 然后,在需要动态加载菜单的事件或方法中,使用代码来添加菜单项。例如,可以在按钮的点击事件中添加菜单项: ``` private void addButton_Click(object sender, RoutedEventArgs e) { MenuItem newItem = new MenuItem(); newItem.Header = "新增菜单项"; newItem.Click += MenuItem_Click; menu.Items.Add(newItem); } ``` 这段代码创建了一个新的菜单项,并添加到现有的菜单控件中。通过为菜单项的Click事件添加事件处理程序,可以在菜单项被点击时执行相应操作。 3. 最后,为菜单项的Click事件编写事件处理程序。在事件处理程序中,可以执行需要的操作或打开相关窗口等。 ``` private void MenuItem_Click(object sender, RoutedEventArgs e) { // 执行操作或打开相关窗口 MessageBox.Show("你点击了新增菜单项!"); } ``` 通过以上步骤,就可以在WPF中实现动态加载菜单。只需在需要的地方动态创建和添加菜单项,并为菜单项的Click事件编写相应的事件处理程序即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值