这是我潜伏在图书馆中的功能。我从来没有遇到过任何问题,但它确实有一个 GetChildrenCount() 调用,所以如果这对你不起作用,你可能会遇到更大的问题。
Public Shared Function FindVisualChild(Of T As DependencyObject)(ByVal element As DependencyObject) As T
If element Is Nothing Then
Return Nothing
ElseIf TypeOf (element) Is T Then
Return element
Else
Dim count = VisualTreeHelper.GetChildrenCount(element)
For index As Integer = 0 To count - 1
Dim child As DependencyObject = VisualTreeHelper.GetChild(element, index)
If TypeOf (child) Is T Then
Return child
Else
Dim grandchild As T = FindVisualChild(Of T)(child)
If grandchild IsNot Nothing Then Return grandchild
End If
Next
End If
Return Nothing
End Function
用法:x = FindVisualChild(Of DockPanel)(ParentObject)
是的,我知道它是VB。现在是你们中的一个 C# 人员必须转换代码一次的时候了!:)