• winrt代码获取datatemplate中的控件


    此方法会递归遍历该DependencyObject的所有VisualChildren(一般用于获取template中未知Name属性但已知类型的控件):

     1  public static ChildControl FindVisualChild<ChildControl>(this DependencyObject DependencyObj)
     2                  where ChildControl : DependencyObject
     3         {
     4             for (int i = 0; i < VisualTreeHelper.GetChildrenCount(DependencyObj); i++)
     5             {
     6                 DependencyObject Child = VisualTreeHelper.GetChild(DependencyObj, i);
     7 
     8                 if (Child != null && Child is ChildControl)
     9                 {
    10                     return (ChildControl)Child;
    11                 }
    12                 else
    13                 {
    14                     ChildControl ChildOfChild = FindVisualChild<ChildControl>(Child);
    15 
    16                     if (ChildOfChild != null)
    17                     {
    18                         return ChildOfChild;
    19                     }
    20                 }
    21             }
    22 
    23             return null;
    24         }
    View Code

    此方法可获取指定Name属性的子控件(一般用于获取容器控件中已知Name属性的子控件):

     1         public static T GetNamedDescendantOfType<T>(this DependencyObject start, string name) where T : FrameworkElement
     2         {
     3             var descendants = start.GetDescendants();
     4             if (descendants != null)
     5             {
     6                 foreach (FrameworkElement d in descendants)
     7                 {
     8                     if (d.Name.Equals(name))
     9                         return d as T;
    10                 }
    11             }
    12 
    13             return null;
    14         }
    15 
    16         public static IEnumerable<DependencyObject> GetDescendants(this DependencyObject start)
    17         {
    18             var queue = new Queue<DependencyObject>();
    19             var count = VisualTreeHelper.GetChildrenCount(start);
    20 
    21             for (int i = 0; i < count; i++)
    22             {
    23                 var child = VisualTreeHelper.GetChild(start, i);
    24                 yield return child;
    25                 queue.Enqueue(child);
    26             }
    27 
    28             while (queue.Count > 0)
    29             {
    30                 var parent = queue.Dequeue();
    31                 var count2 = VisualTreeHelper.GetChildrenCount(parent);
    32 
    33                 for (int i = 0; i < count2; i++)
    34                 {
    35                     var child = VisualTreeHelper.GetChild(parent, i);
    36                     yield return child;
    37                     queue.Enqueue(child);
    38                 }
    39             }
    40         }
    View Code
  • 相关阅读:
    50.EasyGank妹纸App
    项目开发规范,数据库设计规范
    用外部物理路由器时与外部dhcp服务时怎样使用metadata服务(by quqi99)
    [报错处理]Python Requests
    [译]为什么在__new __()后总是调用__init __()?
    '>/dev/null 2>&1' 是什么意思?
    “努力就会成功”
    [译]如何在红帽系统(RHEL)上源码安装python3?
    [译]在你的GitHub主页固定仓库
    [译]拉取仓库远程分支
  • 原文地址:https://www.cnblogs.com/infixu/p/GetChild.html
Copyright © 2020-2023  润新知