原文:WPF查找父元素子元素

/// <summary>
        /// WPF中查找元素的父元素
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="i_dp"></param>
        /// <returns></returns>
        public static T FindParent<T>(DependencyObject i_dp) where T : DependencyObject
        {
            DependencyObject dobj = (DependencyObject)VisualTreeHelper.GetParent(i_dp);
            if (dobj != null)
            {
                if (dobj is T)
                {
                    return (T)dobj;
                }
                else
                {
                    dobj = FindParent<T>(dobj);
                    if (dobj != null && dobj is T)
                    {
                        return (T)dobj;
                    }
                }
            }
            return null;
        }

/// <summary>
        ///WPF查找元素的子元素
        /// </summary>
        /// <typeparam name="childItem"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        private childItem FindVisualChild<childItem>(DependencyObject obj)
    where childItem : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is childItem)
                    return (childItem)child;
                else
                {
                    childItem childOfChild = FindVisualChild<childItem>(child);
                    if (childOfChild != null)
                        return childOfChild;
                }
            }
            return null;
        }

//测试listView获取焦点后,将符合条件的的项选中

private void listView_GotFocus(object sender, RoutedEventArgs e)
        {
            DependencyObject dobj = e.OriginalSource as DependencyObject;
            if (null != dobj)
            {
                System.Windows.Controls.ListViewItem gvc = FindParent<System.Windows.Controls.ListViewItem>(dobj);
                if (gvc != null)
                {
                    System.Windows.Controls.ListView listView = FindParent<System.Windows.Controls.ListView>(gvc);
                    if (listView != null)
                    {
                        int index = 0;
                        foreach (var lv in listView.ItemsSource)
                        {
                            if ((FTPFile)gvc.DataContext == lv)
                            {
                                listView.SelectedIndex = index;
                                break;
                            }
                            index++;
                        }
                    }

}
            }
        }

WPF查找父元素子元素的更多相关文章

  1. 当xml结构很深时候 可以通过父节点删除子元素

    当xml结构很深时候 可以通过父节点删除子元素

  2. wpf 查找父元素、子元素方法

    1 /// <summary> 2 /// 根据类型查找子元素 3 /// </summary> 4 /// <typeparam name="T"& ...

  3. wpf 寻找TreeView的子元素,并对其进行操作

    //itemsControl 开始为指定的TreeView控件  item为TreeView子元素 private void PareItems(ItemsControl itemsControl, ...

  4. jquery取前、后、父、子元素

    前.prev(); 后.next(); 父.parent(); 子.children(); 注意:前的前是.prev().prev(),例如前元素无i,但前的前的i元素有i,不能写成.prev('i' ...

  5. jquery查找父元素、子元素(个人经验总结)

    使用js或者jquery查找父元素.子元素经常遇到.可是用起来总容易混淆,这里统一总结了一下,以后用起来相信会方便好多 这里jquery向上查找父元素 用到的方法:closest() parents( ...

  6. CSSmargin击穿问题(子元素margin-top会影响父元素)

    最近写一个H5页面的时候发现了这个被忽视的问题,一时没想到什么原因,搜了半天,记录一下,方便他人踩坑.唉,有些东西不用就忘. 一.问题描述 <div class="container& ...

  7. js和jquery获取当前对象的子元素

    开发中经常遇到需要获取ul下的il对象,个人总结了js和jquery的方法. HTML片断: <ul class="box"> <li>子元素1</l ...

  8. CSS 子元素选择器与后代选择器区别实例讲解

    css子元素选择器和后代选择器在功能描述上非常相同,但是他们其实是有区别的,本文章通过两个简单的实例向大家介绍子元素选择器与后代选择器的区别,需要的朋友可以参考一下. 首先我们来了解一下子元素选择器与 ...

  9. jQuery编程基础精华02(属性、表单过滤器,元素的each,表单选择器,子元素过滤器(*),追加方法,节点,样式操作)

    属性.表单过滤器 属性过滤选择器: $("div[id]")选取有id属性的<div> $("div[title=test]")选取title属性为 ...

随机推荐

  1. JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用

    Java 中无锁的线程安全整数 AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候, 不可避免的会用到synchron ...

  2. keepalived小结

    keepalived 启动流程: 启动三个进程(主进程.healthcheck 进程.vrrp进程)之后,先进入backup状态,运行一次vrrp_script成功后发现没有主,这时候会进入maste ...

  3. jquery 点击其他地方

    <script type="text/javascript"> function stopPropagation(e) { if (e.stopPropagation) ...

  4. want cry -- 137,139,445

    通过wireshark抓包发现smb的请求报文,目的端口为445,没有应答报文 之前设置了“阻止连接”导致smb访问被拒绝.修改为要求对连接进行加密 就可以访问

  5. Opencv中使用Surf特征实现图像配准及对透视变换矩阵H的平移修正

    图像配准需要将一张测试图片按照第二张基准图片的尺寸.角度等形态信息进行透视(仿射)变换匹配,本例通过Surf特征的定位和匹配实现图像配准. 配准流程: 1. 提取两幅图像的Surf特征 2. 对Sur ...

  6. 检索01-c#中基本数据类型和引用类型的区别

    1.基本定义 基本数据类型包括:整型.浮点型.字符型.结构体.布尔型.日期时间.枚举类型等 引用类型包括:字符串.类.数组.接口等 堆定义:是一种特殊的树形数据结构,每个结点都有一个值,一般由程序员分 ...

  7. c#面向对象 基础知识(转)

    OOP技术按照现实世界的特点来管理复杂的事物,把它们抽象为对象,具有自己的状态和行为,通过对消息的反应来完成一定的任务.这种编程方法提供了非常强大的多样性,大大增加了代码的重用机会,增加了程序开发的速 ...

  8. 从研究try catch 捕获不到异步错误谈谈学习方法的问题

    先看下面的代码,思考一下输出 try { throw new Error(3) } catch (e) { console.log(e) } try { setTimeout(function () ...

  9. python request get

    import requests from urllib import parse # 返回response resp = requests.get("https://www.baidu.co ...

  10. Android项目如果要将自己写的类写成要单独打成jar包?

    需求条件: 自己没做过android,公司android开发临时有事请假了,老板说让我研究研究,反正都是java.我心里"XXXXXX".这篇用来自己做个记录,老手请略过,Andr ...