Wpf 访问TabItem中DataTemplate内的元素

Wpf 访问TabItem中DataTemplate内的元素,wpf,xaml,datatemplate,tabitem,Wpf,Xaml,Datatemplate,Tabitem,嗯,我从中得到的函数有问题 [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.GetChild

,我从中得到的函数有问题

[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部分:


因此,我尝试使用以下语法编辑iconKB图像的源代码:

TreeHelper.FindVisualChildByName(图像的)(itemControls,“iconKB”).Source=新的位图图像(新的Uri(“pack://application:,,,/Resources/icons/Keyboard.png”))

但出于某种原因,它并没有改变。它保持空白。(问题不在
新位图图像(新Uri()pack://application:,,,/Resources/icons/Keyboard.png”)
已使用其他图像控件完全检查过)


提前感谢。

这是因为它仅在DataTemplate的名称范围内定义。试想一下,当你运行你的应用程序时,你可能会有很多这样的应用程序,但它们都不能称为iconKB

编辑:好的,我检查了你的代码。没关系。导致其行为不正确的原因是,您试图查找VisualTree中尚未出现的元素,因为该选项卡未打开。因此找不到图像。 如果您在加载的事件处理程序中编写它,它将正常工作

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

我不知道为什么,但我没有找到包含我想要的内容的部分:用鼠标指向它,然后按Ctrl+Shift.Oh lol,在教程()中,我理解了仅控制(因为我是西班牙人:P),最终的结果是没有收费的源。。。如你所见,现在我能做什么?D:(我无法继续编写这个(我想,因为我是WPF新手))也许你在某处有另一个同名的图像?
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