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单击展开其子元素以及点击一个元素展开其他元素收起的更多相关文章

  1. WPF中TreeView.BringIntoView方法的替代方案

    原文:WPF中TreeView.BringIntoView方法的替代方案 WPF中TreeView.BringIntoView方法的替代方案 周银辉 WPF中TreeView.BringIntoVie ...

  2. WPF中TreeView的使用

    因为项目中需要用到TreeView控件,由于是第一次在WPF中用到,因此事先在网上搜了很多关于数据绑定的方法介绍,个人经过实际应用,觉得WPF中的HierarchicalDataTemplate定义模 ...

  3. WPF中TreeView控件的使用案例

    WPF总体来说还是比较方便的,其中变化最大的主要是Listview和Treeview控件,而且TreeView似乎在WPF是一个备受指责的控件,很多人说他不好用.我这个demo主要是在wpf中使用Tr ...

  4. WPF中TreeView控件SelectedItemChanged方法的MVVM绑定

    问题描述:左侧treeview控件中点击不同类别的节点时,右侧的页面会显示不同的权限.比如对于My Publications,拥有Modify和Delete两种权限,对于My Subscription ...

  5. WPF中TreeView控件数据绑定和后台动态添加数据(二)

    写在前面:在(一)中,介绍了TreeView控件MVVM模式下数据绑定的方法.在这篇文章中,将总结给节点添加事件的方法,这样说有些不对,总之实现的效果就是点击某个节点,将出现对应于该节点的页面或者数据 ...

  6. WPF中TreeView控件数据绑定和后台动态添加数据(一)

    数据绑定: 更新内容:补充在MVVM模式上的TreeView控件数据绑定的代码. xaml代码: <TreeView Name="syntaxTree" ItemsSourc ...

  7. WPF中TreeView的+-号和连线style的一种实现

    最近又开始跟WPF打交道,项目里面用到了TreeView这个控件.然后需要有一个连线的外观就像是这样 二话不说,百度了一下,找到一个实现, 通道. 把代码拷贝到项目里面,跑了一下,看上去还不错.但是这 ...

  8. WPF中TreeView数据结构解析

    XAML.CS代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  9. WPF 中如何使得DataGrid的Column有鼠标点击相应

    http://stackoverflow.com/questions/5895803/how-do-i-capture-click-events-on-a-datagrid-column-header ...

随机推荐

  1. Spark2.3.0 报 io.netty.buffer.PooledByteBufAllocator.metric

    Spark2.3.0依赖的netty-all-4.1.17.Final.jar 与 hbase1.2.0依赖的netty-all-4.0.23.Final.jar 冲突 <!-- Spark2. ...

  2. 安装pyautogui时报错备注

    python3.6用pip安装pyautogui时报错,找了蛮多方法都不行,最后通过安装低版本的pyautogui解决,这里备注下 报错图 解决方法: pip install pyautogui==0 ...

  3. js 实现继承的几种方式

    //js中实现继承的几种方式 //实现继承首先要有一个父类,先创造一个动物的父类 function Animal(name){ this.name = name; this.shoot = funct ...

  4. spring MVC设置不拦截静态资源

    问题产生: 因为我们在web.xml中写了 拦截所有请求,当然包括了静态资源,所以页面需要引用css或js的话,该请求也会被拦截,例如: 在style.css中写一个简单样式,加个背景颜色  body ...

  5. 判断元素类型JS

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Spark集群安装MySQL环境

    1.修改yum源 鉴于用国外的Yum源,速度比较慢,所以想到将国外的yum源改为国内的Yum源,这里选择使用比较多的阿里云源.具体修改方法可以参考此连接 我们先新建一个新的文件用来存放Yum源: [k ...

  7. Ubuntu18.10安装及优化

    最近机器学习很火,想来学习下,先来搭建一个学习平台. https://www.ubuntu.com 下载最新版本的系统,我这里是 18.10 桌面版. 然后进行分区,我这里在vm只创建了 80G的硬盘 ...

  8. Intellij IDEA 配置jrebel热部署

    Jrebel 先介绍一下jrebel,jrebel是可以热部署项目的一个工具,更改代码自动部署并不需要重启项目(在spring中的controller中,增加.修改方法都是可以进行热部署而不需要重启的 ...

  9. 设计模式之装饰器模式io的小入门(十一)

    装饰器模式详解地址 原文总结 定义: 在不必改变原类文件和使用继承的情况下, 动态的扩展一个对象的功能. 通过创建一个包装对象, 也就是装饰来包裹真实的对象 部分详解提示 看了一些文档, 装饰器模式非 ...

  10. Python函数(3)

    一.装饰器 什么是装饰器,装饰器就是用于拓展原来函数功能的一种函数 装饰器就是用来为被装饰对象添加新功能的工具,装饰器本身可以是任意可调用对象,被装饰的对象也可以是任意可调用对象 装饰器遵循一个关键原 ...