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