1. 一、查找某种类型的子控件,并返回一个List集合
  1. public List<T> GetChildObjects<T>(DependencyObject obj, Type typename) where T : FrameworkElement
  2. {
  3. DependencyObject child = null;
  4. List<T> childList = new List<T>();
  5.  
  6. for (int i = ; i <= VisualTreeHelper.GetChildrenCount(obj) - ; i++)
  7. {
  8. child = VisualTreeHelper.GetChild(obj, i);
  9.  
  10. if (child is T && (((T)child).GetType() == typename))
  11. {
  12. childList.Add((T)child);
  13. }
  14. childList.AddRange(GetChildObjects<T>(child,typename));
  15. }
  16. return childList;
  17. }
  1. 调用:
  1. List<Button> listButtons = GetChildObjects<Button>(parentPanel, typeof(Button));
  1. 二、通过名称查找子控件,并返回一个List集合
  1. public List<T> GetChildObjects<T>(DependencyObject obj, string name) where T : FrameworkElement
  2. {
  3. DependencyObject child = null;
  4. List<T> childList = new List<T>();
  5.  
  6. for (int i = ; i <= VisualTreeHelper.GetChildrenCount(obj) - ; i++)
  7. {
  8. child = VisualTreeHelper.GetChild(obj, i);
  9.  
  10. if (child is T && (((T)child).Name == name |string.IsNullOrEmpty(name)))
  11. {
  12. childList.Add((T)child);
  13. }
  14. childList.AddRange(GetChildObjects<T>(child,name));
  15. }
  16. return childList;
  17. }
  1. 调用:
  1. List<Button> listButtons = GetChildObjects<Button>(parentPanel, "button1");
  1. 三、通过名称查找某子控件:
  1. public T GetChildObject<T>(DependencyObject obj, string name) where T : FrameworkElement
  2. {
  3. DependencyObject child = null;
  4. T grandChild = null;
  5.  
  6. for (int i = ; i <= VisualTreeHelper.GetChildrenCount(obj) - ; i++)
  7. {
  8. child = VisualTreeHelper.GetChild(obj, i);
  9.  
  10. if (child is T && (((T)child).Name == name | string.IsNullOrEmpty(name)))
  11. {
  12. return (T)child;
  13. }
  14. else
  15. {
  16. grandChild = GetChildObject<T>(child, name);
  17. if (grandChild != null)
  18. return grandChild;
  19. }
  20. }
  21. return null;
  22. }
  1. 调用:
  1. StackPanel sp = GetChildObject<StackPanel>(this.LayoutRoot, "spDemoPanel");
  1. 四、通过名称查找父控件
  1. public T GetParentObject<T>(DependencyObject obj, string name) where T : FrameworkElement
  2. {
  3. DependencyObject parent = VisualTreeHelper.GetParent(obj);
  4.  
  5. while (parent != null)
  6. {
  7. if (parent is T && (((T)parent).Name == name | string.IsNullOrEmpty(name)))
  8. {
  9. return (T)parent;
  10. }
  11.  
  12. parent = VisualTreeHelper.GetParent(parent);
  13. }
  14.  
  15. return null;
  16. }
  1. 调用:
  1. Grid layoutGrid = VTHelper.GetParentObject<Grid>(this.spDemoPanel, "LayoutRoot");
  1. 原文地址:https://www.cnblogs.com/udoless/p/3381411.html
  1.  

【转】WPF查找子控件和父控件方法的更多相关文章

  1. vue:子组件通过调用父组件的方法的方式传参

    在本案例中,由于子组件通过调用父组件的方法的方式传参,从而实现修改父组件data中的对象,所以需要啊使用$forceUpdate()进行强制刷新 父组件: provide() { return { s ...

  2. WPF查找子控件和父控件方法

    一.查找某种类型的子控件,并返回一个List集合 public List<T> GetChildObjects<T>(DependencyObject obj, Type ty ...

  3. Android单个控件占父控件宽度一半且水平居中

    前些天,在工作中遇到了一个需求:一个“加载上一页”的按钮宽度为父控件宽度一半,且水平居中于父控件中. 在此给出两种思路: 1.直接在Activity代码中获取到当前父控件的宽度,并将此按钮宽度值设置成 ...

  4. wpf 查找 子元素

    RightContainer.ApplyTemplate();//如果找不到,就执行该句试一试 var xxx=UIHelper.FindChild<ScrollViewer>(Right ...

  5. 子元素使用float 父元素撑开方法

    一个Div包含了多个子Div,并且子Div使用了浮动后,父Div确不能被撑开,如下图: 部分代码如下: 1 <style> 2   #div1{border:1px solid red;f ...

  6. 【转】C# 子窗体如何调用父窗体的方法

    网络上有几种方法,先总结如下: 调用窗体(父):FormFather,被调用窗体(子):FormSub. 方法1: 所有权法       //FormFather:        //需要有一个公共的 ...

  7. uni-app 子组件如何调用父组件的方法

    1.在父组件methods中定义一个方法: changeType:function(type){ this.typeActive = type; alert(type); } 2.在父组件引用子组件时 ...

  8. WPF利用VisualTreeHelper遍历寻找对象的子级对象或者父级对象

    原文:WPF利用VisualTreeHelper遍历寻找对象的子级对象或者父级对象 简介 本文将完整叙述我利用VisualTreeHelper实现题述功能的全部过程,想直接看函数实现的朋友可以跳到函数 ...

  9. C#中combobox 控件属性、事件、方法

    一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...

随机推荐

  1. Win8/Win10下程序经常无响应的解决办法

    如果你使用Win8/Win10系统时经常出现程序无响应的问题不仿试下如下解决办法. 表现症状: 任何程序都有可能出现无响应(记事本.Visual Studio.QQ.视频播放器等) 一旦一个程序出现未 ...

  2. FFmpeg(10)-利用FFmpeg进行视频像素格式和尺寸的转换(sws_getCachedContext(), sws_scale())

    一.包含头文件和库文件 像素格式的相关函数包含在 libswscale.so 库中,CMakeLists需要做下列改动: # swscale add_library(swscale SHARED IM ...

  3. Kprobes

    https://landley.net/kdocs/ols/2007/ols2007v1-pages-215-224.pdf https://www.kernel.org/doc/Documentat ...

  4. SQL Server 2008 R2:error 26 开启远程连接详解

    远程连接sql server 2008 数据库,出现下面的错误: <--在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.    未找到或无法访问服务器.请验证实例名称是 ...

  5. [SQL in Azure] Provisioning a SQL Server Virtual Machine on Azure

    http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-provision-sql-server/ Provi ...

  6. cocos2dx-lua class解析

    function class(classname, super) local superType = type(super) local cls --如果父类既不是函数也不是table则说明父类为空 ...

  7. Mac下用brew搭建PHP(LNMP/LAMP)开发环境

    Mac下搭建lamp开发环境很容易,有xampp和mamp现成的集成环境.但是集成环境对于经常需要自定义一些配置的开发者来说会非常麻烦,而且Mac本身自带apache和php,在brew的帮助下非常容 ...

  8. python2/3 中删除字典中value为空的键值对方法

    python2 data_info = { 'account': 1, 'remark': 2, 'sort': '', 'weight': '', } for key in data_info.ke ...

  9. ROW_NUMBER() OVER函数的基本用法,也可用于去除重复行

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW ...

  10. Nginx作为负载均衡器upstream

    Nginx中与proxy模块结合使用的模块中,最常用的当属upstream模块.upstream模块可定义一个新的上下文,它包含了一组upstream服务器,这些服务器可能被赋予了不同的权重.不同的类 ...