2013-03-15 26 views
0

我正在使用此功能遞歸通過ListBoxItem內的所有控件,並且我在DataTemplate中同時有ButtonTextBlock。它總是選擇按鈕而不是TextBlock。任何人都可以看到我的功能有什麼問題嗎?Button是TextBlock?

Private Function FindVisualChild(ByVal obj As DependencyObject) As TextBlock 
Dim result As TextBlock = Nothing 
For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(obj) - 1 
    Dim child As DependencyObject = TryCast(VisualTreeHelper.GetChild(obj, i), DependencyObject) 
    If Not child Is Nothing AndAlso TypeOf child Is DependencyObject Then 
    If TypeOf child Is TextBlock Then 
     Dim tbl As TextBlock = TryCast(child, TextBlock) 
     If Not tbl Is Nothing Then result = tbl 
    Else 
     Dim tbl As TextBlock = FindVisualChild(child) 
     If Not tbl Is Nothing Then result = tbl : Exit For 
    End If 
    End If 
Next 
Return result 

端功能

回答

0

看似簡單,但它的工程!沒有解釋爲什麼它與這條線之下類型混淆

Private Function FindVisualChild(ByVal obj As DependencyObject) As TextBlock 
Dim result As TextBlock = Nothing 
For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(obj) - 1 
    Dim child As DependencyObject = TryCast(VisualTreeHelper.GetChild(obj, i), DependencyObject) 
    If TypeOf child Is Button Then Continue For 'fixes it 
    If Not child Is Nothing AndAlso TypeOf child Is DependencyObject Then 
    If TypeOf child Is TextBlock Then 
     Dim tbl As TextBlock = TryCast(child, TextBlock) 
     If Not tbl Is Nothing Then result = tbl 
    Else 
     Dim tbl As TextBlock = FindVisualChild(child) 
     If Not tbl Is Nothing Then result = tbl : Exit For 
    End If 
    End If 
Next 
Return result 

端功能