2021-08-23 WPF控件专题 TreeView控件详解

布满荆棘的人生 2022-09-07 09:53 349阅读 0赞

在这里插入图片描述

一:静态使用

1.TreeView控件介绍

TreeView简介 :父类:ItemsControl —条目控件 MenuItem:HeaderedItemsControl

按层次结构组织数据 TreeViewItem —HeaderedItemsControl

属性介绍
SelectedItem 选择的项 SelectedValue 选择项的值
SelectedValuePath (string) 菜单名称 编号(列名或属性名)
ItemsSource 数据源

TreeViewItem介绍

TreeViewItem —HeaderedItemsControl
ItemsSource IsExpanded true 展开 false(默认) 折叠
IsSelected 是否选择

2.具体案例

  1. <Window x:Class="WpfAppTest.TreeViewWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:WpfAppTest"
  7. mc:Ignorable="d"
  8. Title="TreeViewWindow" Height="450" Width="800">
  9. <Window.Resources>
  10. <Style TargetType="TreeViewItem">
  11. <Setter Property="Foreground" Value="Orange"/>
  12. <Setter Property="FontSize" Value="14"/>
  13. <Setter Property="Padding" Value="10"/>
  14. <Setter Property="Background" Value="Transparent"/>
  15. </Style>
  16. </Window.Resources>
  17. <Grid>
  18. <TreeView Name="tvLsit" HorizontalAlignment="Left" Height="292" Margin="31,25,0,0" VerticalAlignment="Top" Width="330" SelectedItemChanged="TvLsit_SelectedItemChanged">
  19. <TreeViewItem Header="学生管理系统" IsExpanded="True" >
  20. <TreeViewItem Header="系统管理" IsExpanded="True">
  21. <TreeViewItem Header="角色管理" IsSelected="True" Foreground="LightBlue" />
  22. <TreeViewItem Header="用户管理"/>
  23. <TreeViewItem Header="菜单管理"/>
  24. <TreeViewItem Header="权限管理"/>
  25. </TreeViewItem>
  26. <TreeViewItem Header="业务管理" IsExpanded="False">
  27. <TreeViewItem Header="采购入库"/>
  28. <TreeViewItem Header="销售出库"/>
  29. </TreeViewItem>
  30. </TreeViewItem>
  31. </TreeView>
  32. </Grid>
  33. </Window>
  34. /// <summary>
  35. /// 节点选择响应事件
  36. /// </summary>
  37. /// <param name="sender"></param>
  38. /// <param name="e"></param>
  39. private void TvLsit_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
  40. {
  41. var val = e.NewValue as TreeViewItem;
  42. MessageBox.Show(val.Header.ToString());
  43. }

二:动态使用

1.TreeView控件介绍

代码创建节点:可后台代码添加节点,并不比xaml代码简洁

多层次数据,构造出来:数据库表、Xml文档、Excel数据
编号 名称 父节点编号

1 进销存系统 0
2 系统管理 1
3 用户管理 2

动态生成节点树—分层数据模板

DataType 数据模型
ItemsSource 下一级别的数据列表

2.具体案例

  1. <Window x:Class="WpfAppTest.TreeViewWindow2"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:WpfAppTest"
  7. xmlns:model="clr-namespace:WpfAppTest.Models"
  8. mc:Ignorable="d"
  9. Title="TreeViewWindow2" Height="450" Width="800" Loaded="Window_Loaded">
  10. <Grid>
  11. <TreeView Name="tvList" HorizontalAlignment="Left" Height="210" Margin="55,78,0,0" VerticalAlignment="Top" Width="283" ItemsSource="{Binding MenuList}" SelectedItemChanged="TvList_SelectedItemChanged">
  12. <TreeView.ItemTemplate>
  13. <HierarchicalDataTemplate DataType="{x:Type model:MenuItemModel}" ItemsSource="{Binding SubItems}">
  14. <TextBlock Text="{Binding MenuName}" VerticalAlignment="Center" />
  15. </HierarchicalDataTemplate>
  16. </TreeView.ItemTemplate>
  17. </TreeView>
  18. </Grid>
  19. </Window>
  20. namespace WpfAppTest
  21. {
  22. /// <summary>
  23. /// TreeViewWindow2.xaml 的交互逻辑
  24. /// </summary>
  25. public partial class TreeViewWindow2 : Window
  26. {
  27. public TreeViewWindow2()
  28. {
  29. InitializeComponent();
  30. }
  31. private void Window_Loaded(object sender, RoutedEventArgs e)
  32. {
  33. //代码添加节点---并不比xaml代码简洁
  34. {
  35. //TreeViewItem ti = new TreeViewItem();
  36. //ti.Header = "进销存管理系统";
  37. //tvList.Items.Add(ti);
  38. 根节点下添加三个子节点
  39. //TreeViewItem ti1 = new TreeViewItem();
  40. //ti1.Header = "系统管理";
  41. //ti.Items.Add(ti1);
  42. //TreeViewItem ti2 = new TreeViewItem();
  43. //ti2.Header = "业务管理";
  44. //ti.Items.Add(ti2);
  45. //TreeViewItem ti3 = new TreeViewItem();
  46. //ti3.Header = "查询中心";
  47. //ti.Items.Add(ti3);
  48. 系统管理节点下添加4个子节点
  49. //TreeViewItem ti11 = new TreeViewItem();
  50. //ti11.Header = "用户管理";
  51. //ti1.Items.Add(ti11);
  52. //TreeViewItem ti12 = new TreeViewItem();
  53. //ti12.Header = "角色管理";
  54. //ti1.Items.Add(ti12);
  55. //TreeViewItem ti13 = new TreeViewItem();
  56. //ti13.Header = "菜单管理";
  57. //ti1.Items.Add(ti13);
  58. //TreeViewItem ti14 = new TreeViewItem();
  59. //ti14.Header = "权限管理";
  60. //ti1.Items.Add(ti14);
  61. }
  62. {
  63. List<MenuInfo> allMenus = GetMenuList();//基础菜单数据
  64. List<MenuItemModel> menuList = new List<MenuItemModel>();//目标菜单数据
  65. AddAllMenus(allMenus, menuList, null, 0);
  66. VMenuModel vmodel = new VMenuModel();
  67. vmodel.MenuList = menuList;
  68. this.DataContext = vmodel;//当前Window的数据上下文
  69. }
  70. }
  71. /// <summary>
  72. /// 递归加载菜单项数据
  73. /// </summary>
  74. /// <param name="allMenus"></param>
  75. /// <param name="menusList"></param>
  76. /// <param name="pMenu"></param>
  77. /// <param name="parentId"></param>
  78. private void AddAllMenus(List<MenuInfo> allMenus, List<MenuItemModel> menusList, MenuItemModel pMenu, int parentId)
  79. {
  80. var subList = allMenus.Where(m => m.ParentId == parentId);
  81. foreach (var mi in subList)
  82. {
  83. MenuItemModel miInfo = new MenuItemModel();
  84. miInfo.MenuId = mi.MenuId;
  85. miInfo.MenuName = mi.MenuName;
  86. if (pMenu != null)
  87. pMenu.SubItems.Add(miInfo);
  88. else
  89. menusList.Add(miInfo);
  90. AddAllMenus(allMenus, menusList, miInfo, mi.MenuId);
  91. }
  92. }
  93. /// <summary>
  94. /// 获取菜单数据
  95. /// </summary>
  96. /// <returns></returns>
  97. private List<MenuInfo> GetMenuList()
  98. {
  99. string sql = "select MenuId,MenuName,ParentId from MenuInfos";
  100. SqlDataReader dr = SqlHelper.ExecuteReader(sql, 1);
  101. List<MenuInfo> list = new List<MenuInfo>();
  102. while (dr.Read())
  103. {
  104. MenuInfo menu = new MenuInfo();
  105. menu.MenuId = (int)dr["MenuId"];
  106. menu.MenuName = dr["MenuName"].ToString();
  107. menu.ParentId = (int)dr["ParentId"];
  108. list.Add(menu);
  109. }
  110. dr.Close();
  111. return list;
  112. }
  113. private void TvList_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
  114. {
  115. //响应操作
  116. var val = e.NewValue as MenuItemModel;//
  117. MessageBox.Show(val.MenuName);
  118. }
  119. }
  120. }
  121. public class VMenuModel
  122. {
  123. /// <summary>
  124. /// Menu控件的数据源属性
  125. /// </summary>
  126. public List<MenuItemModel> MenuList { get; set; }
  127. }
  128. public class MenuInfo
  129. {
  130. public int MenuId { get; set; }
  131. public string MenuName { get; set; }
  132. public int ParentId { get; set; }
  133. public string MKey { get; set; }
  134. }

发表评论

表情:
评论列表 (有 0 条评论,349人围观)

还没有评论,来说两句吧...

相关阅读