嗯,我从there
获得的功能有问题 [VB.NET]
Public Class TreeHelper
Public Shared Function FindVisualChildByName(Of T As FrameworkElement)(parent As DependencyObject, name As String) As T
Dim child As T = Nothing
For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(parent) - 1
Dim ch = VisualTreeHelper.GetChild(parent, i)
child = TryCast(ch, T)
If child IsNot Nothing AndAlso child.Name = name Then
Exit For
Else
child = FindVisualChildByName(Of T)(ch, name)
End If
If child IsNot Nothing Then
Exit For
End If
Next
Return child
End Function
End Class
和XAML部分:
<TabItem x:Name="itemControls"
Height="50"
Margin="0"
VerticalAlignment="Top"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
Padding="6,1">
<TabItem.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image x:Name="iconKB"
Width="25"
Height="25"
Stretch="Fill" />
</StackPanel>
</DataTemplate>
</TabItem.HeaderTemplate>
</TabItem>
因此,我尝试使用以下语法编辑iconKB图像的源代码:
TreeHelper.FindVisualChildByName(Of Image)(itemControls, "iconKB").Source = New BitmapImage(New Uri("pack://application:,,,/Resources/icons/Keyboard.png"))
但由于某种原因它不会改变。它一直是空白。 (问题不在于New BitmapImage(New Uri("pack://application:,,,/Resources/icons/Keyboard.png"))
,而是用另一个图像控件完全检查了它)
提前致谢。
答案 0 :(得分:2)
因为它只在DataTemplate的名称范围内定义。想一想,当你运行你的应用程序时,你可以拥有大量的应用程序,并且所有这些都不能被称为iconKB。
编辑:好的我检查了你的代码。没关系。使它不正常的事情是你试图找到一个尚未在VisualTree中的元素,因为该选项卡未打开。因此找不到图像。 如果你在Loaded事件处理程序中编写它,它将起作用。
Private Shadows Sub TSLoaded() Handles tabSettings.Loaded
TreeHelper.FindVisualChildByName(Of Image)(itemControls, "iconKB").Source = New BitmapImage(New Uri("pack://application:,,,/Resources/icons/Keyboard.png"))
TreeHelper.FindVisualChildByName(Of Image)(itemMouse, "iconMouse").Source = New BitmapImage(New Uri("pack://application:,,,/Resources/icons/Mouse.png"))
TreeHelper.FindVisualChildByName(Of Image)(itemAudio, "iconAudio").Source = New BitmapImage(New Uri("pack://application:,,,/Resources/icons/Audio.png"))
TreeHelper.FindVisualChildByName(Of Image)(itemVideo, "iconVideo").Source = New BitmapImage(New Uri("pack://application:,,,/Resources/icons/Video.png"))
TreeHelper.FindVisualChildByName(Of Image)(itemSettings, "iconSettings").Source = New BitmapImage(New Uri("pack://application:,,,/Resources/icons/Settings.png"))
End Sub