多层菜单的实现方案(含HierarchicalDataTemplate使用)

1、递归

        下面是Winform的递归添加菜单栏数据,数据设置好父子id方便递归使用

在TreeView的控件窗口加载时,调用递归加载菜单

private void LoadTvMenu(){this.nodeList = objService.GetAllMenu();    // 通过Service得到全部数据// 创建一个根节点this.tv_MenuList.Nodes.Clear(); // 亲空所有节点// 这个是TreeView的节点TreeNode rootNode = new TreeNode();rootNode.Text = "学员管理系统";rootNode.Tag = "0"; // 暂时没什么用rootNode.ImageIndex = 0;    // 设置根节点现实的图片this.tv_MenuList.Nodes.Add(rootNode);   // 将根节点添加到treeview根节点// 基于递归方式添加所有子节点CreateChildNode(rootNode, "0");}private void CreateChildNode(TreeNode parentNode, string preId){var nodes = from list in nodeListwhere list.ParentId.Equals(preId)select list;foreach (var item in nodes){TreeNode node = new TreeNode();node.Text = item.MenuName;node.Tag = item.MenuCode;// 设置节点图表if (item.ParentId == "0"){node.ImageIndex = 1;}else{node.ImageIndex = 3;}parentNode.Nodes.Add(node); // 给父节点添加上这个子节点// 递归调用CreateChildNode(node, item.MenuId.ToString());this.tv_MenuList.Nodes[0].Expand(); // 将一级目录全部展开this.tv_MenuList.ExpandAll();}}

在WPF中也是差不多的可以用递归实现加载TreeView

2、WPF中可以使用HierarchicalDataTemplate非常方便

 创建数据类

public class ListLeagueList : ObservableCollection<League>
{List<League> leagues = new List<League>();List<Division> divisions = new List<Division>();List<Team> teams = new List<Team>();public ListLeagueList(){teams.Add(new Team() { Name = "Team 1" });teams.Add(new Team() { Name = "Team 2" });teams.Add(new Team() { Name = "Team 3" });teams.Add(new Team() { Name = "Team 4" });divisions.Add(new Division() { Name = "Division 1", Teams = teams });divisions.Add(new Division() { Name = "Division 2", Teams = teams });divisions.Add(new Division() { Name = "Division 3", Teams = teams });Add(new League() { Name = "League a", Divisions = divisions });Add(new League() { Name = "League b", Divisions = divisions });Add(new League() { Name = "League c", Divisions = divisions });}
}

 view中        设置下一个子集合为ItemsSource

<DockPanel><DockPanel.Resources><local:ListLeagueList x:Key="myList" /><HierarchicalDataTemplate DataType="{x:Type models:League}" ItemsSource="{Binding Divisions}"><TextBlock Text="{Binding Path=Name}" /></HierarchicalDataTemplate><HierarchicalDataTemplate DataType="{x:Type models:Division}" ItemsSource="{Binding Teams}"><TextBlock Text="{Binding Path=Name}" /></HierarchicalDataTemplate><!--  最后一个没有ItemsSource  --><HierarchicalDataTemplate DataType="{x:Type models:Team}"><TextBlock Text="{Binding Path=Name}" /></HierarchicalDataTemplate></DockPanel.Resources><Menux:Name="menu1"Margin="10"DockPanel.Dock="Top"><MenuItem Header="我的足球联赛" ItemsSource="{Binding Source={StaticResource myList}}" /></Menu><TreeView x:Name="treeView1"><TreeViewItem Header="我的足球联赛" ItemsSource="{Binding Source={StaticResource myList}}" /></TreeView></DockPanel>

使用HierarchDataTemplate后可以显示多层的控件都可以使用

-- 这里的ItemsSource是集合,使用其它方式绑定上也是一样的;HierarchicalDataTemplate就是独立于这个集合的,检测到合适就起作用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL中如何添加数据

SQL中如何添加数据 一、SQL中如何添加数据&#xff08;方法汇总&#xff09;二、SQL中如何添加数据&#xff08;方法详细解说&#xff09;1. 使用SQL脚本&#xff08;推荐&#xff09;1.1 在表中插入1.1.1 **第一种形式**1.1.2 **第二种形式**SQL INSERT INTO 语法示例SQL INSE…

【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现

&#x1f31e;前言 这里我们会实现一个项目&#xff1a;在linux操作系统下基于OpenCV和Socket的人脸识别系统。 目录 &#x1f31e;前言 &#x1f31e;一、项目介绍 &#x1f31e;二、项目分工 &#x1f31e;三、项目难题 &#x1f31e;四、实现细节 &#x1f33c;4.1 关…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记06_共谋(下)

1. 博弈论 1.1. 当市场竞争对手之间普遍存在着误解和不信任情绪时&#xff0c;从长远来看&#xff0c;他们一半时间是在合作&#xff0c;另一半时间则是在背叛承诺 1.2. 当一方越了解对手&#xff0c;或者说可以更好地掌握对方的战略性行为时&#xff0c;他才可能找到展开合作…

软件设计不是CRUD(14):低耦合模块设计理论——行为抽象与设计模式(上)

是不是看到“设计模式”四个字,各位读者就觉得后续内容要开始讲一些假大空的内容了?各位读者是不是有这样的感受,就是单纯讲设计模式的内容,网络上能找到很多资料,但是看过这些资料后读者很难将设计模式运用到实际的工作中。甚至出现了一种声音:设计模式是没有用的,应用…

70.爬楼梯(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 输入&#xff1a; n 2 输出&#xff1a;…

C++:vector底层剖析

文章目录 前言成员变量成员函数vector ()size_t size()size_t capacity()iterator begin()和const_iterator begin()constiterator end()和const_iterator end()const~vector()void push_back(const&T val)vector<T>(const vector<T>& v)vector<T>&a…

python基础练习 闰年判断

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给定一个年份&#xff0c;判断这一年是不是闰年。 当以下情况之一满足时&#xff0c;这一年是闰年&#xff1a; 1. 年份…

urllib.error.HTTPError: HTTP Error 400: Bad Request

urllib.error.HTTPError: HTTP Error 400: Bad Request错误通常是由于客户端发送的请求无效而导致的。具体来说&#xff0c;HTTP状态码400表示客户端发送的请求存在语法错误或无法被服务器理解。 以下是一些可能导致HTTP Error 400的常见原因&#xff1a; 1.请求参数错误&…

前端解决跨域问题( 6种方法 )

本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…

美团2025春招第一次笔试题

第四题 题目描述 塔子哥拿到了一个大小为的数组&#xff0c;她希望删除一个区间后&#xff0c;使得剩余所有元素的乘积未尾至少有k个0。塔子哥想知道&#xff0c;一共有多少种不同的删除方案? 输入描述 第一行输入两个正整数 n,k 第二行输入n个正整数 a_i&#xff0c;代表…

【Docker】Memcached 容器化部署

Memcached环境标准软件基于Bitnami Memcached 构建。当前版本为1.6.24 你可以通过轻云UC部署工具直接安装部署&#xff0c;也可以手动按如下文档操作&#xff0c;该项目已经全面开源&#xff0c;可以从如下环境获取 配置文件地址: https://gitee.com/qingplus/qingcloud-platf…

ARM TrustZone技术解析:构建嵌入式系统的安全扩展基石

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-dSk2aQ85ZR0zxnyI {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler---原理、应用、源码与注意事项

【机器学习】进阶学习&#xff1a;详细解析Sklearn中的MinMaxScaler—原理、应用、源码与注意事项 这篇文章的质量分达到了97分&#xff0c;虽然满分是100分&#xff0c;但已经相当接近完美了。请您耐心阅读&#xff0c;我相信您一定能从中获得不少宝贵的收获和启发~ &#x1f…

free pascal 调用 C#程序读 Freeplane.mm文件,生成测试用例.csv文件

C# 请参阅&#xff1a;C# 用 System.Xml 读 Freeplane.mm文件&#xff0c;生成测试用例.csv文件 Freeplane 是一款基于 Java 的开源软件&#xff0c;继承 Freemind 的思维导图工具软件&#xff0c;它扩展了知识管理功能&#xff0c;在 Freemind 上增加了一些额外的功能&#x…

hadoop报错:HADOOP_HOME and hadoop.home.dir are unset. 解决方法

参考&#xff1a;https://blog.csdn.net/weixin_45735242/article/details/120579387 解决方法 1.下载apache-hadoop-3.1.0-winutils-master 官网下载地址&#xff1a; https://github.com/s911415/apache-hadoop-3.1.0-winutils win配置系统环境&#xff1a; 然后重启idea…

一文了解原型和原型链

本文重点概念&#xff1a; 1、所有的对象都是new一个函数创建的 2、所有的函数都有一个属性prototype&#xff0c;称为函数原型 3、函数原型得到的这个对象都有一个属性constructor,指向该函数 4、所有的对象都有一个属性&#xff1a;隐式原型__proto__&#xff0c;隐式原型…

How to use conda in Ubuntu 22.04

How to use conda in Ubuntu 22.04 切换清华源创建环境查看环境激活环境查看环境中的包在环境中安装包退出当前环境命令行自动补全 切换清华源 sudo tee ~/.condarc <<-EOF auto_activate_base: falsechannels:- defaults show_channel_urls: true default_channels:- h…

机器学习,剪刀,石头,布

计算机视觉:剪刀,石头,步 TensorFlow AI人工智能及Machine Learning训练图集的下载建立分类模型并用图像进行训练检验模型总结当前AI Machine Learning 异常火爆,希望在MCU上使用机器学习,做图像识别的工作。看到一个剪刀,石头,步的学习程序,给大家分享一下。 TensorFl…

Visual studio编译器报1个无法解析的外部命令

解决思路&#xff1a;&#xff08;以下思路需对照代码进行逐点分析&#xff09; ①&#xff1a;代码里函数有声明&#xff0c;但是没有定义 &#xff08;初学者错这个比较多&#xff09; ②&#xff1a;类中有静态变量成员&#xff0c;没有对它进行初始化&#xff08;是变量&…

【前端】原子化UnoCSS使用

介绍 有时候我们会遇到样式复用的情况&#xff0c;需要将一些相同的样式提取到一个 class 中。手动将每个原子粒的样式提取出来非常耗时耗力。曾经使用过 Bootstrap&#xff0c;但它会将没有使用到的类样式也打包到生产环境中&#xff0c;影响了性能。我们需要的是只打包使用到…