zoukankan      html  css  js  c++  java
  • 视树泛型查找,功能强大

    潜移默化学会WPF(企业经验篇)--全新替代掉VisualHelper功能的类,可视树泛型查找,功能强大

    /// <summary>
             /// Finds a Child of a given item in the visual tree.
             /// </summary>
             /// <param name="parent">A direct parent of the queried item.</param>
             /// <typeparam name="T">The type of the queried item.</typeparam>
             /// <param name="childName">x:Name or Name of child. </param>
             /// <returns>The first parent item that matches the submitted type parameter.
             /// If not matching item can be found,
             /// a null parent is being returned.</returns>
             public static T FindChild<T>(DependencyObject parent, string childName)
                where T : DependencyObject
             {
                 // Confirm parent and childName are valid.
                 if (parent == null) return null;
     
                 T foundChild = null;
     
                 int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
                 for (int i = 0; i < childrenCount; i++)
                 {
                     var child = VisualTreeHelper.GetChild(parent, i);
                     // If the child is not of the request child type child
                     T childType = child as T;
                     if (childType == null)
                     {
                         // recursively drill down the tree
                         foundChild = FindChild<T>(child, childName);
     
                         // If the child is found, break so we do not overwrite the found child.
                         if (foundChild != null) break;
                     }
                     else if (!string.IsNullOrEmpty(childName))
                     {
                         var frameworkElement = child as FrameworkElement;
                         // If the child's name is set for search
                         if (frameworkElement != null && frameworkElement.Name == childName)
                         {
                             // if the child's name is of the request name
                             foundChild = (T)child;
                             break;
                         }
                     }
                     else
                     {
                         // child element found.
                         foundChild = (T)child;
                         break;
                     }
                 }
     
                 return foundChild;
             }
     
             public DependencyObject FindChild(DependencyObject o, Type childType)
             {
                 DependencyObject foundChild = null;
                 if (o != null)
                 {
                     int childrenCount = VisualTreeHelper.GetChildrenCount(o);
                     for (int i = 0; i < childrenCount; i++)
                     {
                         var child = VisualTreeHelper.GetChild(o, i);
                         if (child.GetType() != childType)
                         {
                             foundChild = FindChild(child, childType);
                         }
                         else
                         {
                             foundChild = child;
                             break;
                         }
                     }
                 }
                 return foundChild;
             }
     
             public static T FindVisualParent<T>(UIElement element) where T : UIElement
             {
                 UIElement parent = element; while (parent != null)
                 {
                     T correctlyTyped = parent as T; if (correctlyTyped != null)
                     {
                         return correctlyTyped;
                     }
                     parent = VisualTreeHelper.GetParent(parent) as UIElement;
                 } return null;
             }
     
             public static T FindChild<T>(DependencyObject parent) where T : DependencyObject
             {
                 if (parent == null) return null;
     
                 T childElement = null; int childrenCount = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < childrenCount; i++)
                 {
                     var child = VisualTreeHelper.GetChild(parent, i);
                     T childType = child as T; if (childType == null)
                     {
                         childElement = FindChild<T>(child); if (childElement != null) break;
                     }
                     else
                     {
                         childElement = (T)child; break;
                     }
                 } return childElement;
             }

    用法,你懂的

  • 相关阅读:
    CF961E Tufurama 主席树
    [BZOJ3638 && BZOJ3272]带修区间不相交最大K子段和(线段树模拟费用流)
    [BZOJ5294][BJOI2018]二进制(线段树)
    [BZOJ5293][BJOI2018]求和(倍增)
    [BZOJ5306][HAOI2018]染色(容斥+FFT)
    [BZOJ5303][HAOI2018]反色游戏(Tarjan)
    [CF1053C]Putting Boxes Together(线段树)
    整体二分
    JSOI2018R2题解
    LCT维护子树信息
  • 原文地址:https://www.cnblogs.com/fx2008/p/2755134.html
Copyright © 2011-2022 走看看