1. 一、查找某种类型的子控件,并返回一个List集合
  2. public List<T> GetChildObjects<T>(DependencyObject obj, Type typename) where T : FrameworkElement
  3. {
  4. DependencyObject child = null;
  5. List<T> childList = new List<T>();
  6.  
  7. for (int i = ; i <= VisualTreeHelper.GetChildrenCount(obj) - ; i++)
  8. {
  9. child = VisualTreeHelper.GetChild(obj, i);
  10.  
  11. if (child is T && (((T)child).GetType() == typename))
  12. {
  13. childList.Add((T)child);
  14. }
  15. childList.AddRange(GetChildObjects<T>(child,typename));
  16. }
  17. return childList;
  18. }
  19. 调用:
  20. List<Button> listButtons = GetChildObjects<Button>(parentPanel, typeof(Button));
  21. 二、通过名称查找子控件,并返回一个List集合
  22. public List<T> GetChildObjects<T>(DependencyObject obj, string name) where T : FrameworkElement
  23. {
  24. DependencyObject child = null;
  25. List<T> childList = new List<T>();
  26.  
  27. for (int i = ; i <= VisualTreeHelper.GetChildrenCount(obj) - ; i++)
  28. {
  29. child = VisualTreeHelper.GetChild(obj, i);
  30.  
  31. if (child is T && (((T)child).GetType() == name |string.IsNullOrEmpty(name)))
  32. {
  33. childList.Add((T)child);
  34. }
  35. childList.AddRange(GetChildObjects<T>(child,name));
  36. }
  37. return childList;
  38. }
  39. 调用:
  40. List<Button> listButtons = GetChildObjects<Button>(parentPanel, "button1");
  41. 三、通过名称查找某子控件:
  42. public T GetChildObject<T>(DependencyObject obj, string name) where T : FrameworkElement
  43. {
  44. DependencyObject child = null;
  45. T grandChild = null;
  46.  
  47. for (int i = ; i <= VisualTreeHelper.GetChildrenCount(obj) - ; i++)
  48. {
  49. child = VisualTreeHelper.GetChild(obj, i);
  50.  
  51. if (child is T && (((T)child).Name == name | string.IsNullOrEmpty(name)))
  52. {
  53. return (T)child;
  54. }
  55. else
  56. {
  57. grandChild = GetChildObject<T>(child, name);
  58. if (grandChild != null)
  59. return grandChild;
  60. }
  61. }
  62. returnnull;
  63. }
  64. 调用:
  65. StackPanel sp = GetChildObject<StackPanel>(this.LayoutRoot, "spDemoPanel");
  66. 四、通过名称查找父控件
  67. public T GetParentObject<T>(DependencyObject obj, string name) where T : FrameworkElement
  68. {
  69. DependencyObject parent = VisualTreeHelper.GetParent(obj);
  70.  
  71. while (parent != null)
  72. {
  73. if (parent is T && (((T)parent).Name == name | string.IsNullOrEmpty(name)))
  74. {
  75. return (T)parent;
  76. }
  77.  
  78. parent = VisualTreeHelper.GetParent(parent);
  79. }
  80.  
  81. returnnull;
  82. }
  83. 调用:
  84. Grid layoutGrid = VTHelper.GetParentObject<Grid>(this.spDemoPanel, "LayoutRoot");

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. iOS端JSON转Model链式编程框架SuperKVC使用方法与原理

    背景 在client编程中.字典转模型是一个极为常见的问题,苹果提供了KVC来实现NSDictionary到Model的注入,可是KVC仅仅能进行单层浅注入.且无法处理类型转换.key与属性名不正确应 ...

  2. MVC 之Action

    下面我要重新温习一下,MVC控制器中的Action方法相关概念: 1.Action方法必须是public,不能是private或者是protected; 2.Action方法不能够被重载: 3.Act ...

  3. 统一日志监控系统 springboot websocket 简单版 王代军-作品

    http://git.oschina.net/redArmy/springboot-websocket-logs 目的: 统一监控 开发测试环境日志 如果需要可以拓展线上环境的日志(自己视情况而定) ...

  4. git版本控制文件提交到composer应用市场,并下载用市场的软件库

    要把github中的项目提交到composer中去,必须在github管理的项目中新建对应的composer.json文件, composer.json文件建立的方法 cmd定位到项目目录 compo ...

  5. dubbo-monitor监控台的部署

    参考资料:dubbo的monitorhttps://github.com/handuyishe/dubbo-monitorhttp://blog.yangcvo.me/2017/01/26/Java- ...

  6. nginx是以多进程的方式来工作的

    nginx是以多进程的方式来工作的. nginx在启动后,会有一个master进程和多个worker进程. master进程主要用来管理worker进程: 包含: 1.接收来自外界的信号,向各work ...

  7. Socket tips: 同意socket发送UDP Broadcast

    假设创建一个UDP Socket: socketHandle = socket(serverAddr->ai_family, serverAddr->ai_socktype, server ...

  8. Linux下NDK的配置

    vim ~/.bashrc 在文件末尾添加如图两行代码 写下来方便复制export NDKROOT=/usr/ndk/android-ndk-r12bexport PATH=$NDKROOT:$PAT ...

  9. read pread write pwrite open

    http://stackoverflow.com/questions/7592822/what-are-the-advantages-of-pwrite-and-pread-over-fwrite-a ...

  10. Cocos2d-x CCScale9Sprite 用法

    1.创建方式有三种: (1).直接创建 auto blocks = Scale9Sprite::create("blocks9.png", Rect(0, 0, 96, 96), ...