[Silverlight][VB]透過VisualTreeHelper找出DependencyObject內之Object

  • 2815
  • 0

VisualTreeHelper的使用

在寫Silverlight 難免就用一堆資料繫結,然後一些集合物件,趴趴趴就什麼都有了,不然就是製作了不錯的templete套用在物件上,但問題就來了,有時候元件內所編輯的templete元件,無法輕易的控製,以下就提供一個在msdn上別人提供的方法。


Private Function GetVisualTreeObject(Of T)(ByVal obj As DependencyObject)
    Dim child As DependencyObject
    Dim count As Integer = VisualTreeHelper.GetChildrenCount(obj)
    For index = 0 To count - 1
        child = VisualTreeHelper.GetChild(obj, index)
        If child.GetType().Name = GetType(T).Name Then
            Return child
        End If
        child = GetVisualTreeObject(Of T)(child)
        If Not IsNothing(child) Then
            Return child
        End If
    Next
    Return Nothing
End Function

要用的話~就是指定型態,指定所欲展開的元件。


Private Function FindInternalObjectByName(Of T)(ByVal name As String, ByVal obj As DependencyObject)
    Dim child As DependencyObject
    Dim count As Integer = VisualTreeHelper.GetChildrenCount(obj)
    For index = 0 To count - 1
        child = VisualTreeHelper.GetChild(obj, index)
        If child.GetType().Name = GetType(T).Name Then
            Dim fe As FrameworkElement = child
            If fe.Name = name Then
                Return child
            End If
        End If
        child = GetVisualTreeObject(child)
        If Not IsNothing(child) Then
            Return child
        End If
    Next
    Return Nothing
End Function 

此外,如果元件內的物件你有指定名稱的話,可以用以上這個