多层菜单的实现方案(含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):低耦合模块设计理论——行为抽象与设计模式(上)

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

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…

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

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

美团2025春招第一次笔试题

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

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;隐式原型…

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

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

Buran勒索病毒通过Microsoft Excel Web查询文件进行传播

Buran勒索病毒首次出现在2019年5月&#xff0c;是一款新型的基于RaaS模式进行传播的新型勒索病毒&#xff0c;在一个著名的俄罗斯论坛中进行销售&#xff0c;与其他基于RaaS勒索病毒(如GandCrab)获得30%-40%的收入不同&#xff0c;Buran勒索病毒的作者仅占感染产生的25%的收入,…

AI创造的壁纸,每一幅都是视觉盛宴!

1、方小童在线工具集 网址&#xff1a; 方小童 该网站是一款在线工具集合的网站&#xff0c;目前包含PDF文件在线转换、随机生成美女图片、精美壁纸、电子书搜索等功能&#xff0c;喜欢的可以赶紧去试试&#xff01;

本地部署推理TextDiffuser-2:释放语言模型用于文本渲染的力量

系列文章目录 文章目录 系列文章目录一、模型下载和环境配置二、模型训练&#xff08;一&#xff09;训练布局规划器&#xff08;二&#xff09;训练扩散模型 三、模型推理&#xff08;一&#xff09;准备训练好的模型checkpoint&#xff08;二&#xff09;全参数推理&#xff…

2021年江苏省职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书

2021年江苏省职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书 一、赛项时间&#xff1a;二、赛项信息三、竞赛内容&#xff1a;第一阶段任务书&#xff08;300分&#xff09;任务1&#xff1a;网络平台搭建&#xff08;60分&#xff09;任务2&#xff1a;网络安全设备…

AI预测福彩3D第6弹【2024年3月11日预测--新算法重新开始计算日期】

由于周末休息了两天&#xff0c;没有更新文章&#xff0c;这两天也没有对福彩3D的预测。今天继续咱们使用AI算法来预测3D吧~ 前面我说过&#xff0c;我的目标是能让百十个各推荐7个号码&#xff0c;其中必有中奖号码&#xff0c;这就是7码定位&#xff0c;只要7码定位稳定了&am…

【前端系列】CSS 常见的选择器

CSS 常见的选择器 CSS&#xff08;层叠样式表&#xff09;是一种用于描述网页样式的标记语言&#xff0c;它定义了网页中各个元素的外观和布局。在 CSS 中&#xff0c;选择器是一种用于选择要应用样式的 HTML 元素的模式。选择器允许开发人员根据元素的类型、属性、关系等来选…

JVM3_数据库连接池虚引用ConnectionFinalizerPhantomReference引起的FullGC压力问题排查

背景 XOP服务运行期间&#xff0c;查看Grafana面板&#xff0c;发现堆内存周期性堆积&#xff0c;观察FullGC的时间&#xff0c;xxx&#xff0c;需要调查下原因 目录 垃圾收集器概述 常见的垃圾收集器分区收集策略为什么CMS没成为默认收集器 查看JVM运行时环境分析快照 Pha…