TreeView
树视图(TreeView)控件以树的方式显示集合,可以显示层次关系。
Nodes属性
该属性用于设计TreeView控件的节点。
具体方法
在TreeView的属性栏找到Nodes,点击 …,弹出“TreeNode编辑器”窗口。
“添加根”按钮可以为TreeView控件添加根结点,添加根结点后,“添加子级”按钮变为可用。
ImageList属性
用于设置从中获取图像的ImageList控件,该属性的设置必须与ImageList控件相配合。
Scrollable属性
用于指示当TreeView控件包含多个节点,无法全部可视时确定是否使用滚动条,有true和false两个值。
ShowLines属性
用于指示是否在同级别节点以及父节点与子节点之间显示连线。有true和false两个值。
ShowPlusMinus属性
用于指示是否在父节点旁边显示“+/-”按钮。有true和false两个值。
ShowRootLines属性
用于指示是否在根结点之间显示连线。有true和false两个值。
SelectedNode属性
用于获取或设置TreeView控件中被选中的节点。
AfterSelect事件
TreeView控件最常用的事件为AfterSelect事件,当更改TreeView控件中选定的内容时触发该事件。TreeView型的控件,如Button、Lable、Image等控件,可以通过绑定到数据源并使用HieratchicalDataTemplate对象来填充其树。可以修改默认ControlTemplate以使控件具有独特的外观。这里举一个完整的TreeView实例来进行说明。本节主要实现自定义控件样式+数据源绑定动态添加父子节点的功能
1、主窗体中加入TreeView控件

由于我们的这个TreeView控件父子节点字体样式、背景颜色等不同,所以使用Binding的方式通过后台进行设置。

2、TreeView的Model:TreeViewNode.cs

public class TreeViewNode : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}

#region 属性字段
private int id;
/// <summary>
/// 节点ID
/// </summary>
public int Id
{get{return id;}set{id = value;}
}private int parentId;
/// <summary>
/// 父节点ID
/// </summary>
public int ParentId
{get{return parentId;}set{parentId = value;}
}private string nodeName;
/// <summary>
/// 节点名称(最多六个字符)
/// </summary>
public string NodeName
{get{return nodeName;}set{nodeName = value;if (nodeName.Length > 6){//非添加项考虑字符长度if (this.isNodeAdd != true && this.isChildNodeAdd != true){nodeName = nodeName.Substring(0, 6);}}OnPropertyChanged("NodeName");}
}private bool isChildNode;
/// <summary>
/// 是否是子节点
/// </summary>
public bool IsChildNode
{get{return isChildNode;}set{isChildNode = value;}
}private bool isNodeAdd;
/// <summary>
/// 是否添加节点
/// </summary>
public bool IsNodeAdd
{get{return isNodeAdd;}set{isNodeAdd = value;}
}private bool isChildNodeAdd;
/// <summary>
/// 是否是添加子节点
/// </summary>
public bool IsChildNodeAdd
{get{return isChildNodeAdd;}set{isChildNodeAdd = value;}
}private ObservableCollection<TreeViewNode> childNodes;
/// <summary>
/// 子节点数据
/// </summary>
public ObservableCollection<TreeViewNode> ChildNodes
{get{if (childNodes == null){childNodes = new ObservableCollection<TreeViewNode>();childNodes.CollectionChanged += new NotifyCollectionChangedEventHandler(OnMoreStuffChanged);}return childNodes;}set{childNodes = value;}
}
private void OnMoreStuffChanged(object sender, NotifyCollectionChangedEventArgs e)
{if (e.Action == NotifyCollectionChangedAction.Add){TreeViewNode stuff = (TreeViewNode)e.NewItems[0];stuff.ParentId = this.Id;}else if (e.Action == NotifyCollectionChangedAction.Remove){TreeViewNode stuff = (TreeViewNode)e.OldItems[0];if (stuff.ParentId == this.Id){stuff.ParentId = 0;}}
}#region 界面展示相关属性
//根据节点类型设置Margin
public string Margining
{get{double padLeft;if (this.isChildNode == true || this.isNodeAdd == true){padLeft = 36;}else{padLeft = 10;}return string.Format("{0},0,0,0", padLeft);}
}//添加节点按钮是否展示
public Visibility ShowAddButton
{get{if (this.isChildNode == false && this.isNodeAdd == true && this.isChildNodeAdd == false)return Visibility.Visible;elsereturn Visibility.Collapsed;}
}//根据节点设置分隔线
public string ShowBorderThickness
{get{if (this.isChildNode == false && this.isChildNodeAdd == false)return string.Format("0,1,0,0");elsereturn string.Format("0,0,0,0");}
}//根据子父节点设置字体大小
public int SetFontSize
{get{if (this.isChildNode == true)return 12;elsereturn 14;}
}//根据子父节点设置字体宽度
public string SetFontWeight
{get{if (this.isChildNode == true)return "Normal";elsereturn "Bold";}
}//根据子父节点设置字体颜色
public string SetForeground
{get{if (this.isChildNode == true || this.isNodeAdd == true)return "#999999";elsereturn "#000000";}
}//根据子父节点设置背景颜色
public string SetBackground
{get{if (this.isChildNode == true || this.isNodeAdd == true)return "#ffffff";elsereturn "#87CEEB";}
}//节点是否展开
public bool SetIsExpanded
{get{if (this.isChildNode != true || this.isNodeAdd != true)return false;elsereturn true;}
}
#endregion
#endregion#region 构造函数
public TreeViewNode()
{
}public TreeViewNode(int _id, int _parentId, bool _isChildNode, bool _isChildNodeAdd, bool _isNodeAdd, string _nodeName)
{this.id = _id;this.parentId = _parentId;this.isChildNode = _isChildNode;this.isChildNodeAdd = _isChildNodeAdd;this.isNodeAdd = _isNodeAdd;this.nodeName = _nodeName;
}
#endregion

}

WPF TreeView 控件样式相关推荐

  1. WPF DataGrid控件样式

    WPF DataGrid控件样式 <DataGrid ItemsSource="{Binding ProductsList}" AutoGenerateColumns=&qu ...

  2. WPF控件样式、模板

    初次写博客,新手请多指教. 写WPF已有一年有余了,平时在工作项目当中喜欢总结一些公用库,通用样式之类的,以便于日后工作中遇到,可以直接复用,提供工作效率. 本文提供 Windows.Button.S ...

  3. WPF Calendar 日历控件 样式自定义

    原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不 ...

  4. wpf控件样式管理示意图

    原文:wpf控件样式管理示意图

  5. wpf展开树节点_WPF中展开一个TreeView控件的所有树节点

    在 Windows Form 应用中,我们碰到需要展开一个TreeView 控件的所有树节点的时候很简单,微软已经替我们提供了ExpandAll 方法,我们只要简单的一行代码tv_QTree.Expa ...

  6. WPF 控件样式及样式事件设置

    实例下载:WPF控件样式及样式事件设置-C#文档类资源-CSDN下载 封装用户控件实例:图片选择Checkbox(用户控件)-C#文档类资源-CSDN下载 1.直接在代码中设置控件样式(例:设置按键圆 ...

  7. WPF 自定义DataGrid控件样式

    WPF 自定义DataGrid控件样式 样式一: 样式代码: <!--DataGrid样式--><Style TargetType="DataGrid">& ...

  8. WPF Expander控件简单样式

    WPF Expander控件简单样式 样式代码: <Style x:Key="ExpanderStyle1" TargetType="{x:Type Expande ...

  9. WPF 自定义TabControl控件样式(转)

    WPF 自定义TabControl控件样式 一.前言 程序中经常会用到TabControl控件,默认的控件样式很普通.而且样式或功能不一定符合我们的要求.比如:我们需要TabControl的标题能够居 ...

最新文章

  1. [转]PowerDesigner使用教程 —— 概念数据模型
  2. 什么是Tomcat响应静态资源?
  3. 3. 视图数据View Data和Balde模版 - Laravel从零开始教程
  4. 《零基础看得懂的C语言入门教程 》——(十一)C语言自定义函数真的很简单
  5. 异构计算助力客户春节webp图片编码
  6. apch连接mysql数据库连接_配置phpmyadmin连接远程 MySQL数据库
  7. PDF 开发者 Charles Geschke 去世,39 年前联合创立软件巨头 Adobe!
  8. Oracle与MySQL使用区别
  9. 关于 android 中 edittext 特殊字符过滤和字符长度限制的最优方法
  10. 拓端tecdat|R语言分布滞后线性和非线性模型(DLNM)分析空气污染(臭氧)、温度对死亡率时间序列数据的影响
  11. 阶段3 1.Mybatis_11.Mybatis的缓存_5 缓存的概念
  12. MacOS开发-给自己的 app 添加 URL Scheme(Xcode 9之后)
  13. 微信公众号后台开发---永久素材失效
  14. Python:SEIR传染病模型
  15. SQL中is not null和!=“ “的区别
  16. 一年级上册知识点——语文(人教版)
  17. What's the AOP?
  18. yolov3与yolov4效果对比_知识精讲 | Yolov3和Yolov4核心内容、代码梳理_创事记(5)
  19. booth乘法器原理
  20. 从零开始学WEB前端——JavaScript流程控制语句

热门文章

  1. 圣诞节快乐,教你用shell脚本实现一颗圣诞树。【小酷炫】
  2. 小程序php接口封装,Promise实践 实现微信小程序接口封装
  3. Linux系统下使用gfortran
  4. 客制化键盘编程_客制化机械键盘入门指南
  5. 2019年回顾——2020年计划
  6. YDOOK星空导航正式上线!
  7. 美国电影超短200句
  8. 场效应管的好坏判断方法
  9. 【C++】SGI一级空间配置器
  10. 利用Python代码,展示礼花效果,祝福3.8女神节快乐