WPF中TreeView单击展开其子元素以及点击一个元素展开其他元素收起
TreeView单击展开其子元素:
在WPF的TreeView控件中,要想展开它的子元素,我们必须要鼠标左键点两下或者右键点一下,那么我们怎样实现左键点一下就使它展开呢?
Xaml:
<Grid>
<TreeView HorizontalAlignment="Left" Height="208" Margin="243,35,0,0" VerticalAlignment="Top" Width="150">
<TreeViewItem Header="AAA" Selected="TreeViewItem_Selected">
<TreeViewItem Header="aaa"/>
<TreeViewItem Header="bbb"/>
<TreeViewItem Header="ccc"/>
</TreeViewItem>
<TreeViewItem Header="BBB" Selected="TreeViewItem_Selected_1">
<TreeViewItem Header="aaa"/>
<TreeViewItem Header="bbb"/>
<TreeViewItem Header="ccc"/>
</TreeViewItem>
</TreeView>
</Grid>
在后台中的TreeViewItem的Selected函数中添加:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
} private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
{
TreeViewItem treeViewItem = e.OriginalSource as TreeViewItem;
if (treeViewItem == null || e.Handled) return;
treeViewItem.IsExpanded = !treeViewItem.IsExpanded;
treeViewItem.IsSelected = false;
e.Handled = true;
} private void TreeViewItem_Selected_1(object sender, RoutedEventArgs e)
{
TreeViewItem treeViewItem = e.OriginalSource as TreeViewItem;
if (treeViewItem == null || e.Handled) return;
treeViewItem.IsExpanded = !treeViewItem.IsExpanded;
treeViewItem.IsSelected = false;
e.Handled = true;
}
}
这样就可以实现,左键单击一下TreeViewItem使它子元素直接展开。
如图:

点击一个元素展开其他元素收起:
Xaml中:
<Grid>
<TreeView x:Name="Tree_View" SelectedItemChanged="Tree_View_SelectedItemChanged" HorizontalAlignment="Left" Height="208" Margin="243,35,0,0" VerticalAlignment="Top" Width="150">
<TreeViewItem Header="AAA" Selected="TreeViewItem_Selected">
<TreeViewItem Header="aaa"/>
<TreeViewItem Header="bbb"/>
<TreeViewItem Header="ccc"/>
</TreeViewItem>
<TreeViewItem Header="BBB" Selected="TreeViewItem_Selected_1">
<TreeViewItem Header="aaa"/>
<TreeViewItem Header="bbb"/>
<TreeViewItem Header="ccc"/>
</TreeViewItem>
</TreeView>
</Grid>
就是给TreeView添加了一个SelectedItemChanged属性,当里面的元素状态改变时,执行这个方法。
后台添加的代码:
private void Tree_View_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
TreeViewItem selected_item = Tree_View.SelectedItem as TreeViewItem;
TreeViewItem item;
if (selected_item != null)
{
for (int i = 0; i < Tree_View.Items.Count; i++)
{
item = Tree_View.Items[i] as TreeViewItem;
if (item != selected_item)
{
item.IsExpanded = false;
}
}
}
}
注意:我这里的TreeView的Name叫作Tree_View.
这样,就实现了点击一个元素展开其他元素收起的效果。
如图:

WPF中TreeView单击展开其子元素以及点击一个元素展开其他元素收起的更多相关文章
- WPF中TreeView.BringIntoView方法的替代方案
原文:WPF中TreeView.BringIntoView方法的替代方案 WPF中TreeView.BringIntoView方法的替代方案 周银辉 WPF中TreeView.BringIntoVie ...
- WPF中TreeView的使用
因为项目中需要用到TreeView控件,由于是第一次在WPF中用到,因此事先在网上搜了很多关于数据绑定的方法介绍,个人经过实际应用,觉得WPF中的HierarchicalDataTemplate定义模 ...
- WPF中TreeView控件的使用案例
WPF总体来说还是比较方便的,其中变化最大的主要是Listview和Treeview控件,而且TreeView似乎在WPF是一个备受指责的控件,很多人说他不好用.我这个demo主要是在wpf中使用Tr ...
- WPF中TreeView控件SelectedItemChanged方法的MVVM绑定
问题描述:左侧treeview控件中点击不同类别的节点时,右侧的页面会显示不同的权限.比如对于My Publications,拥有Modify和Delete两种权限,对于My Subscription ...
- WPF中TreeView控件数据绑定和后台动态添加数据(二)
写在前面:在(一)中,介绍了TreeView控件MVVM模式下数据绑定的方法.在这篇文章中,将总结给节点添加事件的方法,这样说有些不对,总之实现的效果就是点击某个节点,将出现对应于该节点的页面或者数据 ...
- WPF中TreeView控件数据绑定和后台动态添加数据(一)
数据绑定: 更新内容:补充在MVVM模式上的TreeView控件数据绑定的代码. xaml代码: <TreeView Name="syntaxTree" ItemsSourc ...
- WPF中TreeView的+-号和连线style的一种实现
最近又开始跟WPF打交道,项目里面用到了TreeView这个控件.然后需要有一个连线的外观就像是这样 二话不说,百度了一下,找到一个实现, 通道. 把代码拷贝到项目里面,跑了一下,看上去还不错.但是这 ...
- WPF中TreeView数据结构解析
XAML.CS代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- WPF 中如何使得DataGrid的Column有鼠标点击相应
http://stackoverflow.com/questions/5895803/how-do-i-capture-click-events-on-a-datagrid-column-header ...
随机推荐
- java——编译和运行
Java源代码---->编译器---->Java字节码(即虚拟指令..class文件.特殊的二进制文件.二进制字节码文件)---->jvm---->解释器(jvm的一部分)-- ...
- 用NaviCat创建存储过程批量添加测试数据
打开navicat连接上数据库,然后打开左上角函数,新建一个函数. BEGIN DECLARE i int; --声明变量 DECLARE groupid int; set i=LAST_INSERT ...
- robotframe 学习笔记1
在robot framework中,通过 Set variable关键字来定义变量 连接对象: 通过Catenate关键字可以连接多个信息 加上"SEPARATOR=",可以对多个 ...
- Turing Year 2012
Turing LectureFrom cryptanalysis to cognitive neuroscience - a hidden legacy of Alan Turinghttp://co ...
- 性能测试工具Jmeter03-功能概要
Jmeter工具组成部分 资源生成器:用于生成测试过程中服务器.负载机的资源代码.(LR中的VuGen) 用户运行器:通常是一个脚本运行引擎,根据脚本要求模拟指定的用户行为.(LR中的Controll ...
- python单元测试框架-unittest(三)之用例执行顺序
执行顺序规则: 测试类或测试方法的数字与字母顺序0~9,A-Z 执行如下脚本,理解用例执行顺序 #coding=utf-8 import unittest class Test1(unittest.T ...
- Smarty 限制foreach的循环次数
<!--{foreach from=$news item=news name=foo}--> <!--{if $smarty.foreach.foo.index <7}--&g ...
- HDU 5442——Favorite Donut——————【最大表示法+kmp | 后缀数组】
Favorite Donut Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- 在Java中VO , PO , BO , QO, DAO ,POJO是什么意思
在Java中VO , PO , BO, DAO ,POJO是什么意思 最近在项目中,遇到VO,我的天...那就一起学习回忆一下 首先简单说明下: O/R Mapping是Object Relatio ...
- C#中正则表达式的构建与匹配
使用方法 [1]用用命名空间System.Text.RegularExpressions [2]构造正则表达式 在使用正则表达式时,要先构造正则表达式,这就用到了Regex类,其构建方式有两种: 基本 ...