Рейтинг@Mail.ru

WPF: Как получить список всех элементов UIElement заданного типа

Print Friendly, PDF & Email

Напишем метод, который будет возвращать список всех элементов некоторого контейнера:

''' <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

Поделиться

Print Friendly, PDF & Email