@@ -29,29 +29,43 @@ public INItializableWindow(WindowManager windowManager) : base(windowManager)
29
29
/// instead of the window's name.
30
30
/// </summary>
31
31
protected string IniNameOverride { get ; set ; }
32
+ private bool VisitChild ( IEnumerable < XNAControl > list , Func < XNAControl , bool > judge )
33
+ {
34
+ foreach ( XNAControl child in list )
35
+ {
36
+ bool stop = judge ( child ) ;
37
+ if ( stop ) return true ;
38
+ stop = VisitChild ( child . Children , judge ) ;
39
+ if ( stop ) return true ;
40
+ }
41
+ return false ;
42
+ }
32
43
33
44
public T FindChild < T > ( string childName , bool optional = false ) where T : XNAControl
34
45
{
35
- T child = FindChild < T > ( Children , childName ) ;
36
- if ( child == null && ! optional )
46
+ XNAControl result = null ;
47
+ VisitChild ( new List < XNAControl > ( ) { this } , control =>
48
+ {
49
+ if ( control . Name != childName ) return false ;
50
+ result = control ;
51
+ return true ;
52
+ } ) ;
53
+ if ( result == null && ! optional )
37
54
throw new KeyNotFoundException ( "Could not find required child control: " + childName ) ;
38
-
39
- return child ;
55
+ return ( T ) result ;
40
56
}
41
57
42
- private T FindChild < T > ( IEnumerable < XNAControl > list , string controlName ) where T : XNAControl
58
+ public List < T > FindChildrenStartWith < T > ( string prefix ) where T : XNAControl
43
59
{
44
- foreach ( XNAControl child in list )
60
+ List < T > result = new List < T > ( ) ;
61
+ VisitChild ( new List < XNAControl > ( ) { this } , ( control ) =>
45
62
{
46
- if ( child . Name == controlName )
47
- return ( T ) child ;
48
-
49
- T childOfChild = FindChild < T > ( child . Children , controlName ) ;
50
- if ( childOfChild != null )
51
- return childOfChild ;
52
- }
53
-
54
- return null ;
63
+ if ( string . IsNullOrEmpty ( prefix ) ||
64
+ ! string . IsNullOrEmpty ( control . Name ) && control . Name . StartsWith ( prefix ) )
65
+ result . Add ( ( T ) control ) ;
66
+ return false ;
67
+ } ) ;
68
+ return result ;
55
69
}
56
70
57
71
/// <summary>
0 commit comments