Напишем метод, который будет возвращать список всех элементов некоторого контейнера:
''' <summary>
''' Возвращает все элементы UIElement заданного типа.
''' </summary>
Public Shared Iterator Function FindVisualChildren(Of T As DependencyObject)(ByVal depObj As DependencyObject) As IEnumerable(Of T)
If (depObj IsNot Nothing) Then
For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(depObj) - 1
Dim child As DependencyObject = VisualTreeHelper.GetChild(depObj, i)
If (child IsNot Nothing) AndAlso (TypeOf child Is T) Then
Yield CType((CObj(child)), T)
End If
For Each current As T In MainWindow.FindVisualChildren(Of T)(child)
Yield current
Next
Next
End If
Return
End Function
Теперь можно использовать данный метод таким способом (здесь MainWindow – это тот контейнер, список чьих потомков нужно получить):
Dim sameTypeElements as New List(Of ComboBox)
For Each cb As ComboBox In FindVisualChildren(Of ComboBox)(MainWindow)
sameTypeElements.Add(cb)
Next