WPF Lookup child controls and parent control methods
One, find some type of child control and return a list collectionPublic list<t> getchildobjects<t> (DependencyObject obj, Type TypeName)wheret:frameworkelement {DependencyObject child =Null; List<t> childlist =New list<t>();for (int i =0; I <= visualtreehelper.getchildrencount (obj)-1; i++) {child =Visualtreehelper.getchild (obj, i);if (childIs T && (((T) child). GetType () = =TypeName) {Childlist.add ((T) child);} childlist.addrange (getchildobjects<t>(Child,typename)); }ReturnChildlist; Call:list<button> listbuttons = getchildobjects<button> (Parentpanel,typeof(Button)); Second, find the child control by name and return a list collectionPublic list<t> getchildobjects<t> (DependencyObject obj,String name)wheret:frameworkelement {DependencyObject child =Null; List<t> childlist =New list<t>();for (int i =0; I <= visualtreehelper.getchildrencount (obj)-1; i++) {child =Visualtreehelper.getchild (obj, i);if (childIs T && (((T) child). GetType () = = Name |String. IsNullOrEmpty (name)) {Childlist.add ((T) child);} childlist.addrange (getchildobjects<t>(Child,name)); }ReturnChildlist; Call:list<button> listbuttons = getchildobjects<button> (Parentpanel,"Button1"); third, find a child control by its name:Public T getchildobject<t> (DependencyObject obj,String name)wheret:frameworkelement{DependencyObject child =Null; T grandchild =Null;for (int i =0; I <= visualtreehelper.getchildrencount (obj)-1; i++) {child =Visualtreehelper.getchild (obj, i);if (childIs T && (((T) child). Name = = Name |String. IsNullOrEmpty (name))) {Return(T) child; }Else{grandchild = getchildobject<t>(Child, name);if (grandchild! =Null)Returngrandchild; }}returnnull;} Call: StackPanel SP = getchildobject<stackpanel> (This. LayoutRoot,"Spdemopanel"); Iv. finding the parent control by namePublic T getparentobject<t> (DependencyObject obj,String name)where t:frameworkelement{DependencyObject parent =< Span style= "color: #000000;" > visualtreehelper.getparent (obj); while (Parent! = nullif (Parent is T && ((t) parent). Name = = Name | stringreturn (T) parent;} Parent =< Span style= "color: #000000;" > Visualtreehelper.getparent (parent); }returnnull;} Call: Grid Layoutgrid = vthelper.getparentobject<grid> (this.spdemopanel, "layoutroot");
WPF Lookup child controls and parent control methods [reprint]