WPF TreeView 控件样式
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 控件样式相关推荐
- WPF DataGrid控件样式
WPF DataGrid控件样式 <DataGrid ItemsSource="{Binding ProductsList}" AutoGenerateColumns=&qu ...
- WPF控件样式、模板
初次写博客,新手请多指教. 写WPF已有一年有余了,平时在工作项目当中喜欢总结一些公用库,通用样式之类的,以便于日后工作中遇到,可以直接复用,提供工作效率. 本文提供 Windows.Button.S ...
- WPF Calendar 日历控件 样式自定义
原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不 ...
- wpf控件样式管理示意图
原文:wpf控件样式管理示意图
- wpf展开树节点_WPF中展开一个TreeView控件的所有树节点
在 Windows Form 应用中,我们碰到需要展开一个TreeView 控件的所有树节点的时候很简单,微软已经替我们提供了ExpandAll 方法,我们只要简单的一行代码tv_QTree.Expa ...
- WPF 控件样式及样式事件设置
实例下载:WPF控件样式及样式事件设置-C#文档类资源-CSDN下载 封装用户控件实例:图片选择Checkbox(用户控件)-C#文档类资源-CSDN下载 1.直接在代码中设置控件样式(例:设置按键圆 ...
- WPF 自定义DataGrid控件样式
WPF 自定义DataGrid控件样式 样式一: 样式代码: <!--DataGrid样式--><Style TargetType="DataGrid">& ...
- WPF Expander控件简单样式
WPF Expander控件简单样式 样式代码: <Style x:Key="ExpanderStyle1" TargetType="{x:Type Expande ...
- WPF 自定义TabControl控件样式(转)
WPF 自定义TabControl控件样式 一.前言 程序中经常会用到TabControl控件,默认的控件样式很普通.而且样式或功能不一定符合我们的要求.比如:我们需要TabControl的标题能够居 ...
最新文章
- [转]PowerDesigner使用教程 —— 概念数据模型
- 什么是Tomcat响应静态资源?
- 3. 视图数据View Data和Balde模版 - Laravel从零开始教程
- 《零基础看得懂的C语言入门教程 》——(十一)C语言自定义函数真的很简单
- 异构计算助力客户春节webp图片编码
- apch连接mysql数据库连接_配置phpmyadmin连接远程 MySQL数据库
- PDF 开发者 Charles Geschke 去世,39 年前联合创立软件巨头 Adobe!
- Oracle与MySQL使用区别
- 关于 android 中 edittext 特殊字符过滤和字符长度限制的最优方法
- 拓端tecdat|R语言分布滞后线性和非线性模型(DLNM)分析空气污染(臭氧)、温度对死亡率时间序列数据的影响
- 阶段3 1.Mybatis_11.Mybatis的缓存_5 缓存的概念
- MacOS开发-给自己的 app 添加 URL Scheme(Xcode 9之后)
- 微信公众号后台开发---永久素材失效
- Python:SEIR传染病模型
- SQL中is not null和!=“ “的区别
- 一年级上册知识点——语文(人教版)
- What's the AOP?
- yolov3与yolov4效果对比_知识精讲 | Yolov3和Yolov4核心内容、代码梳理_创事记(5)
- booth乘法器原理
- 从零开始学WEB前端——JavaScript流程控制语句