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
此外,如果元件內的物件你有指定名稱的話,可以用以上這個