iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >WPF中TreeView控件的用法
  • 705
分享到

WPF中TreeView控件的用法

2024-04-02 19:04:59 705人浏览 安东尼
摘要

在WPF的TreeView使用方式和winform下有很大不同,那些展开某节点、获取父节点,判断某节点是否被选中等常用的操作在WinFORM下都有相关函数,而在WPF中却不能轻易实现

WPF的TreeView使用方式和winform下有很大不同,那些展开某节点、获取父节点,判断某节点是否被选中等常用的操作在WinFORM下都有相关函数,而在WPF中却不能轻易实现。

一种常规的方式是通过MVVM模式来将TreeViewItem节点中的IsSelect,IsExpanded等属性来双向绑定到要显示的节点数据中,然后直接通过节点数据的属性来实现相关操作。

但是,有的时候,当我们没有ViewModel层,但又想像WinFrom那样直接简单的获取或设置这些属性的时候,该如何办呢。其实WPF还是提供了类似WinForm中的这些设置的,只不过形式不一样了而已,但是却没WinFrom的那么直观和方便。CodeProject上就有人将常用函数总结了一下,写成了扩展函数,主要提供如下功能:

public static void SelectObject(this TreeView treeView, object obj)
public static void SelectObject(this TreeView treeView, object obj, bool selected)
public static bool IsObjectSelected(this TreeView treeView, object obj)
public static bool IsObjectFocused(this TreeView treeView, object obj)
public static void ExpandObject(this TreeView treeView, object obj)
public static void ExpandObject(this TreeView treeView, object obj, bool expanded)
public static bool IsObjectExpanded(this TreeView treeView, object obj)
public static TreeViewItem GetParentItem(this TreeViewItem item)

文章地址如下:WPF TreeView tools

但是,这里面有一个小bug:当TreeView节点中使用延迟绑定的时候,根据数据节点获取TreeItem会失败。这里我把它修正了一下,感兴趣的朋友可以直接使用我修改后的函数。  

    public static class TreeViewTools
    {
        /// <summary>
        /// Returns the TreeViewItem of a data bound object.
        /// </summary>
        /// <param name="treeView">TreeView</param>
        /// <param name="obj">Data bound object</param>
        /// <returns>The TreeViewItem of the data bound object or null.</returns>
        public static TreeViewItem GetItemFromObject(this TreeView treeView, object obj)
        {
            try
            {
                DependencyObject dObject = GetContainerFormObject(treeView, obj);
                TreeViewItem tvi = dObject as TreeViewItem;
                while (tvi == null)
                {
                    dObject = VisualTreeHelper.GetParent(dObject);
                    tvi = dObject as TreeViewItem;
                }
                return tvi;
            }
            catch { }
            return null;
        }

        private static DependencyObject GetContainerFormObject(ItemsControl item, object obj)
        {
            if (item == null)
                return null;

            DependencyObject dObject = null;
            dObject = item.ItemContainerGenerator.ContainerFromItem(obj);

            if (dObject != null)
                return dObject;

            var query = from childItem in item.Items.Cast<object>()
                        let childControl = item.ItemContainerGenerator.ContainerFromItem(childItem) as ItemsControl
                        select GetContainerFormObject(childControl, obj);

            return query.FirstOrDefault(i => i != null);
        }

        /// <summary>
        /// Selects a data bound object of a TreeView.
        /// </summary>
        /// <param name="treeView">TreeView</param>
        /// <param name="obj">Data bound object</param>
        public static void SelectObject(this TreeView treeView, object obj)
        {
            treeView.SelectObject(obj, true);
        }

        /// <summary>
        /// Selects or deselects a data bound object of a TreeView.
        /// </summary>
        /// <param name="treeView">TreeView</param>
        /// <param name="obj">Data bound object</param>
        /// <param name="selected">select or deselect</param>
        public static void SelectObject(this TreeView treeView, object obj, bool selected)
        {
            var tvi = treeView.GetItemFromObject(obj);
            if (tvi != null)
            {
                tvi.IsSelected = selected;
            }
        }

        /// <summary>
        /// Returns if a data bound object of a TreeView is selected.
        /// </summary>
        /// <param name="treeView">TreeView</param>
        /// <param name="obj">Data bound object</param>
        /// <returns>Returns true if the object is selected, and false if it is not selected or obj is not in the tree.</returns>
        public static bool IsObjectSelected(this TreeView treeView, object obj)
        {
            var tvi = treeView.GetItemFromObject(obj);
            if (tvi != null)
            {
                return tvi.IsSelected;
            }
            return false;
        }

        /// <summary>
        /// Returns if a data bound object of a TreeView is focused.
        /// </summary>
        /// <param name="treeView">TreeView</param>
        /// <param name="obj">Data bound object</param>
        /// <returns>Returns true if the object is focused, and false if it is not focused or obj is not in the tree.</returns>
        public static bool IsObjectFocused(this TreeView treeView, object obj)
        {
            var tvi = treeView.GetItemFromObject(obj);
            if (tvi != null)
            {
                return tvi.IsFocused;
            }
            return false;
        }

        /// <summary>
        /// Expands a data bound object of a TreeView.
        /// </summary>
        /// <param name="treeView">TreeView</param>
        /// <param name="obj">Data bound object</param>
        public static void ExpandObject(this TreeView treeView, object obj)
        {
            treeView.ExpandObject(obj, true);
        }

        /// <summary>
        /// Expands or collapses a data bound object of a TreeView.
        /// </summary>
        /// <param name="treeView">TreeView</param>
        /// <param name="obj">Data bound object</param>
        /// <param name="expanded">expand or collapse</param>
        public static void ExpandObject(this TreeView treeView, object obj, bool expanded)
        {
            var tvi = treeView.GetItemFromObject(obj);
            if (tvi != null)
            {
                tvi.IsExpanded = expanded;
                if (expanded)
                {
                    // update layout, so that following calls to f.e. SelectObject on child nodes will 
                    // find theire TreeViewNodes
                    treeView.UpdateLayout();
                }
            }
        }

        /// <summary>
        /// Returns if a douta bound object of a TreeView is expanded.
        /// </summary>
        /// <param name="treeView">TreeView</param>
        /// <param name="obj">Data bound object</param>
        /// <returns>Returns true if the object is expanded, and false if it is collapsed or obj is not in the tree.</returns>
        public static bool IsObjectExpanded(this TreeView treeView, object obj)
        {
            var tvi = treeView.GetItemFromObject(obj);
            if (tvi != null)
            {
                return tvi.IsExpanded;
            }
            return false;
        }

        /// <summary>
        /// Retuns the parent TreeViewItem.
        /// </summary>
        /// <param name="item">TreeViewItem</param>
        /// <returns>Parent TreeViewItem</returns>
        public static TreeViewItem GetParentItem(this TreeViewItem item)
        {
            var dObject = VisualTreeHelper.GetParent(item);
            TreeViewItem tvi = dObject as TreeViewItem;
            while (tvi == null)
            {
                dObject = VisualTreeHelper.GetParent(dObject);
                tvi = dObject as TreeViewItem;
            }
            return tvi;
        }
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: WPF中TreeView控件的用法

本文链接: https://www.lsjlt.com/news/151790.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • WPF中TreeView控件的用法
    在WPF的TreeView使用方式和WinForm下有很大不同,那些展开某节点、获取父节点,判断某节点是否被选中等常用的操作在WinForm下都有相关函数,而在WPF中却不能轻易实现...
    99+
    2022-11-13
  • c# WPF中的TreeView使用详解
    目录前台后台在wpf中实现treeview的功能,可能看到很多分享的都是简单的绑定,仅此记录自己完成的功能。 前台 <TreeView x:Name="chapterTre...
    99+
    2022-11-11
  • VB控件TreeView的用法是什么
    TreeView控件是一种用于显示层级结构数据的控件,常用于展示树形菜单、文件目录等。使用TreeView控件,可以:1. 添加树节...
    99+
    2023-10-12
    VB TreeView
  • 浅析C# treeview控件的使用方法
    C#中的treeview控件是用来显示层次结构数据的控件。它通常用于显示树形数据结构,比如文件目录结构、组织结构等。使用treevi...
    99+
    2023-09-22
    C#
  • VB.NET中如何使用TreeView控件
    这篇文章将为大家详细讲解有关VB.NET中如何使用TreeView控件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、准备知识了解 TreeView控件的基本使用,掌握如何添加树状结构的数...
    99+
    2023-06-17
  • C#中如何使用 treeview控件
    C#中如何使用 treeview控件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C# treeview控件的使用方法步骤之一:首先当窗体加载的时候,我们添加上图中所示的节点。...
    99+
    2023-06-17
  • WPF TreeView绑定数据的方法是什么
    WPF TreeView 绑定数据的方法有多种,可以使用以下几种方法: 使用 ItemsSource 属性:可以将一个集合作为 T...
    99+
    2023-10-23
    WPF TreeView
  • 对WPF中的TreeView实现右键选定
    在WPF中,TreeView默认情况是不支持右键选定的,也就是说,当右键点击某节点时,是无法选中该节点的。当我们想在TreeViewItem中实现右键菜单时,往往希望在弹出菜单的同时...
    99+
    2022-11-13
  • Python tkinter 树形列表控件(Treeview)的使用方法
    目录1.方法1.1 bbox(item, column=None) 1.2 column( cid, option=None, **kw) 1.3 delete(items...
    99+
    2022-11-12
  • WPF:在 MVVM 中绑定 TreeView 的分步教程
    以下是在MVVM中绑定TreeView的分步教程:步骤1:创建一个新的WPF项目。在项目中添加一个ViewModel类和一个Mode...
    99+
    2023-09-26
    WPF
  • WPF常用控件用法及介绍
    1.GroupBox 注意: GroupBox仍然需要布局容器来放置元素。如: StackPanel面板 <GroupBox Header="select number"&g...
    99+
    2022-11-13
  • C# TreeView控件使用技巧汇总
    目录前言1.TreeView控件使用1.1 TreeView控件常用的属性1.2 创建窗体文件并修改名称2.设计界面3.添加和删除数据3.1 点击treeView编辑结点3.2 在T...
    99+
    2022-11-13
    C# TreeView控件技巧 C# TreeView控件
  • WPF中使用WebView2控件的方法及常见问题
    目录WebView2简介概述优势支持的运行时平台进程模型基本使用安装WebView2运行时安装WebView2Sdk打开一个网页导航事件打开一个网页的过程更改url的过程空url进阶...
    99+
    2023-02-09
    wpf webbrowser控件 wpf使用webview2控件 Wpf控件
  • WPF常用控件介绍
    WPF(Windows Presentation Foundation)是一种用于创建现代化、丰富的 Windows 桌面应用程序的...
    99+
    2023-09-14
    WPF
  • wpf控件怎么调用
    要调用WPF控件,可以通过以下步骤进行:1. 在XAML文件中定义控件,例如:```xaml```2. 在代码中使用控件对象的名称来...
    99+
    2023-08-16
    wpf
  • WPF控件怎么使用
    本篇内容介绍了“WPF控件怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.GroupBox注意: GroupBox仍然需要布局容器...
    99+
    2023-06-29
  • 自己实现的android树控件treeview
    1.开发原因在项目中经常需要一个需要一个树状框架,这是非常常见的控件。不过可能是谷歌考虑到android是手机系统,界面宽度有限,所以只提供了只有二级的ExpandableLi...
    99+
    2022-06-06
    treeview Android
  • 详解WPF中用户控件和自定义控件的使用
    目录介绍用户控件自定义控件按钮案例自定义控件中常用的知识点介绍 无论是在WPF中还是WinForm中,都有用户控件(UserControl)和自定义控件(CustomControl)...
    99+
    2023-03-02
    WPF用户控件 自定义控件 WPF用户控件 WPF 自定义控件 WPF 控件
  • 对WPF中Expander控件美化
    示例图: Expander控件功能很常见, 一般用于系统左侧的菜单收缩面板。 主要的组成 一个头部(header) 和 一个 内容(content) 组成。 <Expand...
    99+
    2022-11-13
  • WPF中用户控件和自定义控件如何使用
    本篇内容主要讲解“WPF中用户控件和自定义控件如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“WPF中用户控件和自定义控件如何使用”吧!介绍无论是在WPF中还是WinForm中,都有用户控...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作